From c16a35d6696ac995ef6c7b60f251f6821811f50f Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy <roberto@inf.puc-rio.br> Date: Thu, 7 Mar 2002 15:15:10 -0300 Subject: `lua_stackspace' replaced by `lua_checkstack' --- lapi.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'lapi.c') diff --git a/lapi.c b/lapi.c index 44001697..ec13bb74 100644 --- a/lapi.c +++ b/lapi.c @@ -1,5 +1,5 @@ /* -** $Id: lapi.c,v 1.174 2002/02/14 21:46:13 roberto Exp roberto $ +** $Id: lapi.c,v 1.175 2002/03/04 21:29:41 roberto Exp roberto $ ** Lua API ** See Copyright Notice in lua.h */ @@ -80,8 +80,18 @@ void luaA_pushobject (lua_State *L, const TObject *o) { incr_top(L); } -LUA_API int lua_stackspace (lua_State *L) { - return (L->stack_last - L->top); + +LUA_API int lua_checkstack (lua_State *L, int size) { + int res; + lua_lock(L); + if ((L->top - L->stack) + size >= LUA_MAXSTACK) + res = 0; /* stack overflow */ + luaD_checkstack(L, size); + if (L->ci->top < L->top + size) + L->ci->top = L->top + size; + res = 1; + lua_unlock(L); + return res; } @@ -667,8 +677,7 @@ LUA_API int lua_pushupvalues (lua_State *L) { func = (L->ci->base - 1); api_check(L, iscfunction(func)); n = clvalue(func)->c.nupvalues; - if (LUA_MINSTACK+n > lua_stackspace(L)) - luaD_error(L, "stack overflow"); + luaD_checkstack(L, n + LUA_MINSTACK); for (i=0; i<n; i++) { setobj(L->top, &clvalue(func)->c.upvalue[i]); L->top++; -- cgit v1.2.3-55-g6feb