diff --git a/lbaselib.c b/lbaselib.c index b561a52c..363acdd9 100644 --- a/lbaselib.c +++ b/lbaselib.c @@ -434,7 +434,7 @@ static int luaB_coroutine (lua_State *L) { int n = lua_gettop(L); luaL_arg_check(L, lua_isfunction(L, 1) && !lua_iscfunction(L, 1), 1, "Lua function expected"); - NL = lua_newthread(L, 0); + NL = lua_newthread(L); if (NL == NULL) lua_error(L, "unable to create new thread"); /* move function and arguments from L to NL */ for (i=0; istacksize > L->maxstacksize) { /* there was an overflow? */ + if (L->stacksize > LUA_MAXSTACK) { /* there was an overflow? */ int inuse = (L->top - L->stack); - if (inuse + MAXSTACK < L->maxstacksize) /* can `undo' overflow? */ - luaD_reallocstack(L, L->maxstacksize); + if (inuse + MAXSTACK < LUA_MAXSTACK) /* can `undo' overflow? */ + luaD_reallocstack(L, LUA_MAXSTACK); } } void luaD_growstack (lua_State *L, int n) { - if (L->stacksize > L->maxstacksize) { /* overflow while handling overflow? */ + if (L->stacksize > LUA_MAXSTACK) { /* overflow while handling overflow? */ luaD_breakrun(L, LUA_ERRERR); /* break run without error message */ } else { - if (n <= L->stacksize && 2*L->stacksize < L->maxstacksize) /* can double? */ + if (n <= L->stacksize && 2*L->stacksize < LUA_MAXSTACK) /* can double? */ luaD_reallocstack(L, 2*L->stacksize); - else if (L->stacksize+n <= L->maxstacksize) /* no overflow? */ - luaD_reallocstack(L, L->maxstacksize); + else if (L->stacksize+n <= LUA_MAXSTACK) /* no overflow? */ + luaD_reallocstack(L, LUA_MAXSTACK); else { /* resize to maximum + some extra space to handle error */ - luaD_reallocstack(L, L->maxstacksize+4*LUA_MINSTACK); + luaD_reallocstack(L, LUA_MAXSTACK+4*LUA_MINSTACK); luaD_error(L, "stack overflow"); } } @@ -428,9 +428,13 @@ LUA_API int lua_loadfile (lua_State *L, const char *filename) { f = fopen(filename, "rb"); /* reopen in binary mode */ if (f == NULL) return LUA_ERRFILE; /* unable to reopen file */ } - lua_pushliteral(L, "@"); - lua_pushstring(L, (filename == NULL) ? "=stdin" : filename); - lua_concat(L, 2); + if (filename == NULL) + lua_pushstring(L, "=stdin"); + else { + lua_pushliteral(L, "@"); + lua_pushstring(L, filename); + lua_concat(L, 2); + } nlevel = lua_gettop(L); filename = lua_tostring(L, -1); /* filename = `@'..filename */ luaZ_Fopen(&z, f, filename); diff --git a/lstate.c b/lstate.c index 1f30d03b..4f89a892 100644 --- a/lstate.c +++ b/lstate.c @@ -21,22 +21,12 @@ -struct Sopen { - lua_State *L; - int stacksize; -}; - static void close_state (lua_State *L); -static void stack_init (lua_State *L, lua_State *OL, int maxstacksize) { - if (maxstacksize == 0) - maxstacksize = DEFAULT_MAXSTACK; - else - maxstacksize += 2*LUA_MINSTACK; +static void stack_init (lua_State *L, lua_State *OL) { 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+(BASIC_STACK_SIZE-EXTRA_STACK)-1; @@ -53,7 +43,7 @@ static void stack_init (lua_State *L, lua_State *OL, int maxstacksize) { ** open parts that may cause memory-allocation errors */ static void f_luaopen (lua_State *L, void *ud) { - struct Sopen *so = cast(struct Sopen *, ud); + UNUSED(ud); /* create a new global state */ L->_G = luaM_new(L, global_State); G(L)->strt.size = 0; @@ -68,7 +58,7 @@ static void f_luaopen (lua_State *L, void *ud) { G(L)->rootudata = NULL; G(L)->tmudata = NULL; G(L)->nblocks = sizeof(lua_State) + sizeof(global_State); - stack_init(L, L, so->stacksize); /* init stack */ + stack_init(L, L); /* init stack */ /* create default meta table with a dummy table, and then close the loop */ sethvalue(defaultmeta(L), NULL); sethvalue(defaultmeta(L), luaH_new(L, 0, 4)); @@ -85,7 +75,6 @@ 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; @@ -96,7 +85,7 @@ static void preinit_state (lua_State *L) { } -LUA_API lua_State *lua_newthread (lua_State *OL, int stacksize) { +LUA_API lua_State *lua_newthread (lua_State *OL) { lua_State *L; lua_lock(OL); L = luaM_new(OL, lua_State); @@ -106,7 +95,7 @@ LUA_API lua_State *lua_newthread (lua_State *OL, int stacksize) { L->next = OL->next; OL->next = L; L->previous = OL; - stack_init(L, OL, stacksize); /* init stack */ + stack_init(L, OL); /* init stack */ setobj(defaultmeta(L), defaultmeta(OL)); /* share default meta table */ setobj(gt(L), gt(OL)); /* share table of globals */ setobj(registry(L), registry(OL)); /* share registry */ @@ -116,17 +105,14 @@ LUA_API lua_State *lua_newthread (lua_State *OL, int stacksize) { } -LUA_API lua_State *lua_open (int stacksize) { - struct Sopen so; +LUA_API lua_State *lua_open (void) { lua_State *L; L = luaM_new(NULL, lua_State); if (L) { /* allocation OK? */ preinit_state(L); L->_G = NULL; L->next = L->previous = L; - so.stacksize = stacksize; - so.L = NULL; - if (luaD_runprotected(L, f_luaopen, &so) != 0) { + if (luaD_runprotected(L, f_luaopen, NULL) != 0) { /* memory allocation error: free partial state */ close_state(L); L = NULL; diff --git a/lstate.h b/lstate.h index f07dae36..8ba95a59 100644 --- a/lstate.h +++ b/lstate.h @@ -73,8 +73,9 @@ struct lua_longjmp; /* defined in ldo.c */ #define BASIC_STACK_SIZE (2*LUA_MINSTACK) -#define DEFAULT_MAXSTACK 12000 - +#ifndef LUA_MAXSTACK +#define LUA_MAXSTACK 14000 +#endif @@ -141,7 +142,6 @@ struct lua_State { lua_State *next; /* circular double linked list of states */ lua_State *previous; int stacksize; - int maxstacksize; int size_ci; /* size of array `base_ci' */ int allowhooks; lua_Hook callhook; diff --git a/ltests.c b/ltests.c index 0785fa7b..4c040392 100644 --- a/ltests.c +++ b/ltests.c @@ -378,9 +378,9 @@ static int udataval (lua_State *L) { static int doonnewstack (lua_State *L) { - lua_State *L1 = lua_newthread(L, luaL_check_int(L, 1)); - lua_dostring(L1, luaL_check_string(L, 2)); - lua_pushnumber(L, 1); + lua_State *L1 = lua_newthread(L); + int status = lua_dostring(L1, luaL_check_string(L, 1)); + lua_pushnumber(L, status); lua_closethread(L, L1); return 1; } @@ -399,7 +399,7 @@ static int d2s (lua_State *L) { static int newstate (lua_State *L) { - lua_State *L1 = lua_open(luaL_check_int(L, 1)); + lua_State *L1 = lua_open(); if (L1) { *cast(int **, L1) = &islocked; /* initialize the lock */ lua_pushnumber(L, (unsigned long)L1); diff --git a/lua.h b/lua.h index a3fb1df5..e0e913b9 100644 --- a/lua.h +++ b/lua.h @@ -57,12 +57,12 @@ typedef int (*lua_CFunction) (lua_State *L); */ #define LUA_TNONE (-1) -#define LUA_TUSERDATA 0 -#define LUA_TNIL 1 -#define LUA_TNUMBER 2 +#define LUA_TNIL 0 +#define LUA_TNUMBER 1 +#define LUA_TSTRING 2 #define LUA_TBOOLEAN 3 -#define LUA_TSTRING 4 -#define LUA_TTABLE 5 +#define LUA_TTABLE 4 +#define LUA_TUSERDATA 5 #define LUA_TFUNCTION 6 @@ -94,9 +94,9 @@ typedef LUA_NUMBER lua_Number; /* ** state manipulation */ -LUA_API lua_State *lua_open (int stacksize); +LUA_API lua_State *lua_open (void); LUA_API void lua_close (lua_State *L); -LUA_API lua_State *lua_newthread (lua_State *L, int stacksize); +LUA_API lua_State *lua_newthread (lua_State *L); LUA_API void lua_closethread (lua_State *L, lua_State *thread);