diff options
Diffstat (limited to 'lstate.c')
-rw-r--r-- | lstate.c | 21 |
1 files changed, 11 insertions, 10 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lstate.c,v 1.72 2001/11/06 21:40:51 roberto Exp $ | 2 | ** $Id: lstate.c,v 1.1 2001/11/29 22:14:34 rieru Exp rieru $ |
3 | ** Global State | 3 | ** Global State |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -40,12 +40,14 @@ static void f_luaopen (lua_State *L, void *ud) { | |||
40 | so->stacksize += LUA_MINSTACK; | 40 | so->stacksize += LUA_MINSTACK; |
41 | if (so->L != NULL) { /* shared global state? */ | 41 | if (so->L != NULL) { /* shared global state? */ |
42 | L->_G = G(so->L); | 42 | L->_G = G(so->L); |
43 | L->gt = so->L->gt; /* share table of globals */ | ||
44 | so->L->next->previous = L; /* insert L into linked list */ | 43 | so->L->next->previous = L; /* insert L into linked list */ |
45 | L->next = so->L->next; | 44 | L->next = so->L->next; |
46 | so->L->next = L; | 45 | so->L->next = L; |
47 | L->previous = so->L; | 46 | L->previous = so->L; |
48 | luaD_init(L, so->stacksize); /* init stack */ | 47 | luaD_init(L, so->stacksize); /* init stack */ |
48 | setobj(defaultet(L), defaultet(so->L)); /* share default event table */ | ||
49 | setobj(gt(L), gt(so->L)); /* share table of globals */ | ||
50 | setobj(registry(L), registry(so->L)); /* share registry */ | ||
49 | } | 51 | } |
50 | else { /* create a new global state */ | 52 | else { /* create a new global state */ |
51 | L->_G = luaM_new(L, global_State); | 53 | L->_G = luaM_new(L, global_State); |
@@ -59,17 +61,17 @@ static void f_luaopen (lua_State *L, void *ud) { | |||
59 | G(L)->roottable = NULL; | 61 | G(L)->roottable = NULL; |
60 | G(L)->rootudata = NULL; | 62 | G(L)->rootudata = NULL; |
61 | G(L)->rootupval = NULL; | 63 | G(L)->rootupval = NULL; |
62 | G(L)->TMtable = NULL; | ||
63 | G(L)->sizeTM = 0; | ||
64 | G(L)->ntag = 0; | ||
65 | G(L)->nblocks = sizeof(lua_State) + sizeof(global_State); | 64 | G(L)->nblocks = sizeof(lua_State) + sizeof(global_State); |
66 | luaD_init(L, so->stacksize); /* init stack */ | 65 | luaD_init(L, so->stacksize); /* init stack */ |
67 | sethvalue(&L->gt, luaH_new(L, 0, 4)); /* table of globals */ | 66 | /* create default event table with a dummy table, and then close the loop */ |
68 | G(L)->type2tag = luaH_new(L, 0, 3); | 67 | sethvalue(defaultet(L), NULL); |
69 | sethvalue(&G(L)->registry, luaH_new(L, 0, 0)); | 68 | sethvalue(defaultet(L), luaH_new(L, 0, 4)); |
69 | hvalue(defaultet(L))->eventtable = hvalue(defaultet(L)); | ||
70 | sethvalue(gt(L), luaH_new(L, 0, 4)); /* table of globals */ | ||
71 | sethvalue(registry(L), luaH_new(L, 0, 0)); /* registry */ | ||
70 | luaS_resize(L, 4); /* initial size of string table */ | 72 | luaS_resize(L, 4); /* initial size of string table */ |
71 | luaX_init(L); | ||
72 | luaT_init(L); | 73 | luaT_init(L); |
74 | luaX_init(L); | ||
73 | G(L)->GCthreshold = 4*G(L)->nblocks; | 75 | G(L)->GCthreshold = 4*G(L)->nblocks; |
74 | } | 76 | } |
75 | } | 77 | } |
@@ -122,7 +124,6 @@ static void close_state (lua_State *L, lua_State *OL) { | |||
122 | lua_assert(G(L)->rootupval == NULL); | 124 | lua_assert(G(L)->rootupval == NULL); |
123 | lua_assert(G(L)->roottable == NULL); | 125 | lua_assert(G(L)->roottable == NULL); |
124 | luaS_freeall(L); | 126 | luaS_freeall(L); |
125 | luaM_freearray(L, G(L)->TMtable, G(L)->sizeTM, struct TM); | ||
126 | luaM_freearray(L, G(L)->Mbuffer, G(L)->Mbuffsize, char); | 127 | luaM_freearray(L, G(L)->Mbuffer, G(L)->Mbuffsize, char); |
127 | luaM_freelem(NULL, L->_G); | 128 | luaM_freelem(NULL, L->_G); |
128 | } | 129 | } |