xref: /aosp_15_r20/external/lua/src/lfunc.h (revision 088332b5b69e7ab13924864b272aabfc2509d2d5)
1*088332b5SXin Li /*
2*088332b5SXin Li ** $Id: lfunc.h $
3*088332b5SXin Li ** Auxiliary functions to manipulate prototypes and closures
4*088332b5SXin Li ** See Copyright Notice in lua.h
5*088332b5SXin Li */
6*088332b5SXin Li 
7*088332b5SXin Li #ifndef lfunc_h
8*088332b5SXin Li #define lfunc_h
9*088332b5SXin Li 
10*088332b5SXin Li 
11*088332b5SXin Li #include "lobject.h"
12*088332b5SXin Li 
13*088332b5SXin Li 
14*088332b5SXin Li #define sizeCclosure(n)	(cast_int(offsetof(CClosure, upvalue)) + \
15*088332b5SXin Li                          cast_int(sizeof(TValue)) * (n))
16*088332b5SXin Li 
17*088332b5SXin Li #define sizeLclosure(n)	(cast_int(offsetof(LClosure, upvals)) + \
18*088332b5SXin Li                          cast_int(sizeof(TValue *)) * (n))
19*088332b5SXin Li 
20*088332b5SXin Li 
21*088332b5SXin Li /* test whether thread is in 'twups' list */
22*088332b5SXin Li #define isintwups(L)	(L->twups != L)
23*088332b5SXin Li 
24*088332b5SXin Li 
25*088332b5SXin Li /*
26*088332b5SXin Li ** maximum number of upvalues in a closure (both C and Lua). (Value
27*088332b5SXin Li ** must fit in a VM register.)
28*088332b5SXin Li */
29*088332b5SXin Li #define MAXUPVAL	255
30*088332b5SXin Li 
31*088332b5SXin Li 
32*088332b5SXin Li #define upisopen(up)	((up)->v != &(up)->u.value)
33*088332b5SXin Li 
34*088332b5SXin Li 
35*088332b5SXin Li #define uplevel(up)	check_exp(upisopen(up), cast(StkId, (up)->v))
36*088332b5SXin Li 
37*088332b5SXin Li 
38*088332b5SXin Li /*
39*088332b5SXin Li ** maximum number of misses before giving up the cache of closures
40*088332b5SXin Li ** in prototypes
41*088332b5SXin Li */
42*088332b5SXin Li #define MAXMISS		10
43*088332b5SXin Li 
44*088332b5SXin Li 
45*088332b5SXin Li /*
46*088332b5SXin Li ** Special "status" for 'luaF_close'
47*088332b5SXin Li */
48*088332b5SXin Li 
49*088332b5SXin Li /* close upvalues without running their closing methods */
50*088332b5SXin Li #define NOCLOSINGMETH	(-1)
51*088332b5SXin Li 
52*088332b5SXin Li /* close upvalues running all closing methods in protected mode */
53*088332b5SXin Li #define CLOSEPROTECT	(-2)
54*088332b5SXin Li 
55*088332b5SXin Li 
56*088332b5SXin Li LUAI_FUNC Proto *luaF_newproto (lua_State *L);
57*088332b5SXin Li LUAI_FUNC CClosure *luaF_newCclosure (lua_State *L, int nupvals);
58*088332b5SXin Li LUAI_FUNC LClosure *luaF_newLclosure (lua_State *L, int nupvals);
59*088332b5SXin Li LUAI_FUNC void luaF_initupvals (lua_State *L, LClosure *cl);
60*088332b5SXin Li LUAI_FUNC UpVal *luaF_findupval (lua_State *L, StkId level);
61*088332b5SXin Li LUAI_FUNC void luaF_newtbcupval (lua_State *L, StkId level);
62*088332b5SXin Li LUAI_FUNC int luaF_close (lua_State *L, StkId level, int status);
63*088332b5SXin Li LUAI_FUNC void luaF_unlinkupval (UpVal *uv);
64*088332b5SXin Li LUAI_FUNC void luaF_freeproto (lua_State *L, Proto *f);
65*088332b5SXin Li LUAI_FUNC const char *luaF_getlocalname (const Proto *func, int local_number,
66*088332b5SXin Li                                          int pc);
67*088332b5SXin Li 
68*088332b5SXin Li 
69*088332b5SXin Li #endif
70