xref: /aosp_15_r20/external/lua/src/lua.h (revision 088332b5b69e7ab13924864b272aabfc2509d2d5)
1*088332b5SXin Li /*
2*088332b5SXin Li ** $Id: lua.h $
3*088332b5SXin Li ** Lua - A Scripting Language
4*088332b5SXin Li ** Lua.org, PUC-Rio, Brazil (http://www.lua.org)
5*088332b5SXin Li ** See Copyright Notice at the end of this file
6*088332b5SXin Li */
7*088332b5SXin Li 
8*088332b5SXin Li 
9*088332b5SXin Li #ifndef lua_h
10*088332b5SXin Li #define lua_h
11*088332b5SXin Li 
12*088332b5SXin Li #include <stdarg.h>
13*088332b5SXin Li #include <stddef.h>
14*088332b5SXin Li 
15*088332b5SXin Li 
16*088332b5SXin Li #include "luaconf.h"
17*088332b5SXin Li 
18*088332b5SXin Li 
19*088332b5SXin Li #define LUA_VERSION_MAJOR	"5"
20*088332b5SXin Li #define LUA_VERSION_MINOR	"4"
21*088332b5SXin Li #define LUA_VERSION_RELEASE	"1"
22*088332b5SXin Li 
23*088332b5SXin Li #define LUA_VERSION_NUM			504
24*088332b5SXin Li #define LUA_VERSION_RELEASE_NUM		(LUA_VERSION_NUM * 100 + 0)
25*088332b5SXin Li 
26*088332b5SXin Li #define LUA_VERSION	"Lua " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR
27*088332b5SXin Li #define LUA_RELEASE	LUA_VERSION "." LUA_VERSION_RELEASE
28*088332b5SXin Li #define LUA_COPYRIGHT	LUA_RELEASE "  Copyright (C) 1994-2020 Lua.org, PUC-Rio"
29*088332b5SXin Li #define LUA_AUTHORS	"R. Ierusalimschy, L. H. de Figueiredo, W. Celes"
30*088332b5SXin Li 
31*088332b5SXin Li 
32*088332b5SXin Li /* mark for precompiled code ('<esc>Lua') */
33*088332b5SXin Li #define LUA_SIGNATURE	"\x1bLua"
34*088332b5SXin Li 
35*088332b5SXin Li /* option for multiple returns in 'lua_pcall' and 'lua_call' */
36*088332b5SXin Li #define LUA_MULTRET	(-1)
37*088332b5SXin Li 
38*088332b5SXin Li 
39*088332b5SXin Li /*
40*088332b5SXin Li ** Pseudo-indices
41*088332b5SXin Li ** (-LUAI_MAXSTACK is the minimum valid index; we keep some free empty
42*088332b5SXin Li ** space after that to help overflow detection)
43*088332b5SXin Li */
44*088332b5SXin Li #define LUA_REGISTRYINDEX	(-LUAI_MAXSTACK - 1000)
45*088332b5SXin Li #define lua_upvalueindex(i)	(LUA_REGISTRYINDEX - (i))
46*088332b5SXin Li 
47*088332b5SXin Li 
48*088332b5SXin Li /* thread status */
49*088332b5SXin Li #define LUA_OK		0
50*088332b5SXin Li #define LUA_YIELD	1
51*088332b5SXin Li #define LUA_ERRRUN	2
52*088332b5SXin Li #define LUA_ERRSYNTAX	3
53*088332b5SXin Li #define LUA_ERRMEM	4
54*088332b5SXin Li #define LUA_ERRERR	5
55*088332b5SXin Li 
56*088332b5SXin Li 
57*088332b5SXin Li typedef struct lua_State lua_State;
58*088332b5SXin Li 
59*088332b5SXin Li 
60*088332b5SXin Li /*
61*088332b5SXin Li ** basic types
62*088332b5SXin Li */
63*088332b5SXin Li #define LUA_TNONE		(-1)
64*088332b5SXin Li 
65*088332b5SXin Li #define LUA_TNIL		0
66*088332b5SXin Li #define LUA_TBOOLEAN		1
67*088332b5SXin Li #define LUA_TLIGHTUSERDATA	2
68*088332b5SXin Li #define LUA_TNUMBER		3
69*088332b5SXin Li #define LUA_TSTRING		4
70*088332b5SXin Li #define LUA_TTABLE		5
71*088332b5SXin Li #define LUA_TFUNCTION		6
72*088332b5SXin Li #define LUA_TUSERDATA		7
73*088332b5SXin Li #define LUA_TTHREAD		8
74*088332b5SXin Li 
75*088332b5SXin Li #define LUA_NUMTYPES		9
76*088332b5SXin Li 
77*088332b5SXin Li 
78*088332b5SXin Li 
79*088332b5SXin Li /* minimum Lua stack available to a C function */
80*088332b5SXin Li #define LUA_MINSTACK	20
81*088332b5SXin Li 
82*088332b5SXin Li 
83*088332b5SXin Li /* predefined values in the registry */
84*088332b5SXin Li #define LUA_RIDX_MAINTHREAD	1
85*088332b5SXin Li #define LUA_RIDX_GLOBALS	2
86*088332b5SXin Li #define LUA_RIDX_LAST		LUA_RIDX_GLOBALS
87*088332b5SXin Li 
88*088332b5SXin Li 
89*088332b5SXin Li /* type of numbers in Lua */
90*088332b5SXin Li typedef LUA_NUMBER lua_Number;
91*088332b5SXin Li 
92*088332b5SXin Li 
93*088332b5SXin Li /* type for integer functions */
94*088332b5SXin Li typedef LUA_INTEGER lua_Integer;
95*088332b5SXin Li 
96*088332b5SXin Li /* unsigned integer type */
97*088332b5SXin Li typedef LUA_UNSIGNED lua_Unsigned;
98*088332b5SXin Li 
99*088332b5SXin Li /* type for continuation-function contexts */
100*088332b5SXin Li typedef LUA_KCONTEXT lua_KContext;
101*088332b5SXin Li 
102*088332b5SXin Li 
103*088332b5SXin Li /*
104*088332b5SXin Li ** Type for C functions registered with Lua
105*088332b5SXin Li */
106*088332b5SXin Li typedef int (*lua_CFunction) (lua_State *L);
107*088332b5SXin Li 
108*088332b5SXin Li /*
109*088332b5SXin Li ** Type for continuation functions
110*088332b5SXin Li */
111*088332b5SXin Li typedef int (*lua_KFunction) (lua_State *L, int status, lua_KContext ctx);
112*088332b5SXin Li 
113*088332b5SXin Li 
114*088332b5SXin Li /*
115*088332b5SXin Li ** Type for functions that read/write blocks when loading/dumping Lua chunks
116*088332b5SXin Li */
117*088332b5SXin Li typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz);
118*088332b5SXin Li 
119*088332b5SXin Li typedef int (*lua_Writer) (lua_State *L, const void *p, size_t sz, void *ud);
120*088332b5SXin Li 
121*088332b5SXin Li 
122*088332b5SXin Li /*
123*088332b5SXin Li ** Type for memory-allocation functions
124*088332b5SXin Li */
125*088332b5SXin Li typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize);
126*088332b5SXin Li 
127*088332b5SXin Li 
128*088332b5SXin Li /*
129*088332b5SXin Li ** Type for warning functions
130*088332b5SXin Li */
131*088332b5SXin Li typedef void (*lua_WarnFunction) (void *ud, const char *msg, int tocont);
132*088332b5SXin Li 
133*088332b5SXin Li 
134*088332b5SXin Li 
135*088332b5SXin Li 
136*088332b5SXin Li /*
137*088332b5SXin Li ** generic extra include file
138*088332b5SXin Li */
139*088332b5SXin Li #if defined(LUA_USER_H)
140*088332b5SXin Li #include LUA_USER_H
141*088332b5SXin Li #endif
142*088332b5SXin Li 
143*088332b5SXin Li 
144*088332b5SXin Li /*
145*088332b5SXin Li ** RCS ident string
146*088332b5SXin Li */
147*088332b5SXin Li extern const char lua_ident[];
148*088332b5SXin Li 
149*088332b5SXin Li 
150*088332b5SXin Li /*
151*088332b5SXin Li ** state manipulation
152*088332b5SXin Li */
153*088332b5SXin Li LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud);
154*088332b5SXin Li LUA_API void       (lua_close) (lua_State *L);
155*088332b5SXin Li LUA_API lua_State *(lua_newthread) (lua_State *L);
156*088332b5SXin Li LUA_API int        (lua_resetthread) (lua_State *L);
157*088332b5SXin Li 
158*088332b5SXin Li LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf);
159*088332b5SXin Li 
160*088332b5SXin Li 
161*088332b5SXin Li LUA_API lua_Number (lua_version) (lua_State *L);
162*088332b5SXin Li 
163*088332b5SXin Li 
164*088332b5SXin Li /*
165*088332b5SXin Li ** basic stack manipulation
166*088332b5SXin Li */
167*088332b5SXin Li LUA_API int   (lua_absindex) (lua_State *L, int idx);
168*088332b5SXin Li LUA_API int   (lua_gettop) (lua_State *L);
169*088332b5SXin Li LUA_API void  (lua_settop) (lua_State *L, int idx);
170*088332b5SXin Li LUA_API void  (lua_pushvalue) (lua_State *L, int idx);
171*088332b5SXin Li LUA_API void  (lua_rotate) (lua_State *L, int idx, int n);
172*088332b5SXin Li LUA_API void  (lua_copy) (lua_State *L, int fromidx, int toidx);
173*088332b5SXin Li LUA_API int   (lua_checkstack) (lua_State *L, int n);
174*088332b5SXin Li 
175*088332b5SXin Li LUA_API void  (lua_xmove) (lua_State *from, lua_State *to, int n);
176*088332b5SXin Li 
177*088332b5SXin Li 
178*088332b5SXin Li /*
179*088332b5SXin Li ** access functions (stack -> C)
180*088332b5SXin Li */
181*088332b5SXin Li 
182*088332b5SXin Li LUA_API int             (lua_isnumber) (lua_State *L, int idx);
183*088332b5SXin Li LUA_API int             (lua_isstring) (lua_State *L, int idx);
184*088332b5SXin Li LUA_API int             (lua_iscfunction) (lua_State *L, int idx);
185*088332b5SXin Li LUA_API int             (lua_isinteger) (lua_State *L, int idx);
186*088332b5SXin Li LUA_API int             (lua_isuserdata) (lua_State *L, int idx);
187*088332b5SXin Li LUA_API int             (lua_type) (lua_State *L, int idx);
188*088332b5SXin Li LUA_API const char     *(lua_typename) (lua_State *L, int tp);
189*088332b5SXin Li 
190*088332b5SXin Li LUA_API lua_Number      (lua_tonumberx) (lua_State *L, int idx, int *isnum);
191*088332b5SXin Li LUA_API lua_Integer     (lua_tointegerx) (lua_State *L, int idx, int *isnum);
192*088332b5SXin Li LUA_API int             (lua_toboolean) (lua_State *L, int idx);
193*088332b5SXin Li LUA_API const char     *(lua_tolstring) (lua_State *L, int idx, size_t *len);
194*088332b5SXin Li LUA_API lua_Unsigned    (lua_rawlen) (lua_State *L, int idx);
195*088332b5SXin Li LUA_API lua_CFunction   (lua_tocfunction) (lua_State *L, int idx);
196*088332b5SXin Li LUA_API void	       *(lua_touserdata) (lua_State *L, int idx);
197*088332b5SXin Li LUA_API lua_State      *(lua_tothread) (lua_State *L, int idx);
198*088332b5SXin Li LUA_API const void     *(lua_topointer) (lua_State *L, int idx);
199*088332b5SXin Li 
200*088332b5SXin Li 
201*088332b5SXin Li /*
202*088332b5SXin Li ** Comparison and arithmetic functions
203*088332b5SXin Li */
204*088332b5SXin Li 
205*088332b5SXin Li #define LUA_OPADD	0	/* ORDER TM, ORDER OP */
206*088332b5SXin Li #define LUA_OPSUB	1
207*088332b5SXin Li #define LUA_OPMUL	2
208*088332b5SXin Li #define LUA_OPMOD	3
209*088332b5SXin Li #define LUA_OPPOW	4
210*088332b5SXin Li #define LUA_OPDIV	5
211*088332b5SXin Li #define LUA_OPIDIV	6
212*088332b5SXin Li #define LUA_OPBAND	7
213*088332b5SXin Li #define LUA_OPBOR	8
214*088332b5SXin Li #define LUA_OPBXOR	9
215*088332b5SXin Li #define LUA_OPSHL	10
216*088332b5SXin Li #define LUA_OPSHR	11
217*088332b5SXin Li #define LUA_OPUNM	12
218*088332b5SXin Li #define LUA_OPBNOT	13
219*088332b5SXin Li 
220*088332b5SXin Li LUA_API void  (lua_arith) (lua_State *L, int op);
221*088332b5SXin Li 
222*088332b5SXin Li #define LUA_OPEQ	0
223*088332b5SXin Li #define LUA_OPLT	1
224*088332b5SXin Li #define LUA_OPLE	2
225*088332b5SXin Li 
226*088332b5SXin Li LUA_API int   (lua_rawequal) (lua_State *L, int idx1, int idx2);
227*088332b5SXin Li LUA_API int   (lua_compare) (lua_State *L, int idx1, int idx2, int op);
228*088332b5SXin Li 
229*088332b5SXin Li 
230*088332b5SXin Li /*
231*088332b5SXin Li ** push functions (C -> stack)
232*088332b5SXin Li */
233*088332b5SXin Li LUA_API void        (lua_pushnil) (lua_State *L);
234*088332b5SXin Li LUA_API void        (lua_pushnumber) (lua_State *L, lua_Number n);
235*088332b5SXin Li LUA_API void        (lua_pushinteger) (lua_State *L, lua_Integer n);
236*088332b5SXin Li LUA_API const char *(lua_pushlstring) (lua_State *L, const char *s, size_t len);
237*088332b5SXin Li LUA_API const char *(lua_pushstring) (lua_State *L, const char *s);
238*088332b5SXin Li LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt,
239*088332b5SXin Li                                                       va_list argp);
240*088332b5SXin Li LUA_API const char *(lua_pushfstring) (lua_State *L, const char *fmt, ...);
241*088332b5SXin Li LUA_API void  (lua_pushcclosure) (lua_State *L, lua_CFunction fn, int n);
242*088332b5SXin Li LUA_API void  (lua_pushboolean) (lua_State *L, int b);
243*088332b5SXin Li LUA_API void  (lua_pushlightuserdata) (lua_State *L, void *p);
244*088332b5SXin Li LUA_API int   (lua_pushthread) (lua_State *L);
245*088332b5SXin Li 
246*088332b5SXin Li 
247*088332b5SXin Li /*
248*088332b5SXin Li ** get functions (Lua -> stack)
249*088332b5SXin Li */
250*088332b5SXin Li LUA_API int (lua_getglobal) (lua_State *L, const char *name);
251*088332b5SXin Li LUA_API int (lua_gettable) (lua_State *L, int idx);
252*088332b5SXin Li LUA_API int (lua_getfield) (lua_State *L, int idx, const char *k);
253*088332b5SXin Li LUA_API int (lua_geti) (lua_State *L, int idx, lua_Integer n);
254*088332b5SXin Li LUA_API int (lua_rawget) (lua_State *L, int idx);
255*088332b5SXin Li LUA_API int (lua_rawgeti) (lua_State *L, int idx, lua_Integer n);
256*088332b5SXin Li LUA_API int (lua_rawgetp) (lua_State *L, int idx, const void *p);
257*088332b5SXin Li 
258*088332b5SXin Li LUA_API void  (lua_createtable) (lua_State *L, int narr, int nrec);
259*088332b5SXin Li LUA_API void *(lua_newuserdatauv) (lua_State *L, size_t sz, int nuvalue);
260*088332b5SXin Li LUA_API int   (lua_getmetatable) (lua_State *L, int objindex);
261*088332b5SXin Li LUA_API int  (lua_getiuservalue) (lua_State *L, int idx, int n);
262*088332b5SXin Li 
263*088332b5SXin Li 
264*088332b5SXin Li /*
265*088332b5SXin Li ** set functions (stack -> Lua)
266*088332b5SXin Li */
267*088332b5SXin Li LUA_API void  (lua_setglobal) (lua_State *L, const char *name);
268*088332b5SXin Li LUA_API void  (lua_settable) (lua_State *L, int idx);
269*088332b5SXin Li LUA_API void  (lua_setfield) (lua_State *L, int idx, const char *k);
270*088332b5SXin Li LUA_API void  (lua_seti) (lua_State *L, int idx, lua_Integer n);
271*088332b5SXin Li LUA_API void  (lua_rawset) (lua_State *L, int idx);
272*088332b5SXin Li LUA_API void  (lua_rawseti) (lua_State *L, int idx, lua_Integer n);
273*088332b5SXin Li LUA_API void  (lua_rawsetp) (lua_State *L, int idx, const void *p);
274*088332b5SXin Li LUA_API int   (lua_setmetatable) (lua_State *L, int objindex);
275*088332b5SXin Li LUA_API int   (lua_setiuservalue) (lua_State *L, int idx, int n);
276*088332b5SXin Li 
277*088332b5SXin Li 
278*088332b5SXin Li /*
279*088332b5SXin Li ** 'load' and 'call' functions (load and run Lua code)
280*088332b5SXin Li */
281*088332b5SXin Li LUA_API void  (lua_callk) (lua_State *L, int nargs, int nresults,
282*088332b5SXin Li                            lua_KContext ctx, lua_KFunction k);
283*088332b5SXin Li #define lua_call(L,n,r)		lua_callk(L, (n), (r), 0, NULL)
284*088332b5SXin Li 
285*088332b5SXin Li LUA_API int   (lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc,
286*088332b5SXin Li                             lua_KContext ctx, lua_KFunction k);
287*088332b5SXin Li #define lua_pcall(L,n,r,f)	lua_pcallk(L, (n), (r), (f), 0, NULL)
288*088332b5SXin Li 
289*088332b5SXin Li LUA_API int   (lua_load) (lua_State *L, lua_Reader reader, void *dt,
290*088332b5SXin Li                           const char *chunkname, const char *mode);
291*088332b5SXin Li 
292*088332b5SXin Li LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data, int strip);
293*088332b5SXin Li 
294*088332b5SXin Li 
295*088332b5SXin Li /*
296*088332b5SXin Li ** coroutine functions
297*088332b5SXin Li */
298*088332b5SXin Li LUA_API int  (lua_yieldk)     (lua_State *L, int nresults, lua_KContext ctx,
299*088332b5SXin Li                                lua_KFunction k);
300*088332b5SXin Li LUA_API int  (lua_resume)     (lua_State *L, lua_State *from, int narg,
301*088332b5SXin Li                                int *nres);
302*088332b5SXin Li LUA_API int  (lua_status)     (lua_State *L);
303*088332b5SXin Li LUA_API int (lua_isyieldable) (lua_State *L);
304*088332b5SXin Li 
305*088332b5SXin Li #define lua_yield(L,n)		lua_yieldk(L, (n), 0, NULL)
306*088332b5SXin Li 
307*088332b5SXin Li 
308*088332b5SXin Li /*
309*088332b5SXin Li ** Warning-related functions
310*088332b5SXin Li */
311*088332b5SXin Li LUA_API void (lua_setwarnf) (lua_State *L, lua_WarnFunction f, void *ud);
312*088332b5SXin Li LUA_API void (lua_warning)  (lua_State *L, const char *msg, int tocont);
313*088332b5SXin Li 
314*088332b5SXin Li 
315*088332b5SXin Li /*
316*088332b5SXin Li ** garbage-collection function and options
317*088332b5SXin Li */
318*088332b5SXin Li 
319*088332b5SXin Li #define LUA_GCSTOP		0
320*088332b5SXin Li #define LUA_GCRESTART		1
321*088332b5SXin Li #define LUA_GCCOLLECT		2
322*088332b5SXin Li #define LUA_GCCOUNT		3
323*088332b5SXin Li #define LUA_GCCOUNTB		4
324*088332b5SXin Li #define LUA_GCSTEP		5
325*088332b5SXin Li #define LUA_GCSETPAUSE		6
326*088332b5SXin Li #define LUA_GCSETSTEPMUL	7
327*088332b5SXin Li #define LUA_GCISRUNNING		9
328*088332b5SXin Li #define LUA_GCGEN		10
329*088332b5SXin Li #define LUA_GCINC		11
330*088332b5SXin Li 
331*088332b5SXin Li LUA_API int (lua_gc) (lua_State *L, int what, ...);
332*088332b5SXin Li 
333*088332b5SXin Li 
334*088332b5SXin Li /*
335*088332b5SXin Li ** miscellaneous functions
336*088332b5SXin Li */
337*088332b5SXin Li 
338*088332b5SXin Li LUA_API int   (lua_error) (lua_State *L);
339*088332b5SXin Li 
340*088332b5SXin Li LUA_API int   (lua_next) (lua_State *L, int idx);
341*088332b5SXin Li 
342*088332b5SXin Li LUA_API void  (lua_concat) (lua_State *L, int n);
343*088332b5SXin Li LUA_API void  (lua_len)    (lua_State *L, int idx);
344*088332b5SXin Li 
345*088332b5SXin Li LUA_API size_t   (lua_stringtonumber) (lua_State *L, const char *s);
346*088332b5SXin Li 
347*088332b5SXin Li LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud);
348*088332b5SXin Li LUA_API void      (lua_setallocf) (lua_State *L, lua_Alloc f, void *ud);
349*088332b5SXin Li 
350*088332b5SXin Li LUA_API void  (lua_toclose) (lua_State *L, int idx);
351*088332b5SXin Li 
352*088332b5SXin Li 
353*088332b5SXin Li /*
354*088332b5SXin Li ** {==============================================================
355*088332b5SXin Li ** some useful macros
356*088332b5SXin Li ** ===============================================================
357*088332b5SXin Li */
358*088332b5SXin Li 
359*088332b5SXin Li #define lua_getextraspace(L)	((void *)((char *)(L) - LUA_EXTRASPACE))
360*088332b5SXin Li 
361*088332b5SXin Li #define lua_tonumber(L,i)	lua_tonumberx(L,(i),NULL)
362*088332b5SXin Li #define lua_tointeger(L,i)	lua_tointegerx(L,(i),NULL)
363*088332b5SXin Li 
364*088332b5SXin Li #define lua_pop(L,n)		lua_settop(L, -(n)-1)
365*088332b5SXin Li 
366*088332b5SXin Li #define lua_newtable(L)		lua_createtable(L, 0, 0)
367*088332b5SXin Li 
368*088332b5SXin Li #define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n)))
369*088332b5SXin Li 
370*088332b5SXin Li #define lua_pushcfunction(L,f)	lua_pushcclosure(L, (f), 0)
371*088332b5SXin Li 
372*088332b5SXin Li #define lua_isfunction(L,n)	(lua_type(L, (n)) == LUA_TFUNCTION)
373*088332b5SXin Li #define lua_istable(L,n)	(lua_type(L, (n)) == LUA_TTABLE)
374*088332b5SXin Li #define lua_islightuserdata(L,n)	(lua_type(L, (n)) == LUA_TLIGHTUSERDATA)
375*088332b5SXin Li #define lua_isnil(L,n)		(lua_type(L, (n)) == LUA_TNIL)
376*088332b5SXin Li #define lua_isboolean(L,n)	(lua_type(L, (n)) == LUA_TBOOLEAN)
377*088332b5SXin Li #define lua_isthread(L,n)	(lua_type(L, (n)) == LUA_TTHREAD)
378*088332b5SXin Li #define lua_isnone(L,n)		(lua_type(L, (n)) == LUA_TNONE)
379*088332b5SXin Li #define lua_isnoneornil(L, n)	(lua_type(L, (n)) <= 0)
380*088332b5SXin Li 
381*088332b5SXin Li #define lua_pushliteral(L, s)	lua_pushstring(L, "" s)
382*088332b5SXin Li 
383*088332b5SXin Li #define lua_pushglobaltable(L)  \
384*088332b5SXin Li 	((void)lua_rawgeti(L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS))
385*088332b5SXin Li 
386*088332b5SXin Li #define lua_tostring(L,i)	lua_tolstring(L, (i), NULL)
387*088332b5SXin Li 
388*088332b5SXin Li 
389*088332b5SXin Li #define lua_insert(L,idx)	lua_rotate(L, (idx), 1)
390*088332b5SXin Li 
391*088332b5SXin Li #define lua_remove(L,idx)	(lua_rotate(L, (idx), -1), lua_pop(L, 1))
392*088332b5SXin Li 
393*088332b5SXin Li #define lua_replace(L,idx)	(lua_copy(L, -1, (idx)), lua_pop(L, 1))
394*088332b5SXin Li 
395*088332b5SXin Li /* }============================================================== */
396*088332b5SXin Li 
397*088332b5SXin Li 
398*088332b5SXin Li /*
399*088332b5SXin Li ** {==============================================================
400*088332b5SXin Li ** compatibility macros
401*088332b5SXin Li ** ===============================================================
402*088332b5SXin Li */
403*088332b5SXin Li #if defined(LUA_COMPAT_APIINTCASTS)
404*088332b5SXin Li 
405*088332b5SXin Li #define lua_pushunsigned(L,n)	lua_pushinteger(L, (lua_Integer)(n))
406*088332b5SXin Li #define lua_tounsignedx(L,i,is)	((lua_Unsigned)lua_tointegerx(L,i,is))
407*088332b5SXin Li #define lua_tounsigned(L,i)	lua_tounsignedx(L,(i),NULL)
408*088332b5SXin Li 
409*088332b5SXin Li #endif
410*088332b5SXin Li 
411*088332b5SXin Li #define lua_newuserdata(L,s)	lua_newuserdatauv(L,s,1)
412*088332b5SXin Li #define lua_getuservalue(L,idx)	lua_getiuservalue(L,idx,1)
413*088332b5SXin Li #define lua_setuservalue(L,idx)	lua_setiuservalue(L,idx,1)
414*088332b5SXin Li 
415*088332b5SXin Li #define LUA_NUMTAGS		LUA_NUMTYPES
416*088332b5SXin Li 
417*088332b5SXin Li /* }============================================================== */
418*088332b5SXin Li 
419*088332b5SXin Li /*
420*088332b5SXin Li ** {======================================================================
421*088332b5SXin Li ** Debug API
422*088332b5SXin Li ** =======================================================================
423*088332b5SXin Li */
424*088332b5SXin Li 
425*088332b5SXin Li 
426*088332b5SXin Li /*
427*088332b5SXin Li ** Event codes
428*088332b5SXin Li */
429*088332b5SXin Li #define LUA_HOOKCALL	0
430*088332b5SXin Li #define LUA_HOOKRET	1
431*088332b5SXin Li #define LUA_HOOKLINE	2
432*088332b5SXin Li #define LUA_HOOKCOUNT	3
433*088332b5SXin Li #define LUA_HOOKTAILCALL 4
434*088332b5SXin Li 
435*088332b5SXin Li 
436*088332b5SXin Li /*
437*088332b5SXin Li ** Event masks
438*088332b5SXin Li */
439*088332b5SXin Li #define LUA_MASKCALL	(1 << LUA_HOOKCALL)
440*088332b5SXin Li #define LUA_MASKRET	(1 << LUA_HOOKRET)
441*088332b5SXin Li #define LUA_MASKLINE	(1 << LUA_HOOKLINE)
442*088332b5SXin Li #define LUA_MASKCOUNT	(1 << LUA_HOOKCOUNT)
443*088332b5SXin Li 
444*088332b5SXin Li typedef struct lua_Debug lua_Debug;  /* activation record */
445*088332b5SXin Li 
446*088332b5SXin Li 
447*088332b5SXin Li /* Functions to be called by the debugger in specific events */
448*088332b5SXin Li typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
449*088332b5SXin Li 
450*088332b5SXin Li 
451*088332b5SXin Li LUA_API int (lua_getstack) (lua_State *L, int level, lua_Debug *ar);
452*088332b5SXin Li LUA_API int (lua_getinfo) (lua_State *L, const char *what, lua_Debug *ar);
453*088332b5SXin Li LUA_API const char *(lua_getlocal) (lua_State *L, const lua_Debug *ar, int n);
454*088332b5SXin Li LUA_API const char *(lua_setlocal) (lua_State *L, const lua_Debug *ar, int n);
455*088332b5SXin Li LUA_API const char *(lua_getupvalue) (lua_State *L, int funcindex, int n);
456*088332b5SXin Li LUA_API const char *(lua_setupvalue) (lua_State *L, int funcindex, int n);
457*088332b5SXin Li 
458*088332b5SXin Li LUA_API void *(lua_upvalueid) (lua_State *L, int fidx, int n);
459*088332b5SXin Li LUA_API void  (lua_upvaluejoin) (lua_State *L, int fidx1, int n1,
460*088332b5SXin Li                                                int fidx2, int n2);
461*088332b5SXin Li 
462*088332b5SXin Li LUA_API void (lua_sethook) (lua_State *L, lua_Hook func, int mask, int count);
463*088332b5SXin Li LUA_API lua_Hook (lua_gethook) (lua_State *L);
464*088332b5SXin Li LUA_API int (lua_gethookmask) (lua_State *L);
465*088332b5SXin Li LUA_API int (lua_gethookcount) (lua_State *L);
466*088332b5SXin Li 
467*088332b5SXin Li LUA_API int (lua_setcstacklimit) (lua_State *L, unsigned int limit);
468*088332b5SXin Li 
469*088332b5SXin Li struct lua_Debug {
470*088332b5SXin Li   int event;
471*088332b5SXin Li   const char *name;	/* (n) */
472*088332b5SXin Li   const char *namewhat;	/* (n) 'global', 'local', 'field', 'method' */
473*088332b5SXin Li   const char *what;	/* (S) 'Lua', 'C', 'main', 'tail' */
474*088332b5SXin Li   const char *source;	/* (S) */
475*088332b5SXin Li   size_t srclen;	/* (S) */
476*088332b5SXin Li   int currentline;	/* (l) */
477*088332b5SXin Li   int linedefined;	/* (S) */
478*088332b5SXin Li   int lastlinedefined;	/* (S) */
479*088332b5SXin Li   unsigned char nups;	/* (u) number of upvalues */
480*088332b5SXin Li   unsigned char nparams;/* (u) number of parameters */
481*088332b5SXin Li   char isvararg;        /* (u) */
482*088332b5SXin Li   char istailcall;	/* (t) */
483*088332b5SXin Li   unsigned short ftransfer;   /* (r) index of first value transferred */
484*088332b5SXin Li   unsigned short ntransfer;   /* (r) number of transferred values */
485*088332b5SXin Li   char short_src[LUA_IDSIZE]; /* (S) */
486*088332b5SXin Li   /* private part */
487*088332b5SXin Li   struct CallInfo *i_ci;  /* active function */
488*088332b5SXin Li };
489*088332b5SXin Li 
490*088332b5SXin Li /* }====================================================================== */
491*088332b5SXin Li 
492*088332b5SXin Li 
493*088332b5SXin Li /******************************************************************************
494*088332b5SXin Li * Copyright (C) 1994-2020 Lua.org, PUC-Rio.
495*088332b5SXin Li *
496*088332b5SXin Li * Permission is hereby granted, free of charge, to any person obtaining
497*088332b5SXin Li * a copy of this software and associated documentation files (the
498*088332b5SXin Li * "Software"), to deal in the Software without restriction, including
499*088332b5SXin Li * without limitation the rights to use, copy, modify, merge, publish,
500*088332b5SXin Li * distribute, sublicense, and/or sell copies of the Software, and to
501*088332b5SXin Li * permit persons to whom the Software is furnished to do so, subject to
502*088332b5SXin Li * the following conditions:
503*088332b5SXin Li *
504*088332b5SXin Li * The above copyright notice and this permission notice shall be
505*088332b5SXin Li * included in all copies or substantial portions of the Software.
506*088332b5SXin Li *
507*088332b5SXin Li * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
508*088332b5SXin Li * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
509*088332b5SXin Li * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
510*088332b5SXin Li * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
511*088332b5SXin Li * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
512*088332b5SXin Li * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
513*088332b5SXin Li * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
514*088332b5SXin Li ******************************************************************************/
515*088332b5SXin Li 
516*088332b5SXin Li 
517*088332b5SXin Li #endif
518