From 50e29525936be4891f9db090f293432913b5f7c0 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Fri, 25 Jan 2002 20:14:54 -0200 Subject: first version of dynamic stack --- lstate.c | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) (limited to 'lstate.c') diff --git a/lstate.c b/lstate.c index ca606adb..15b771ee 100644 --- a/lstate.c +++ b/lstate.c @@ -20,6 +20,7 @@ #include "ltm.h" + struct Sopen { int stacksize; lua_State *L; @@ -29,21 +30,21 @@ struct Sopen { static void close_state (lua_State *L); -static void stack_init (lua_State *L, lua_State *OL, int stacksize) { - if (stacksize == 0) - stacksize = DEFAULT_STACK_SIZE; +static void stack_init (lua_State *L, lua_State *OL, int maxstacksize) { + if (maxstacksize == 0) + maxstacksize = DEFAULT_MAXSTACK; else - stacksize += LUA_MINSTACK; - stacksize += EXTRA_STACK; - L->stack = luaM_newvector(OL, stacksize, TObject); - L->stacksize = stacksize; + maxstacksize += 2*LUA_MINSTACK; + L->stack = luaM_newvector(OL, BASIC_STACK_SIZE, TObject); + L->maxstacksize = maxstacksize; + L->stacksize = BASIC_STACK_SIZE; L->top = L->stack + RESERVED_STACK_PREFIX; - L->stack_last = L->stack+(L->stacksize-EXTRA_STACK)-1; - L->base_ci = luaM_newvector(OL, 10, CallInfo); + L->stack_last = L->stack+(BASIC_STACK_SIZE-EXTRA_STACK)-1; + L->base_ci = luaM_newvector(OL, BASIC_CI_SIZE, CallInfo); L->ci = L->base_ci; L->ci->base = L->top; - L->ci->savedpc = NULL; - L->size_ci = 10; + L->ci->pc = NULL; + L->size_ci = BASIC_CI_SIZE; L->end_ci = L->base_ci + L->size_ci; } @@ -84,6 +85,7 @@ static void f_luaopen (lua_State *L, void *ud) { static void preinit_state (lua_State *L) { L->stack = NULL; L->stacksize = 0; + L->maxstacksize = 1; L->errorJmp = NULL; L->callhook = NULL; L->linehook = NULL; -- cgit v1.2.3-55-g6feb