diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2013-08-27 15:53:35 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2013-08-27 15:53:35 -0300 |
commit | af35c7f398e8149b5f2481b63b399674e4ecdf7e (patch) | |
tree | 7d74f5c81bb0e2555cab4bce00a94a12a6d78604 /ldo.c | |
parent | 742b7377d38e43224ee5dda4bb83a42763c20af8 (diff) | |
download | lua-af35c7f398e8149b5f2481b63b399674e4ecdf7e.tar.gz lua-af35c7f398e8149b5f2481b63b399674e4ecdf7e.tar.bz2 lua-af35c7f398e8149b5f2481b63b399674e4ecdf7e.zip |
upvalues collected by reference count
Diffstat (limited to 'ldo.c')
-rw-r--r-- | ldo.c | 15 |
1 files changed, 5 insertions, 10 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: ldo.c,v 2.108.1.2 2013/04/19 21:03:23 roberto Exp $ | 2 | ** $Id: ldo.c,v 2.109 2013/04/19 21:05:04 roberto Exp roberto $ |
3 | ** Stack and Call structure of Lua | 3 | ** Stack and Call structure of Lua |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -141,10 +141,10 @@ int luaD_rawrunprotected (lua_State *L, Pfunc f, void *ud) { | |||
141 | 141 | ||
142 | static void correctstack (lua_State *L, TValue *oldstack) { | 142 | static void correctstack (lua_State *L, TValue *oldstack) { |
143 | CallInfo *ci; | 143 | CallInfo *ci; |
144 | GCObject *up; | 144 | UpVal *up; |
145 | L->top = (L->top - oldstack) + L->stack; | 145 | L->top = (L->top - oldstack) + L->stack; |
146 | for (up = L->openupval; up != NULL; up = up->gch.next) | 146 | for (up = L->openupval; up != NULL; up = up->u.op.next) |
147 | gco2uv(up)->v = (gco2uv(up)->v - oldstack) + L->stack; | 147 | up->v = (up->v - oldstack) + L->stack; |
148 | for (ci = L->ci; ci != NULL; ci = ci->previous) { | 148 | for (ci = L->ci; ci != NULL; ci = ci->previous) { |
149 | ci->top = (ci->top - oldstack) + L->stack; | 149 | ci->top = (ci->top - oldstack) + L->stack; |
150 | ci->func = (ci->func - oldstack) + L->stack; | 150 | ci->func = (ci->func - oldstack) + L->stack; |
@@ -637,7 +637,6 @@ static void checkmode (lua_State *L, const char *mode, const char *x) { | |||
637 | 637 | ||
638 | 638 | ||
639 | static void f_parser (lua_State *L, void *ud) { | 639 | static void f_parser (lua_State *L, void *ud) { |
640 | int i; | ||
641 | Closure *cl; | 640 | Closure *cl; |
642 | struct SParser *p = cast(struct SParser *, ud); | 641 | struct SParser *p = cast(struct SParser *, ud); |
643 | int c = zgetc(p->z); /* read first character */ | 642 | int c = zgetc(p->z); /* read first character */ |
@@ -650,11 +649,7 @@ static void f_parser (lua_State *L, void *ud) { | |||
650 | cl = luaY_parser(L, p->z, &p->buff, &p->dyd, p->name, c); | 649 | cl = luaY_parser(L, p->z, &p->buff, &p->dyd, p->name, c); |
651 | } | 650 | } |
652 | lua_assert(cl->l.nupvalues == cl->l.p->sizeupvalues); | 651 | lua_assert(cl->l.nupvalues == cl->l.p->sizeupvalues); |
653 | for (i = 0; i < cl->l.nupvalues; i++) { /* initialize upvalues */ | 652 | luaF_initupvals(L, &cl->l); |
654 | UpVal *up = luaF_newupval(L); | ||
655 | cl->l.upvals[i] = up; | ||
656 | luaC_objbarrier(L, cl, up); | ||
657 | } | ||
658 | } | 653 | } |
659 | 654 | ||
660 | 655 | ||