探索Lua5.2内部实现:虚拟机指令(6)FUNCTION
原文
RETURE将返回结果存放到寄存器A到寄存器A+B-2中。如果返回的为变长表达式,则B会被设置为0,表示将寄存器A到当前栈顶的所有值返回。
name args desc OP_CLOSUREA BxR(A) := closure(KPROTO[Bx])CLOSURE为指定的函数prototype创建一个closure,并将这个closure保存到寄存器A中。Bx用来指定函数prototype的id。
比使用“:"操作符多使用了一个指令。所以,如果需要使用这种面向对象调用的语义时,应该尽量使用”:"。name args desc OP_VARARGA BR(A), R(A+1), ..., R(A+B-2) = varargname args desc OP_SELFA B C1[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