summaryrefslogtreecommitdiff
path: root/lfunc.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2009-12-17 13:46:44 -0200
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2009-12-17 13:46:44 -0200
commit0bbdddc86b1353fec36ae886b4142986f3c4713f (patch)
tree9eb933c8123911f9477e8b8b55344035c8077c01 /lfunc.c
parentb3b8dfaaea2dba7e7b4b898a5f767a80f36319f1 (diff)
downloadlua-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.c31
1 files changed, 12 insertions, 19 deletions
diff --git a/lfunc.c b/lfunc.c
index 4e60ea1a..d0be5e6b 100644
--- a/lfunc.c
+++ b/lfunc.c
@@ -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
24Closure *luaF_newCclosure (lua_State *L, int nelems, Table *e) { 24Closure *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
34Closure *luaF_newLclosure (lua_State *L, int nelems, Table *e) { 33Closure *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
45UpVal *luaF_newupval (lua_State *L) { 43UpVal *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
116Proto *luaF_newproto (lua_State *L) { 110Proto *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;