diff options
| author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2002-01-25 20:14:54 -0200 |
|---|---|---|
| committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2002-01-25 20:14:54 -0200 |
| commit | 50e29525936be4891f9db090f293432913b5f7c0 (patch) | |
| tree | 8e487b87f82761e15cd096ac345354f57f38fedc /lstate.c | |
| parent | b217ae644e3a83def93be2fe742e2cd0970e1a5f (diff) | |
| download | lua-50e29525936be4891f9db090f293432913b5f7c0.tar.gz lua-50e29525936be4891f9db090f293432913b5f7c0.tar.bz2 lua-50e29525936be4891f9db090f293432913b5f7c0.zip | |
first version of dynamic stack
Diffstat (limited to 'lstate.c')
| -rw-r--r-- | lstate.c | 24 |
1 files changed, 13 insertions, 11 deletions
| @@ -20,6 +20,7 @@ | |||
| 20 | #include "ltm.h" | 20 | #include "ltm.h" |
| 21 | 21 | ||
| 22 | 22 | ||
| 23 | |||
| 23 | struct Sopen { | 24 | struct Sopen { |
| 24 | int stacksize; | 25 | int stacksize; |
| 25 | lua_State *L; | 26 | lua_State *L; |
| @@ -29,21 +30,21 @@ struct Sopen { | |||
| 29 | static void close_state (lua_State *L); | 30 | static void close_state (lua_State *L); |
| 30 | 31 | ||
| 31 | 32 | ||
| 32 | static void stack_init (lua_State *L, lua_State *OL, int stacksize) { | 33 | static void stack_init (lua_State *L, lua_State *OL, int maxstacksize) { |
| 33 | if (stacksize == 0) | 34 | if (maxstacksize == 0) |
| 34 | stacksize = DEFAULT_STACK_SIZE; | 35 | maxstacksize = DEFAULT_MAXSTACK; |
| 35 | else | 36 | else |
| 36 | stacksize += LUA_MINSTACK; | 37 | maxstacksize += 2*LUA_MINSTACK; |
| 37 | stacksize += EXTRA_STACK; | 38 | L->stack = luaM_newvector(OL, BASIC_STACK_SIZE, TObject); |
| 38 | L->stack = luaM_newvector(OL, stacksize, TObject); | 39 | L->maxstacksize = maxstacksize; |
| 39 | L->stacksize = stacksize; | 40 | L->stacksize = BASIC_STACK_SIZE; |
| 40 | L->top = L->stack + RESERVED_STACK_PREFIX; | 41 | L->top = L->stack + RESERVED_STACK_PREFIX; |
| 41 | L->stack_last = L->stack+(L->stacksize-EXTRA_STACK)-1; | 42 | L->stack_last = L->stack+(BASIC_STACK_SIZE-EXTRA_STACK)-1; |
| 42 | L->base_ci = luaM_newvector(OL, 10, CallInfo); | 43 | L->base_ci = luaM_newvector(OL, BASIC_CI_SIZE, CallInfo); |
| 43 | L->ci = L->base_ci; | 44 | L->ci = L->base_ci; |
| 44 | L->ci->base = L->top; | 45 | L->ci->base = L->top; |
| 45 | L->ci->savedpc = NULL; | 46 | L->ci->pc = NULL; |
| 46 | L->size_ci = 10; | 47 | L->size_ci = BASIC_CI_SIZE; |
| 47 | L->end_ci = L->base_ci + L->size_ci; | 48 | L->end_ci = L->base_ci + L->size_ci; |
| 48 | } | 49 | } |
| 49 | 50 | ||
| @@ -84,6 +85,7 @@ static void f_luaopen (lua_State *L, void *ud) { | |||
| 84 | static void preinit_state (lua_State *L) { | 85 | static void preinit_state (lua_State *L) { |
| 85 | L->stack = NULL; | 86 | L->stack = NULL; |
| 86 | L->stacksize = 0; | 87 | L->stacksize = 0; |
| 88 | L->maxstacksize = 1; | ||
| 87 | L->errorJmp = NULL; | 89 | L->errorJmp = NULL; |
| 88 | L->callhook = NULL; | 90 | L->callhook = NULL; |
| 89 | L->linehook = NULL; | 91 | L->linehook = NULL; |
