summaryrefslogtreecommitdiff
path: root/src/lua51/lfunc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lua51/lfunc.c')
-rw-r--r--src/lua51/lfunc.c13
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;
}