diff options
Diffstat (limited to 'lstate.c')
| -rw-r--r-- | lstate.c | 14 |
1 files changed, 8 insertions, 6 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lstate.c,v 2.10 2004/06/17 14:25:31 roberto Exp roberto $ | 2 | ** $Id: lstate.c,v 2.11 2004/08/24 20:12:06 roberto Exp roberto $ |
| 3 | ** Global State | 3 | ** Global State |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -77,11 +77,12 @@ static void freestack (lua_State *L, lua_State *L1) { | |||
| 77 | */ | 77 | */ |
| 78 | static void f_luaopen (lua_State *L, void *ud) { | 78 | static void f_luaopen (lua_State *L, void *ud) { |
| 79 | Udata *u; /* head of udata list */ | 79 | Udata *u; /* head of udata list */ |
| 80 | global_State *g = G(L); | ||
| 80 | UNUSED(ud); | 81 | UNUSED(ud); |
| 81 | u = cast(Udata *, luaM_malloc(L, sizeudata(0))); | 82 | u = cast(Udata *, luaM_malloc(L, sizeudata(0))); |
| 82 | u->uv.len = 0; | 83 | u->uv.len = 0; |
| 83 | u->uv.metatable = NULL; | 84 | u->uv.metatable = NULL; |
| 84 | G(L)->firstudata = obj2gco(u); | 85 | g->firstudata = obj2gco(u); |
| 85 | luaC_link(L, obj2gco(u), LUA_TUSERDATA); | 86 | luaC_link(L, obj2gco(u), LUA_TUSERDATA); |
| 86 | setbit(u->uv.marked, FIXEDBIT); | 87 | setbit(u->uv.marked, FIXEDBIT); |
| 87 | setbit(L->marked, FIXEDBIT); | 88 | setbit(L->marked, FIXEDBIT); |
| @@ -93,7 +94,8 @@ static void f_luaopen (lua_State *L, void *ud) { | |||
| 93 | luaT_init(L); | 94 | luaT_init(L); |
| 94 | luaX_init(L); | 95 | luaX_init(L); |
| 95 | luaS_fix(luaS_newliteral(L, MEMERRMSG)); | 96 | luaS_fix(luaS_newliteral(L, MEMERRMSG)); |
| 96 | G(L)->GCthreshold = 4*G(L)->nblocks; | 97 | g->GCthreshold = 4*g->totalbytes; |
| 98 | g->prevestimate = g->estimate = g->totalbytes; | ||
| 97 | } | 99 | } |
| 98 | 100 | ||
| 99 | 101 | ||
| @@ -128,7 +130,7 @@ static void close_state (lua_State *L) { | |||
| 128 | luaM_freearray(L, G(L)->strt.hash, G(L)->strt.size, TString *); | 130 | luaM_freearray(L, G(L)->strt.hash, G(L)->strt.size, TString *); |
| 129 | luaZ_freebuffer(L, &g->buff); | 131 | luaZ_freebuffer(L, &g->buff); |
| 130 | freestack(L, L); | 132 | freestack(L, L); |
| 131 | lua_assert(g->nblocks == sizeof(LG)); | 133 | lua_assert(g->totalbytes == sizeof(LG)); |
| 132 | (*g->realloc)(g->ud, fromstate(L), state_size(LG), 0); | 134 | (*g->realloc)(g->ud, fromstate(L), state_size(LG), 0); |
| 133 | } | 135 | } |
| 134 | 136 | ||
| @@ -177,7 +179,7 @@ LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud) { | |||
| 177 | setnilvalue(registry(L)); | 179 | setnilvalue(registry(L)); |
| 178 | luaZ_initbuffer(L, &g->buff); | 180 | luaZ_initbuffer(L, &g->buff); |
| 179 | g->panic = NULL; | 181 | g->panic = NULL; |
| 180 | g->gcstate = GCSfinalize; | 182 | g->gcstate = GCSpause; |
| 181 | g->gcgenerational = 0; | 183 | g->gcgenerational = 0; |
| 182 | g->rootgc = obj2gco(L); | 184 | g->rootgc = obj2gco(L); |
| 183 | g->sweepstrgc = 0; | 185 | g->sweepstrgc = 0; |
| @@ -190,7 +192,7 @@ LUA_API lua_State *lua_newstate (lua_Alloc f, void *ud) { | |||
| 190 | setnilvalue(gkey(g->dummynode)); | 192 | setnilvalue(gkey(g->dummynode)); |
| 191 | setnilvalue(gval(g->dummynode)); | 193 | setnilvalue(gval(g->dummynode)); |
| 192 | g->dummynode->next = NULL; | 194 | g->dummynode->next = NULL; |
| 193 | g->nblocks = sizeof(LG); | 195 | g->totalbytes = sizeof(LG); |
| 194 | if (luaD_rawrunprotected(L, f_luaopen, NULL) != 0) { | 196 | if (luaD_rawrunprotected(L, f_luaopen, NULL) != 0) { |
| 195 | /* memory allocation error: free partial state */ | 197 | /* memory allocation error: free partial state */ |
| 196 | close_state(L); | 198 | close_state(L); |
