diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2009-12-17 13:46:44 -0200 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2009-12-17 13:46:44 -0200 |
commit | 0bbdddc86b1353fec36ae886b4142986f3c4713f (patch) | |
tree | 9eb933c8123911f9477e8b8b55344035c8077c01 /lfunc.c | |
parent | b3b8dfaaea2dba7e7b4b898a5f767a80f36319f1 (diff) | |
download | lua-0bbdddc86b1353fec36ae886b4142986f3c4713f.tar.gz lua-0bbdddc86b1353fec36ae886b4142986f3c4713f.tar.bz2 lua-0bbdddc86b1353fec36ae886b4142986f3c4713f.zip |
allocator function receives the tag of object being allocated in 'osize'
when 'ptr' is NULL.
Diffstat (limited to 'lfunc.c')
-rw-r--r-- | lfunc.c | 31 |
1 files changed, 12 insertions, 19 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lfunc.c,v 2.17 2009/11/26 11:39:20 roberto Exp roberto $ | 2 | ** $Id: lfunc.c,v 2.18 2009/12/11 13:39:34 roberto Exp roberto $ |
3 | ** Auxiliary functions to manipulate prototypes and closures | 3 | ** Auxiliary functions to manipulate prototypes and closures |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -21,30 +21,27 @@ | |||
21 | 21 | ||
22 | 22 | ||
23 | 23 | ||
24 | Closure *luaF_newCclosure (lua_State *L, int nelems, Table *e) { | 24 | Closure *luaF_newCclosure (lua_State *L, int n, Table *e) { |
25 | Closure *c = cast(Closure *, luaM_malloc(L, sizeCclosure(nelems))); | 25 | Closure *c = &luaC_newobj(L, LUA_TFUNCTION, sizeCclosure(n), NULL, 0)->cl; |
26 | luaC_link(L, obj2gco(c), LUA_TFUNCTION); | ||
27 | c->c.isC = 1; | 26 | c->c.isC = 1; |
28 | c->c.env = e; | 27 | c->c.env = e; |
29 | c->c.nupvalues = cast_byte(nelems); | 28 | c->c.nupvalues = cast_byte(n); |
30 | return c; | 29 | return c; |
31 | } | 30 | } |
32 | 31 | ||
33 | 32 | ||
34 | Closure *luaF_newLclosure (lua_State *L, int nelems, Table *e) { | 33 | Closure *luaF_newLclosure (lua_State *L, int n, Table *e) { |
35 | Closure *c = cast(Closure *, luaM_malloc(L, sizeLclosure(nelems))); | 34 | Closure *c = &luaC_newobj(L, LUA_TFUNCTION, sizeLclosure(n), NULL, 0)->cl; |
36 | luaC_link(L, obj2gco(c), LUA_TFUNCTION); | ||
37 | c->l.isC = 0; | 35 | c->l.isC = 0; |
38 | c->l.env = e; | 36 | c->l.env = e; |
39 | c->l.nupvalues = cast_byte(nelems); | 37 | c->l.nupvalues = cast_byte(n); |
40 | while (nelems--) c->l.upvals[nelems] = NULL; | 38 | while (n--) c->l.upvals[n] = NULL; |
41 | return c; | 39 | return c; |
42 | } | 40 | } |
43 | 41 | ||
44 | 42 | ||
45 | UpVal *luaF_newupval (lua_State *L) { | 43 | UpVal *luaF_newupval (lua_State *L) { |
46 | UpVal *uv = luaM_new(L, UpVal); | 44 | UpVal *uv = &luaC_newobj(L, LUA_TUPVAL, sizeof(UpVal), NULL, 0)->uv; |
47 | luaC_link(L, obj2gco(uv), LUA_TUPVAL); | ||
48 | uv->v = &uv->u.value; | 45 | uv->v = &uv->u.value; |
49 | setnilvalue(uv->v); | 46 | setnilvalue(uv->v); |
50 | return uv; | 47 | return uv; |
@@ -65,12 +62,9 @@ UpVal *luaF_findupval (lua_State *L, StkId level) { | |||
65 | } | 62 | } |
66 | pp = &p->next; | 63 | pp = &p->next; |
67 | } | 64 | } |
68 | uv = luaM_new(L, UpVal); /* not found: create a new one */ | 65 | /* not found: create a new one */ |
69 | uv->tt = LUA_TUPVAL; | 66 | uv = &luaC_newobj(L, LUA_TUPVAL, sizeof(UpVal), pp, 0)->uv; |
70 | uv->marked = luaC_white(g); | ||
71 | uv->v = level; /* current value lives in the stack */ | 67 | uv->v = level; /* current value lives in the stack */ |
72 | uv->next = *pp; /* chain it in the proper position */ | ||
73 | *pp = obj2gco(uv); | ||
74 | uv->u.l.prev = &g->uvhead; /* double link it in `uvhead' list */ | 68 | uv->u.l.prev = &g->uvhead; /* double link it in `uvhead' list */ |
75 | uv->u.l.next = g->uvhead.u.l.next; | 69 | uv->u.l.next = g->uvhead.u.l.next; |
76 | uv->u.l.next->u.l.prev = uv; | 70 | uv->u.l.next->u.l.prev = uv; |
@@ -114,8 +108,7 @@ void luaF_close (lua_State *L, StkId level) { | |||
114 | 108 | ||
115 | 109 | ||
116 | Proto *luaF_newproto (lua_State *L) { | 110 | Proto *luaF_newproto (lua_State *L) { |
117 | Proto *f = luaM_new(L, Proto); | 111 | Proto *f = &luaC_newobj(L, LUA_TPROTO, sizeof(Proto), NULL, 0)->p; |
118 | luaC_link(L, obj2gco(f), LUA_TPROTO); | ||
119 | f->k = NULL; | 112 | f->k = NULL; |
120 | f->sizek = 0; | 113 | f->sizek = 0; |
121 | f->p = NULL; | 114 | f->p = NULL; |