| /* |
| ** $Id: lapi.h $ |
| ** Auxiliary functions from Lua API |
| ** See Copyright Notice in lua.h |
| */ |
| |
| #ifndef lapi_h |
| #define lapi_h |
| |
| |
| #include "llimits.h" |
| #include "lstate.h" |
| |
| |
| #if defined(LUA_USE_APICHECK) |
| #include <assert.h> |
| #define api_check(l,e,msg) assert(e) |
| #else /* for testing */ |
| #define api_check(l,e,msg) ((void)(l), lua_assert((e) && msg)) |
| #endif |
| |
| |
| |
| /* Increments 'L->top.p', checking for stack overflows */ |
| #define api_incr_top(L) \ |
| (L->top.p++, api_check(L, L->top.p <= L->ci->top.p, "stack overflow")) |
| |
| |
| /* |
| ** macros that are executed whenever program enters the Lua core |
| ** ('lua_lock') and leaves the core ('lua_unlock') |
| */ |
| #if !defined(lua_lock) |
| #define lua_lock(L) ((void) 0) |
| #define lua_unlock(L) ((void) 0) |
| #endif |
| |
| |
| |
| /* |
| ** If a call returns too many multiple returns, the callee may not have |
| ** stack space to accommodate all results. In this case, this macro |
| ** increases its stack space ('L->ci->top.p'). |
| */ |
| #define adjustresults(L,nres) \ |
| { if ((nres) <= LUA_MULTRET && L->ci->top.p < L->top.p) \ |
| L->ci->top.p = L->top.p; } |
| |
| |
| /* Ensure the stack has at least 'n' elements */ |
| #define api_checknelems(L,n) \ |
| api_check(L, (n) < (L->top.p - L->ci->func.p), \ |
| "not enough elements in the stack") |
| |
| |
| /* Ensure the stack has at least 'n' elements to be popped. (Some |
| ** functions only update a slot after checking it for popping, but that |
| ** is only an optimization for a pop followed by a push.) |
| */ |
| #define api_checkpop(L,n) \ |
| api_check(L, (n) < L->top.p - L->ci->func.p && \ |
| L->tbclist.p < L->top.p - (n), \ |
| "not enough free elements in the stack") |
| |
| #endif |