xref: /freebsd/contrib/lua/src/lfunc.h (revision 0495ed398c4f64013bab2327eb13a303e1f90c13)
18e3e3a7aSWarner Losh /*
2*0495ed39SKyle Evans ** $Id: lfunc.h $
38e3e3a7aSWarner Losh ** Auxiliary functions to manipulate prototypes and closures
48e3e3a7aSWarner Losh ** See Copyright Notice in lua.h
58e3e3a7aSWarner Losh */
68e3e3a7aSWarner Losh 
78e3e3a7aSWarner Losh #ifndef lfunc_h
88e3e3a7aSWarner Losh #define lfunc_h
98e3e3a7aSWarner Losh 
108e3e3a7aSWarner Losh 
118e3e3a7aSWarner Losh #include "lobject.h"
128e3e3a7aSWarner Losh 
138e3e3a7aSWarner Losh 
14*0495ed39SKyle Evans #define sizeCclosure(n)	(cast_int(offsetof(CClosure, upvalue)) + \
15*0495ed39SKyle Evans                          cast_int(sizeof(TValue)) * (n))
168e3e3a7aSWarner Losh 
17*0495ed39SKyle Evans #define sizeLclosure(n)	(cast_int(offsetof(LClosure, upvals)) + \
18*0495ed39SKyle Evans                          cast_int(sizeof(TValue *)) * (n))
198e3e3a7aSWarner Losh 
208e3e3a7aSWarner Losh 
218e3e3a7aSWarner Losh /* test whether thread is in 'twups' list */
228e3e3a7aSWarner Losh #define isintwups(L)	(L->twups != L)
238e3e3a7aSWarner Losh 
248e3e3a7aSWarner Losh 
258e3e3a7aSWarner Losh /*
268e3e3a7aSWarner Losh ** maximum number of upvalues in a closure (both C and Lua). (Value
278e3e3a7aSWarner Losh ** must fit in a VM register.)
288e3e3a7aSWarner Losh */
298e3e3a7aSWarner Losh #define MAXUPVAL	255
308e3e3a7aSWarner Losh 
318e3e3a7aSWarner Losh 
328e3e3a7aSWarner Losh #define upisopen(up)	((up)->v != &(up)->u.value)
338e3e3a7aSWarner Losh 
348e3e3a7aSWarner Losh 
35*0495ed39SKyle Evans #define uplevel(up)	check_exp(upisopen(up), cast(StkId, (up)->v))
36*0495ed39SKyle Evans 
37*0495ed39SKyle Evans 
38*0495ed39SKyle Evans /*
39*0495ed39SKyle Evans ** maximum number of misses before giving up the cache of closures
40*0495ed39SKyle Evans ** in prototypes
41*0495ed39SKyle Evans */
42*0495ed39SKyle Evans #define MAXMISS		10
43*0495ed39SKyle Evans 
44*0495ed39SKyle Evans 
45*0495ed39SKyle Evans /*
46*0495ed39SKyle Evans ** Special "status" for 'luaF_close'
47*0495ed39SKyle Evans */
48*0495ed39SKyle Evans 
49*0495ed39SKyle Evans /* close upvalues without running their closing methods */
50*0495ed39SKyle Evans #define NOCLOSINGMETH	(-1)
51*0495ed39SKyle Evans 
52*0495ed39SKyle Evans /* close upvalues running all closing methods in protected mode */
53*0495ed39SKyle Evans #define CLOSEPROTECT	(-2)
54*0495ed39SKyle Evans 
55*0495ed39SKyle Evans 
568e3e3a7aSWarner Losh LUAI_FUNC Proto *luaF_newproto (lua_State *L);
57*0495ed39SKyle Evans LUAI_FUNC CClosure *luaF_newCclosure (lua_State *L, int nupvals);
58*0495ed39SKyle Evans LUAI_FUNC LClosure *luaF_newLclosure (lua_State *L, int nupvals);
598e3e3a7aSWarner Losh LUAI_FUNC void luaF_initupvals (lua_State *L, LClosure *cl);
608e3e3a7aSWarner Losh LUAI_FUNC UpVal *luaF_findupval (lua_State *L, StkId level);
61*0495ed39SKyle Evans LUAI_FUNC void luaF_newtbcupval (lua_State *L, StkId level);
62*0495ed39SKyle Evans LUAI_FUNC int luaF_close (lua_State *L, StkId level, int status);
63*0495ed39SKyle Evans LUAI_FUNC void luaF_unlinkupval (UpVal *uv);
648e3e3a7aSWarner Losh LUAI_FUNC void luaF_freeproto (lua_State *L, Proto *f);
658e3e3a7aSWarner Losh LUAI_FUNC const char *luaF_getlocalname (const Proto *func, int local_number,
668e3e3a7aSWarner Losh                                          int pc);
678e3e3a7aSWarner Losh 
688e3e3a7aSWarner Losh 
698e3e3a7aSWarner Losh #endif
70