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 | ||
