读书人

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

发布时间: 2013-01-22 10:23:54 作者: rapoo

探索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

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



读书人网 >编程

热点推荐