3 ** Lua - A Scripting Language
4 ** Lua.org, PUC-Rio, Brazil (http://www.lua.org)
5 ** See Copyright Notice at the end of this file
19 #define LUA_VERSION_MAJOR "5"
20 #define LUA_VERSION_MINOR "4"
21 #define LUA_VERSION_RELEASE "7"
23 #define LUA_VERSION_NUM 504
24 #define LUA_VERSION_RELEASE_NUM (LUA_VERSION_NUM * 100 + 7)
26 #define LUA_VERSION "Lua " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR
27 #define LUA_RELEASE LUA_VERSION "." LUA_VERSION_RELEASE
28 #define LUA_COPYRIGHT LUA_RELEASE " Copyright (C) 1994-2024 Lua.org, PUC-Rio"
29 #define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo, W. Celes"
32 /* mark for precompiled code ('<esc>Lua') */
33 #define LUA_SIGNATURE "\x1bLua"
35 /* option for multiple returns in 'lua_pcall' and 'lua_call' */
36 #define LUA_MULTRET (-1)
41 ** (-LUAI_MAXSTACK is the minimum valid index; we keep some free empty
42 ** space after that to help overflow detection)
44 #define LUA_REGISTRYINDEX (-LUAI_MAXSTACK - 1000)
45 #define lua_upvalueindex(i) (LUA_REGISTRYINDEX - (i))
52 #define LUA_ERRSYNTAX 3
57 typedef struct lua_State lua_State
;
63 #define LUA_TNONE (-1)
66 #define LUA_TBOOLEAN 1
67 #define LUA_TLIGHTUSERDATA 2
71 #define LUA_TFUNCTION 6
72 #define LUA_TUSERDATA 7
75 #define LUA_NUMTYPES 9
79 /* minimum Lua stack available to a C function */
80 #define LUA_MINSTACK 20
83 /* predefined values in the registry */
84 #define LUA_RIDX_MAINTHREAD 1
85 #define LUA_RIDX_GLOBALS 2
86 #define LUA_RIDX_LAST LUA_RIDX_GLOBALS
89 /* type of numbers in Lua */
90 typedef LUA_NUMBER lua_Number
;
93 /* type for integer functions */
94 typedef LUA_INTEGER lua_Integer
;
96 /* unsigned integer type */
97 typedef LUA_UNSIGNED lua_Unsigned
;
99 /* type for continuation-function contexts */
100 typedef LUA_KCONTEXT lua_KContext
;
104 ** Type for C functions registered with Lua
106 typedef int (*lua_CFunction
)(lua_State
*L
);
109 ** Type for continuation functions
111 typedef int (*lua_KFunction
)(lua_State
*L
, int status
, lua_KContext ctx
);
115 ** Type for functions that read/write blocks when loading/dumping Lua chunks
117 typedef const char *(*lua_Reader
)(lua_State
*L
, void *ud
, size_t *sz
);
119 typedef int (*lua_Writer
)(lua_State
*L
, const void *p
, size_t sz
, void *ud
);
123 ** Type for memory-allocation functions
125 typedef void *(*lua_Alloc
)(void *ud
, void *ptr
, size_t osize
, size_t nsize
);
129 ** Type for warning functions
131 typedef void (*lua_WarnFunction
)(void *ud
, const char *msg
, int tocont
);
135 ** Type used by the debug API to collect debug information
137 typedef struct lua_Debug lua_Debug
;
141 ** Functions to be called by the debugger in specific events
143 typedef void (*lua_Hook
)(lua_State
*L
, lua_Debug
*ar
);
147 ** generic extra include file
149 #if defined(LUA_USER_H)
157 extern const char lua_ident
[];
161 ** state manipulation
163 LUA_API lua_State
*(lua_newstate
)(lua_Alloc f
, void *ud
);
164 LUA_API
void (lua_close
)(lua_State
*L
);
165 LUA_API lua_State
*(lua_newthread
)(lua_State
*L
);
166 LUA_API
int (lua_closethread
)(lua_State
*L
, lua_State
*from
);
167 LUA_API
int (lua_resetthread
)(lua_State
*L
); /* Deprecated! */
169 LUA_API
lua_CFunction(lua_atpanic
)(lua_State
*L
, lua_CFunction panicf
);
172 LUA_API
lua_Number(lua_version
)(lua_State
*L
);
176 ** basic stack manipulation
178 LUA_API
int (lua_absindex
)(lua_State
*L
, int idx
);
179 LUA_API
int (lua_gettop
)(lua_State
*L
);
180 LUA_API
void (lua_settop
)(lua_State
*L
, int idx
);
181 LUA_API
void (lua_pushvalue
)(lua_State
*L
, int idx
);
182 LUA_API
void (lua_rotate
)(lua_State
*L
, int idx
, int n
);
183 LUA_API
void (lua_copy
)(lua_State
*L
, int fromidx
, int toidx
);
184 LUA_API
int (lua_checkstack
)(lua_State
*L
, int n
);
186 LUA_API
void (lua_xmove
)(lua_State
*from
, lua_State
*to
, int n
);
190 ** access functions (stack -> C)
193 LUA_API
int (lua_isnumber
)(lua_State
*L
, int idx
);
194 LUA_API
int (lua_isstring
)(lua_State
*L
, int idx
);
195 LUA_API
int (lua_iscfunction
)(lua_State
*L
, int idx
);
196 LUA_API
int (lua_isinteger
)(lua_State
*L
, int idx
);
197 LUA_API
int (lua_isuserdata
)(lua_State
*L
, int idx
);
198 LUA_API
int (lua_type
)(lua_State
*L
, int idx
);
199 LUA_API
const char *(lua_typename
)(lua_State
*L
, int tp
);
201 LUA_API
lua_Number(lua_tonumberx
)(lua_State
*L
, int idx
, int *isnum
);
202 LUA_API
lua_Integer(lua_tointegerx
)(lua_State
*L
, int idx
, int *isnum
);
203 LUA_API
int (lua_toboolean
)(lua_State
*L
, int idx
);
204 LUA_API
const char *(lua_tolstring
)(lua_State
*L
, int idx
, size_t *len
);
205 LUA_API
lua_Unsigned(lua_rawlen
)(lua_State
*L
, int idx
);
206 LUA_API
lua_CFunction(lua_tocfunction
)(lua_State
*L
, int idx
);
207 LUA_API
void *(lua_touserdata
)(lua_State
*L
, int idx
);
208 LUA_API lua_State
*(lua_tothread
)(lua_State
*L
, int idx
);
209 LUA_API
const void *(lua_topointer
)(lua_State
*L
, int idx
);
213 ** Comparison and arithmetic functions
216 #define LUA_OPADD 0 /* ORDER TM, ORDER OP */
229 #define LUA_OPBNOT 13
231 LUA_API
void (lua_arith
)(lua_State
*L
, int op
);
237 LUA_API
int (lua_rawequal
)(lua_State
*L
, int idx1
, int idx2
);
238 LUA_API
int (lua_compare
)(lua_State
*L
, int idx1
, int idx2
, int op
);
242 ** push functions (C -> stack)
244 LUA_API
void (lua_pushnil
)(lua_State
*L
);
245 LUA_API
void (lua_pushnumber
)(lua_State
*L
, lua_Number n
);
246 LUA_API
void (lua_pushinteger
)(lua_State
*L
, lua_Integer n
);
247 LUA_API
const char *(lua_pushlstring
)(lua_State
*L
, const char *s
, size_t len
);
248 LUA_API
const char *(lua_pushstring
)(lua_State
*L
, const char *s
);
249 LUA_API
const char *(lua_pushvfstring
)(lua_State
*L
, const char *fmt
,
251 LUA_API
const char *(lua_pushfstring
)(lua_State
*L
, const char *fmt
, ...);
252 LUA_API
void (lua_pushcclosure
)(lua_State
*L
, lua_CFunction fn
, int n
);
253 LUA_API
void (lua_pushboolean
)(lua_State
*L
, int b
);
254 LUA_API
void (lua_pushlightuserdata
)(lua_State
*L
, void *p
);
255 LUA_API
int (lua_pushthread
)(lua_State
*L
);
259 ** get functions (Lua -> stack)
261 LUA_API
int (lua_getglobal
)(lua_State
*L
, const char *name
);
262 LUA_API
int (lua_gettable
)(lua_State
*L
, int idx
);
263 LUA_API
int (lua_getfield
)(lua_State
*L
, int idx
, const char *k
);
264 LUA_API
int (lua_geti
)(lua_State
*L
, int idx
, lua_Integer n
);
265 LUA_API
int (lua_rawget
)(lua_State
*L
, int idx
);
266 LUA_API
int (lua_rawgeti
)(lua_State
*L
, int idx
, lua_Integer n
);
267 LUA_API
int (lua_rawgetp
)(lua_State
*L
, int idx
, const void *p
);
269 LUA_API
void (lua_createtable
)(lua_State
*L
, int narr
, int nrec
);
270 LUA_API
void *(lua_newuserdatauv
)(lua_State
*L
, size_t sz
, int nuvalue
);
271 LUA_API
int (lua_getmetatable
)(lua_State
*L
, int objindex
);
272 LUA_API
int (lua_getiuservalue
)(lua_State
*L
, int idx
, int n
);
276 ** set functions (stack -> Lua)
278 LUA_API
void (lua_setglobal
)(lua_State
*L
, const char *name
);
279 LUA_API
void (lua_settable
)(lua_State
*L
, int idx
);
280 LUA_API
void (lua_setfield
)(lua_State
*L
, int idx
, const char *k
);
281 LUA_API
void (lua_seti
)(lua_State
*L
, int idx
, lua_Integer n
);
282 LUA_API
void (lua_rawset
)(lua_State
*L
, int idx
);
283 LUA_API
void (lua_rawseti
)(lua_State
*L
, int idx
, lua_Integer n
);
284 LUA_API
void (lua_rawsetp
)(lua_State
*L
, int idx
, const void *p
);
285 LUA_API
int (lua_setmetatable
)(lua_State
*L
, int objindex
);
286 LUA_API
int (lua_setiuservalue
)(lua_State
*L
, int idx
, int n
);
290 ** 'load' and 'call' functions (load and run Lua code)
292 LUA_API
void (lua_callk
)(lua_State
*L
, int nargs
, int nresults
,
293 lua_KContext ctx
, lua_KFunction k
);
294 #define lua_call(L,n,r) lua_callk(L, (n), (r), 0, NULL)
296 LUA_API
int (lua_pcallk
)(lua_State
*L
, int nargs
, int nresults
, int errfunc
,
297 lua_KContext ctx
, lua_KFunction k
);
298 #define lua_pcall(L,n,r,f) lua_pcallk(L, (n), (r), (f), 0, NULL)
300 LUA_API
int (lua_load
)(lua_State
*L
, lua_Reader reader
, void *dt
,
301 const char *chunkname
, const char *mode
);
303 LUA_API
int (lua_dump
)(lua_State
*L
, lua_Writer writer
, void *data
, int strip
);
307 ** coroutine functions
309 LUA_API
int (lua_yieldk
)(lua_State
*L
, int nresults
, lua_KContext ctx
,
311 LUA_API
int (lua_resume
)(lua_State
*L
, lua_State
*from
, int narg
,
313 LUA_API
int (lua_status
)(lua_State
*L
);
314 LUA_API
int (lua_isyieldable
)(lua_State
*L
);
316 #define lua_yield(L,n) lua_yieldk(L, (n), 0, NULL)
320 ** Warning-related functions
322 LUA_API
void (lua_setwarnf
)(lua_State
*L
, lua_WarnFunction f
, void *ud
);
323 LUA_API
void (lua_warning
)(lua_State
*L
, const char *msg
, int tocont
);
327 ** garbage-collection function and options
331 #define LUA_GCRESTART 1
332 #define LUA_GCCOLLECT 2
333 #define LUA_GCCOUNT 3
334 #define LUA_GCCOUNTB 4
336 #define LUA_GCSETPAUSE 6
337 #define LUA_GCSETSTEPMUL 7
338 #define LUA_GCISRUNNING 9
342 LUA_API
int (lua_gc
)(lua_State
*L
, int what
, ...);
346 ** miscellaneous functions
349 LUA_API
int (lua_error
)(lua_State
*L
);
351 LUA_API
int (lua_next
)(lua_State
*L
, int idx
);
353 LUA_API
void (lua_concat
)(lua_State
*L
, int n
);
354 LUA_API
void (lua_len
)(lua_State
*L
, int idx
);
356 LUA_API
size_t (lua_stringtonumber
)(lua_State
*L
, const char *s
);
358 LUA_API
lua_Alloc(lua_getallocf
)(lua_State
*L
, void **ud
);
359 LUA_API
void (lua_setallocf
)(lua_State
*L
, lua_Alloc f
, void *ud
);
361 LUA_API
void (lua_toclose
)(lua_State
*L
, int idx
);
362 LUA_API
void (lua_closeslot
)(lua_State
*L
, int idx
);
366 ** {==============================================================
367 ** some useful macros
368 ** ===============================================================
371 #define lua_getextraspace(L) ((void *)((char *)(L) - LUA_EXTRASPACE))
373 #define lua_tonumber(L,i) lua_tonumberx(L,(i),NULL)
374 #define lua_tointeger(L,i) lua_tointegerx(L,(i),NULL)
376 #define lua_pop(L,n) lua_settop(L, -(n)-1)
378 #define lua_newtable(L) lua_createtable(L, 0, 0)
380 #define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n)))
382 #define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0)
384 #define lua_isfunction(L,n) (lua_type(L, (n)) == LUA_TFUNCTION)
385 #define lua_istable(L,n) (lua_type(L, (n)) == LUA_TTABLE)
386 #define lua_islightuserdata(L,n) (lua_type(L, (n)) == LUA_TLIGHTUSERDATA)
387 #define lua_isnil(L,n) (lua_type(L, (n)) == LUA_TNIL)
388 #define lua_isboolean(L,n) (lua_type(L, (n)) == LUA_TBOOLEAN)
389 #define lua_isthread(L,n) (lua_type(L, (n)) == LUA_TTHREAD)
390 #define lua_isnone(L,n) (lua_type(L, (n)) == LUA_TNONE)
391 #define lua_isnoneornil(L, n) (lua_type(L, (n)) <= 0)
393 #define lua_pushliteral(L, s) lua_pushstring(L, "" s)
395 #define lua_pushglobaltable(L) \
396 ((void)lua_rawgeti(L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS))
398 #define lua_tostring(L,i) lua_tolstring(L, (i), NULL)
401 #define lua_insert(L,idx) lua_rotate(L, (idx), 1)
403 #define lua_remove(L,idx) (lua_rotate(L, (idx), -1), lua_pop(L, 1))
405 #define lua_replace(L,idx) (lua_copy(L, -1, (idx)), lua_pop(L, 1))
407 /* }============================================================== */
411 ** {==============================================================
412 ** compatibility macros
413 ** ===============================================================
415 #if defined(LUA_COMPAT_APIINTCASTS)
417 #define lua_pushunsigned(L,n) lua_pushinteger(L, (lua_Integer)(n))
418 #define lua_tounsignedx(L,i,is) ((lua_Unsigned)lua_tointegerx(L,i,is))
419 #define lua_tounsigned(L,i) lua_tounsignedx(L,(i),NULL)
423 #define lua_newuserdata(L,s) lua_newuserdatauv(L,s,1)
424 #define lua_getuservalue(L,idx) lua_getiuservalue(L,idx,1)
425 #define lua_setuservalue(L,idx) lua_setiuservalue(L,idx,1)
427 #define LUA_NUMTAGS LUA_NUMTYPES
429 /* }============================================================== */
432 ** {======================================================================
434 ** =======================================================================
441 #define LUA_HOOKCALL 0
442 #define LUA_HOOKRET 1
443 #define LUA_HOOKLINE 2
444 #define LUA_HOOKCOUNT 3
445 #define LUA_HOOKTAILCALL 4
451 #define LUA_MASKCALL (1 << LUA_HOOKCALL)
452 #define LUA_MASKRET (1 << LUA_HOOKRET)
453 #define LUA_MASKLINE (1 << LUA_HOOKLINE)
454 #define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT)
457 LUA_API
int (lua_getstack
)(lua_State
*L
, int level
, lua_Debug
*ar
);
458 LUA_API
int (lua_getinfo
)(lua_State
*L
, const char *what
, lua_Debug
*ar
);
459 LUA_API
const char *(lua_getlocal
)(lua_State
*L
, const lua_Debug
*ar
, int n
);
460 LUA_API
const char *(lua_setlocal
)(lua_State
*L
, const lua_Debug
*ar
, int n
);
461 LUA_API
const char *(lua_getupvalue
)(lua_State
*L
, int funcindex
, int n
);
462 LUA_API
const char *(lua_setupvalue
)(lua_State
*L
, int funcindex
, int n
);
464 LUA_API
void *(lua_upvalueid
)(lua_State
*L
, int fidx
, int n
);
465 LUA_API
void (lua_upvaluejoin
)(lua_State
*L
, int fidx1
, int n1
,
468 LUA_API
void (lua_sethook
)(lua_State
*L
, lua_Hook func
, int mask
, int count
);
469 LUA_API
lua_Hook(lua_gethook
)(lua_State
*L
);
470 LUA_API
int (lua_gethookmask
)(lua_State
*L
);
471 LUA_API
int (lua_gethookcount
)(lua_State
*L
);
473 LUA_API
int (lua_setcstacklimit
)(lua_State
*L
, unsigned int limit
);
477 const char *name
; /* (n) */
478 const char *namewhat
; /* (n) 'global', 'local', 'field', 'method' */
479 const char *what
; /* (S) 'Lua', 'C', 'main', 'tail' */
480 const char *source
; /* (S) */
481 size_t srclen
; /* (S) */
482 int currentline
; /* (l) */
483 int linedefined
; /* (S) */
484 int lastlinedefined
; /* (S) */
485 unsigned char nups
; /* (u) number of upvalues */
486 unsigned char nparams
;/* (u) number of parameters */
487 char isvararg
; /* (u) */
488 char istailcall
; /* (t) */
489 unsigned short ftransfer
; /* (r) index of first value transferred */
490 unsigned short ntransfer
; /* (r) number of transferred values */
491 char short_src
[LUA_IDSIZE
]; /* (S) */
493 struct CallInfo
*i_ci
; /* active function */
496 /* }====================================================================== */
499 /******************************************************************************
500 * Copyright (C) 1994-2024 Lua.org, PUC-Rio.
502 * Permission is hereby granted, free of charge, to any person obtaining
503 * a copy of this software and associated documentation files (the
504 * "Software"), to deal in the Software without restriction, including
505 * without limitation the rights to use, copy, modify, merge, publish,
506 * distribute, sublicense, and/or sell copies of the Software, and to
507 * permit persons to whom the Software is furnished to do so, subject to
508 * the following conditions:
510 * The above copyright notice and this permission notice shall be
511 * included in all copies or substantial portions of the Software.
513 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
514 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
515 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
516 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
517 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
518 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
519 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
520 ******************************************************************************/