lua

A copy of the Lua development repository
Log | Files | Refs | README

lapi.h (1635B)


      1 /*
      2 ** $Id: lapi.h $
      3 ** Auxiliary functions from Lua API
      4 ** See Copyright Notice in lua.h
      5 */
      6 
      7 #ifndef lapi_h
      8 #define lapi_h
      9 
     10 
     11 #include "llimits.h"
     12 #include "lstate.h"
     13 
     14 
     15 #if defined(LUA_USE_APICHECK)
     16 #include <assert.h>
     17 #define api_check(l,e,msg)	assert(e)
     18 #else	/* for testing */
     19 #define api_check(l,e,msg)	((void)(l), lua_assert((e) && msg))
     20 #endif
     21 
     22 
     23 
     24 /* Increments 'L->top.p', checking for stack overflows */
     25 #define api_incr_top(L)  \
     26     (L->top.p++, api_check(L, L->top.p <= L->ci->top.p, "stack overflow"))
     27 
     28 
     29 /*
     30 ** macros that are executed whenever program enters the Lua core
     31 ** ('lua_lock') and leaves the core ('lua_unlock')
     32 */
     33 #if !defined(lua_lock)
     34 #define lua_lock(L)	((void) 0)
     35 #define lua_unlock(L)	((void) 0)
     36 #endif
     37 
     38 
     39 
     40 /*
     41 ** If a call returns too many multiple returns, the callee may not have
     42 ** stack space to accommodate all results. In this case, this macro
     43 ** increases its stack space ('L->ci->top.p').
     44 */
     45 #define adjustresults(L,nres) \
     46     { if ((nres) <= LUA_MULTRET && L->ci->top.p < L->top.p) \
     47 	L->ci->top.p = L->top.p; }
     48 
     49 
     50 /* Ensure the stack has at least 'n' elements */
     51 #define api_checknelems(L,n) \
     52        api_check(L, (n) < (L->top.p - L->ci->func.p), \
     53                          "not enough elements in the stack")
     54 
     55 
     56 /* Ensure the stack has at least 'n' elements to be popped. (Some
     57 ** functions only update a slot after checking it for popping, but that
     58 ** is only an optimization for a pop followed by a push.)
     59 */
     60 #define api_checkpop(L,n) \
     61 	api_check(L, (n) < L->top.p - L->ci->func.p &&  \
     62                      L->tbclist.p < L->top.p - (n), \
     63 			  "not enough free elements in the stack")
     64 
     65 #endif