aboutsummaryrefslogtreecommitdiff
path: root/lstate.c
diff options
context:
space:
mode:
Diffstat (limited to 'lstate.c')
-rw-r--r--lstate.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/lstate.c b/lstate.c
index 1edb93f4..17d45f5f 100644
--- a/lstate.c
+++ b/lstate.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lstate.c,v 1.98 2002/07/08 18:21:33 roberto Exp roberto $ 2** $Id: lstate.c,v 1.99 2002/07/16 14:26:56 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*/
@@ -35,17 +35,19 @@ static int default_panic (lua_State *L) {
35 35
36 36
37static void stack_init (lua_State *L, lua_State *OL) { 37static void stack_init (lua_State *L, lua_State *OL) {
38 L->stack = luaM_newvector(OL, BASIC_STACK_SIZE, TObject); 38 L->stack = luaM_newvector(OL, BASIC_STACK_SIZE + EXTRA_STACK, TObject);
39 L->stacksize = BASIC_STACK_SIZE; 39 L->stacksize = BASIC_STACK_SIZE + EXTRA_STACK;
40 L->top = L->stack; 40 L->top = L->stack;
41 L->stack_last = L->stack+(BASIC_STACK_SIZE-EXTRA_STACK)-1; 41 L->stack_last = L->stack+(L->stacksize - EXTRA_STACK)-1;
42 L->base_ci = luaM_newvector(OL, BASIC_CI_SIZE, CallInfo); 42 L->base_ci = luaM_newvector(OL, BASIC_CI_SIZE, CallInfo);
43 L->ci = L->base_ci; 43 L->ci = L->base_ci;
44 L->ci->savedpc = NULL; 44 L->ci->pc = NULL; /* not a Lua function */
45 L->ci->base = L->top; 45 L->ci->base = L->top;
46 L->ci->top = L->top + LUA_MINSTACK; 46 L->ci->top = L->top + LUA_MINSTACK;
47 L->size_ci = BASIC_CI_SIZE; 47 L->size_ci = BASIC_CI_SIZE;
48 L->end_ci = L->base_ci + L->size_ci; 48 L->end_ci = L->base_ci + L->size_ci;
49 L->toreset = luaM_newvector(OL, 2, Protection);
50 L->size_toreset = 2;
49} 51}
50 52
51 53
@@ -98,7 +100,12 @@ static void preinit_state (lua_State *L) {
98 resethookcount(L); 100 resethookcount(L);
99 L->openupval = NULL; 101 L->openupval = NULL;
100 L->size_ci = 0; 102 L->size_ci = 0;
101 L->base_ci = NULL; 103 L->base_ci = L->ci = NULL;
104 L->toreset = NULL;
105 L->size_toreset = L->number_toreset = 0;
106 setnilvalue(defaultmeta(L));
107 setnilvalue(gt(L));
108 setnilvalue(registry(L));
102} 109}
103 110
104 111
@@ -124,13 +131,12 @@ LUA_API lua_State *lua_newthread (lua_State *OL) {
124 131
125LUA_API lua_State *lua_open (void) { 132LUA_API lua_State *lua_open (void) {
126 lua_State *L; 133 lua_State *L;
127 TObject dummy[2];
128 L = luaM_new(NULL, lua_State); 134 L = luaM_new(NULL, lua_State);
129 if (L) { /* allocation OK? */ 135 if (L) { /* allocation OK? */
130 preinit_state(L); 136 preinit_state(L);
131 L->l_G = NULL; 137 L->l_G = NULL;
132 L->next = L->previous = L; 138 L->next = L->previous = L;
133 if (luaD_runprotected(L, f_luaopen, dummy) != 0) { 139 if (luaD_rawrunprotected(L, f_luaopen, NULL) != 0) {
134 /* memory allocation error: free partial state */ 140 /* memory allocation error: free partial state */
135 close_state(L); 141 close_state(L);
136 L = NULL; 142 L = NULL;
@@ -147,6 +153,7 @@ void luaE_closethread (lua_State *OL, lua_State *L) {
147 L->previous->next = L->next; 153 L->previous->next = L->next;
148 L->next->previous = L->previous; 154 L->next->previous = L->previous;
149 luaM_freearray(OL, L->base_ci, L->size_ci, CallInfo); 155 luaM_freearray(OL, L->base_ci, L->size_ci, CallInfo);
156 luaM_freearray(OL, L->toreset, L->size_toreset, Protection);
150 luaM_freearray(OL, L->stack, L->stacksize, TObject); 157 luaM_freearray(OL, L->stack, L->stacksize, TObject);
151 luaM_freelem(OL, L); 158 luaM_freelem(OL, L);
152} 159}