diff options
Diffstat (limited to 'src/lua51/lfunc.c')
| -rw-r--r-- | src/lua51/lfunc.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/src/lua51/lfunc.c b/src/lua51/lfunc.c index 813e88f..df2c8e3 100644 --- a/src/lua51/lfunc.c +++ b/src/lua51/lfunc.c @@ -30,21 +30,24 @@ Closure *luaF_newCclosure (lua_State *L, int nelems, Table *e) { } +//c 新建lua closure +//c nelems upvalue的个数 Closure *luaF_newLclosure (lua_State *L, int nelems, Table *e) { Closure *c = cast(Closure *, luaM_malloc(L, sizeLclosure(nelems))); - luaC_link(L, obj2gco(c), LUA_TFUNCTION); - c->l.isC = 0; - c->l.env = e; + luaC_link(L, obj2gco(c), LUA_TFUNCTION); //c 加入GC链表 + c->l.isC = 0; //c not c closure + c->l.env = e; //c 设置这个闭包的环境 c->l.nupvalues = cast_byte(nelems); while (nelems--) c->l.upvals[nelems] = NULL; return c; } +//c 新建一个closed upvalue UpVal *luaF_newupval (lua_State *L) { UpVal *uv = luaM_new(L, UpVal); - luaC_link(L, obj2gco(uv), LUA_TUPVAL); - uv->v = &uv->u.value; + luaC_link(L, obj2gco(uv), LUA_TUPVAL); //c 加入GC链表 + uv->v = &uv->u.value; //c closed setnilvalue(uv->v); return uv; } |
