首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

探索Lua5.2内部兑现:虚拟机指令(6)FUNCTION

2013-01-22 
探索Lua5.2内部实现:虚拟机指令(6)FUNCTION原文nameargsdescOP_CALLA B CA B CR(A), ... ,R(AC-2) : R(A)

探索Lua5.2内部实现:虚拟机指令(6)FUNCTION

原文

nameargsdescOP_CALLA B CA B C   R(A), ... ,R(A+C-2) := R(A)(R(A+1), ... ,R(A+B-1))

nameargsdescOP_TAILCALLA B CA B C   return R(A)(R(A+1), ... ,R(A+B-1))

nameargsdescOP_RETURNA Breturn R(A), ... ,R(A+B-2)

RETURE将返回结果存放到寄存器A到寄存器A+B-2中。如果返回的为变长表达式,则B会被设置为0,表示将寄存器A到当前栈顶的所有值返回。

nameargsdescOP_CLOSUREA BxR(A) := closure(KPROTO[Bx])

CLOSURE为指定的函数prototype创建一个closure,并将这个closure保存到寄存器A中。Bx用来指定函数prototype的id。

nameargsdescOP_VARARGA BR(A), R(A+1), ..., R(A+B-2) = vararg 

nameargsdescOP_SELFA B C

1[1]GETTABUP 0 0 -1; _ENV "a"2[1]GETTABLE 0 0 -2; "b"3[1]GETTABUP 1 0 -1; _ENV "a"4[1]CALL 0 2 15[1]RETURN 0 1

比使用“:"操作符多使用了一个指令。所以,如果需要使用这种面向对象调用的语义时,应该尽量使用”:"。



热点排行