luasandbox  1.4.0
Generic Lua sandbox for dynamic data analysis
lua.h
Go to the documentation of this file.
1 /*
2 ** $Id: lua.h,v 1.218.1.7 2012/01/13 20:36:20 roberto Exp $
3 ** Lua - An Extensible Extension Language
4 ** Lua.org, PUC-Rio, Brazil (http://www.lua.org)
5 ** See Copyright Notice at the end of this file
6 */
7 
8 
9 #ifndef lua_h
10 #define lua_h
11 
12 #include <stdarg.h>
13 #include <stddef.h>
14 
15 
16 #include "luaconf.h"
17 
18 
19 #define LUA_VERSION "Lua 5.1"
20 #define LUA_RELEASE "Lua 5.1.5"
21 #define LUA_VERSION_NUM 501
22 #define LUA_COPYRIGHT "Copyright (C) 1994-2012 Lua.org, PUC-Rio"
23 #define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo & W. Celes"
24 
25 
26 /* mark for precompiled code (`<esc>Lua') */
27 #define LUA_SIGNATURE "\033Lua"
28 
29 /* option for multiple returns in `lua_pcall' and `lua_call' */
30 #define LUA_MULTRET (-1)
31 
32 
33 /*
34 ** pseudo-indices
35 */
36 #define LUA_REGISTRYINDEX (-10000)
37 #define LUA_ENVIRONINDEX (-10001)
38 #define LUA_GLOBALSINDEX (-10002)
39 #define lua_upvalueindex(i) (LUA_GLOBALSINDEX-(i))
40 
41 
42 /* thread status; 0 is OK */
43 #define LUA_YIELD 1
44 #define LUA_ERRRUN 2
45 #define LUA_ERRSYNTAX 3
46 #define LUA_ERRMEM 4
47 #define LUA_ERRERR 5
48 
49 
50 typedef struct lua_State lua_State;
51 
52 typedef int (*lua_CFunction) (lua_State *L);
53 
54 
55 /*
56 ** functions that read/write blocks when loading/dumping Lua chunks
57 */
58 typedef const char * (*lua_Reader) (lua_State *L, void *ud, size_t *sz);
59 
60 typedef int (*lua_Writer) (lua_State *L, const void* p, size_t sz, void* ud);
61 
62 
63 /*
64 ** prototype for memory-allocation functions
65 */
66 typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize);
67 
68 
69 /*
70 ** basic types
71 */
72 #define LUA_TNONE (-1)
73 
74 #define LUA_TNIL 0
75 #define LUA_TBOOLEAN 1
76 #define LUA_TLIGHTUSERDATA 2
77 #define LUA_TNUMBER 3
78 #define LUA_TSTRING 4
79 #define LUA_TTABLE 5
80 #define LUA_TFUNCTION 6
81 #define LUA_TUSERDATA 7
82 #define LUA_TTHREAD 8
83 
84 /*
85 ** table types
86 */
87 #define LUA_TTEMPTY 0
88 #define LUA_TTARRAY 1
89 #define LUA_TTHASH 2
90 #define LUA_TTMIXED 3
91 
92 
93 /* minimum Lua stack available to a C function */
94 #define LUA_MINSTACK 20
95 
96 
97 /*
98 ** generic extra include file
99 */
100 #if defined(LUA_USER_H)
101 #include LUA_USER_H
102 #endif
103 
104 
105 /* type of numbers in Lua */
107 
108 
109 /* type for integer functions */
111 
112 
113 
114 /*
115 ** state manipulation
116 */
117 LUA_API lua_State *(lua_newstate) (lua_Alloc f, void *ud);
118 LUA_API void (lua_close) (lua_State *L);
120 
122 
123 
124 /*
125 ** basic stack manipulation
126 */
127 LUA_API int (lua_gettop) (lua_State *L);
128 LUA_API void (lua_settop) (lua_State *L, int idx);
129 LUA_API void (lua_pushvalue) (lua_State *L, int idx);
130 LUA_API void (lua_remove) (lua_State *L, int idx);
131 LUA_API void (lua_insert) (lua_State *L, int idx);
132 LUA_API void (lua_replace) (lua_State *L, int idx);
133 LUA_API int (lua_checkstack) (lua_State *L, int sz);
134 
135 LUA_API void (lua_xmove) (lua_State *from, lua_State *to, int n);
136 
137 
138 /*
139 ** access functions (stack -> C)
140 */
141 
142 LUA_API int (lua_tabletype) (lua_State *L, int idx);
143 LUA_API int (lua_isnumber) (lua_State *L, int idx);
144 LUA_API int (lua_isstring) (lua_State *L, int idx);
145 LUA_API int (lua_iscfunction) (lua_State *L, int idx);
146 LUA_API int (lua_isuserdata) (lua_State *L, int idx);
147 LUA_API int (lua_type) (lua_State *L, int idx);
148 LUA_API const char *(lua_typename) (lua_State *L, int tp);
149 
150 LUA_API int (lua_equal) (lua_State *L, int idx1, int idx2);
151 LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2);
152 LUA_API int (lua_lessthan) (lua_State *L, int idx1, int idx2);
153 
154 LUA_API lua_Number (lua_tonumber) (lua_State *L, int idx);
156 LUA_API int (lua_toboolean) (lua_State *L, int idx);
157 LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len);
158 LUA_API size_t (lua_objlen) (lua_State *L, int idx);
160 LUA_API void *(lua_touserdata) (lua_State *L, int idx);
161 LUA_API lua_State *(lua_tothread) (lua_State *L, int idx);
162 LUA_API const void *(lua_topointer) (lua_State *L, int idx);
163 
164 
165 /*
166 ** push functions (C -> stack)
167 */
168 LUA_API void (lua_pushnil) (lua_State *L);
171 LUA_API void (lua_pushlstring) (lua_State *L, const char *s, size_t l);
172 LUA_API void (lua_pushstring) (lua_State *L, const char *s);
173 LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt,
174  va_list argp);
175 LUA_API const char *(lua_pushfstring) (lua_State *L, const char *fmt, ...);
176 LUA_API void (lua_pushcclosure) (lua_State *L, lua_CFunction fn, int n);
177 LUA_API void (lua_pushboolean) (lua_State *L, int b);
178 LUA_API void (lua_pushlightuserdata) (lua_State *L, void *p);
179 LUA_API int (lua_pushthread) (lua_State *L);
180 
181 
182 /*
183 ** get functions (Lua -> stack)
184 */
185 LUA_API void (lua_gettable) (lua_State *L, int idx);
186 LUA_API void (lua_getfield) (lua_State *L, int idx, const char *k);
187 LUA_API void (lua_rawget) (lua_State *L, int idx);
188 LUA_API void (lua_rawgeti) (lua_State *L, int idx, int n);
189 LUA_API void (lua_createtable) (lua_State *L, int narr, int nrec);
190 LUA_API void *(lua_newuserdata) (lua_State *L, size_t sz);
191 LUA_API int (lua_getmetatable) (lua_State *L, int objindex);
192 LUA_API void (lua_getfenv) (lua_State *L, int idx);
193 
194 
195 /*
196 ** set functions (stack -> Lua)
197 */
198 LUA_API void (lua_settable) (lua_State *L, int idx);
199 LUA_API void (lua_setfield) (lua_State *L, int idx, const char *k);
200 LUA_API void (lua_rawset) (lua_State *L, int idx);
201 LUA_API void (lua_rawseti) (lua_State *L, int idx, int n);
202 LUA_API int (lua_setmetatable) (lua_State *L, int objindex);
203 LUA_API int (lua_setfenv) (lua_State *L, int idx);
204 
205 
206 /*
207 ** `load' and `call' functions (load and run Lua code)
208 */
209 LUA_API void (lua_call) (lua_State *L, int nargs, int nresults);
210 LUA_API int (lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc);
211 LUA_API int (lua_cpcall) (lua_State *L, lua_CFunction func, void *ud);
212 LUA_API int (lua_load) (lua_State *L, lua_Reader reader, void *dt,
213  const char *chunkname);
214 
215 LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data);
216 
217 
218 /*
219 ** coroutine functions
220 */
221 LUA_API int (lua_yield) (lua_State *L, int nresults);
222 LUA_API int (lua_resume) (lua_State *L, int narg);
223 LUA_API int (lua_status) (lua_State *L);
224 
225 /*
226 ** garbage-collection function and options
227 */
228 
229 #define LUA_GCSTOP 0
230 #define LUA_GCRESTART 1
231 #define LUA_GCCOLLECT 2
232 #define LUA_GCCOUNT 3
233 #define LUA_GCCOUNTB 4
234 #define LUA_GCSTEP 5
235 #define LUA_GCSETPAUSE 6
236 #define LUA_GCSETSTEPMUL 7
237 
238 LUA_API int (lua_gc) (lua_State *L, int what, int data);
239 
240 
241 /*
242 ** miscellaneous functions
243 */
244 
245 LUA_API int (lua_error) (lua_State *L);
246 
247 LUA_API int (lua_next) (lua_State *L, int idx);
248 
249 LUA_API void (lua_concat) (lua_State *L, int n);
250 
251 LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud);
252 LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud);
253 
254 
255 
256 /*
257 ** ===============================================================
258 ** some useful macros
259 ** ===============================================================
260 */
261 
262 #define lua_pop(L,n) lua_settop(L, -(n)-1)
263 
264 #define lua_newtable(L) lua_createtable(L, 0, 0)
265 
266 #define lua_register(L,n,f) (lua_pushcfunction(L, (f)), lua_setglobal(L, (n)))
267 
268 #define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0)
269 
270 #define lua_strlen(L,i) lua_objlen(L, (i))
271 
272 #define lua_isfunction(L,n) (lua_type(L, (n)) == LUA_TFUNCTION)
273 #define lua_istable(L,n) (lua_type(L, (n)) == LUA_TTABLE)
274 #define lua_islightuserdata(L,n) (lua_type(L, (n)) == LUA_TLIGHTUSERDATA)
275 #define lua_isnil(L,n) (lua_type(L, (n)) == LUA_TNIL)
276 #define lua_isboolean(L,n) (lua_type(L, (n)) == LUA_TBOOLEAN)
277 #define lua_isthread(L,n) (lua_type(L, (n)) == LUA_TTHREAD)
278 #define lua_isnone(L,n) (lua_type(L, (n)) == LUA_TNONE)
279 #define lua_isnoneornil(L, n) (lua_type(L, (n)) <= 0)
280 
281 #define lua_pushliteral(L, s) \
282  lua_pushlstring(L, "" s, (sizeof(s)/sizeof(char))-1)
283 
284 #define lua_setglobal(L,s) lua_setfield(L, LUA_GLOBALSINDEX, (s))
285 #define lua_getglobal(L,s) lua_getfield(L, LUA_GLOBALSINDEX, (s))
286 
287 #define lua_tostring(L,i) lua_tolstring(L, (i), NULL)
288 
289 
290 
291 /*
292 ** compatibility macros and functions
293 */
294 
295 #define lua_open() luaL_newstate()
296 
297 #define lua_getregistry(L) lua_pushvalue(L, LUA_REGISTRYINDEX)
298 
299 #define lua_getgccount(L) lua_gc(L, LUA_GCCOUNT, 0)
300 
301 #define lua_Chunkreader lua_Reader
302 #define lua_Chunkwriter lua_Writer
303 
304 
305 /* hack */
306 LUA_API void lua_setlevel (lua_State *from, lua_State *to);
307 
308 
309 /*
310 ** {======================================================================
311 ** Debug API
312 ** =======================================================================
313 */
314 
315 
316 /*
317 ** Event codes
318 */
319 #define LUA_HOOKCALL 0
320 #define LUA_HOOKRET 1
321 #define LUA_HOOKLINE 2
322 #define LUA_HOOKCOUNT 3
323 #define LUA_HOOKTAILRET 4
324 
325 
326 /*
327 ** Event masks
328 */
329 #define LUA_MASKCALL (1 << LUA_HOOKCALL)
330 #define LUA_MASKRET (1 << LUA_HOOKRET)
331 #define LUA_MASKLINE (1 << LUA_HOOKLINE)
332 #define LUA_MASKCOUNT (1 << LUA_HOOKCOUNT)
333 
334 typedef struct lua_Debug lua_Debug; /* activation record */
335 
336 
337 /* Functions to be called by the debuger in specific events */
338 typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
339 
340 
341 LUA_API int lua_getstack (lua_State *L, int level, lua_Debug *ar);
342 LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar);
343 LUA_API const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n);
344 LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n);
345 LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n);
346 LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n);
347 
348 LUA_API int lua_sethook (lua_State *L, lua_Hook func, int mask, int count);
353 
354 
355 struct lua_Debug {
356  int event;
357  const char *name; /* (n) */
358  const char *namewhat; /* (n) `global', `local', `field', `method' */
359  const char *what; /* (S) `Lua', `C', `main', `tail' */
360  const char *source; /* (S) */
361  int currentline; /* (l) */
362  int nups; /* (u) number of upvalues */
363  int linedefined; /* (S) */
364  int lastlinedefined; /* (S) */
365  char short_src[LUA_IDSIZE]; /* (S) */
366  /* private part */
367  int i_ci; /* active function */
368 };
369 
370 /* }====================================================================== */
371 
372 
373 /******************************************************************************
374 * Copyright (C) 1994-2012 Lua.org, PUC-Rio. All rights reserved.
375 *
376 * Permission is hereby granted, free of charge, to any person obtaining
377 * a copy of this software and associated documentation files (the
378 * "Software"), to deal in the Software without restriction, including
379 * without limitation the rights to use, copy, modify, merge, publish,
380 * distribute, sublicense, and/or sell copies of the Software, and to
381 * permit persons to whom the Software is furnished to do so, subject to
382 * the following conditions:
383 *
384 * The above copyright notice and this permission notice shall be
385 * included in all copies or substantial portions of the Software.
386 *
387 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
388 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
389 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
390 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
391 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
392 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
393 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
394 ******************************************************************************/
395 
396 
397 #endif
const char * what
Definition: lua.h:359
Definition: lua.h:355
LUA_API lua_CFunction() lua_atpanic(lua_State *L, lua_CFunction panicf)
LUA_API int() lua_rawequal(lua_State *L, int idx1, int idx2)
LUA_API void() lua_pushinteger(lua_State *L, lua_Integer n)
LUA_API const void *() lua_topointer(lua_State *L, int idx)
LUA_API int() lua_gc(lua_State *L, int what, int data)
LUA_API lua_State *() lua_tothread(lua_State *L, int idx)
LUA_API void() lua_rawget(lua_State *L, int idx)
LUA_API void lua_setlevel(lua_State *from, lua_State *to)
LUA_API lua_State *() lua_newthread(lua_State *L)
LUA_API void() lua_pushcclosure(lua_State *L, lua_CFunction fn, int n)
LUA_API size_t() lua_objlen(lua_State *L, int idx)
LUA_API int() lua_status(lua_State *L)
LUA_API int() lua_isuserdata(lua_State *L, int idx)
LUA_API int() lua_resume(lua_State *L, int narg)
const char * name
Definition: lua.h:357
int(* lua_Writer)(lua_State *L, const void *p, size_t sz, void *ud)
Definition: lua.h:60
LUA_API lua_State *() lua_newstate(lua_Alloc f, void *ud)
LUA_API void() lua_pushlstring(lua_State *L, const char *s, size_t l)
#define LUA_NUMBER
Definition: luaconf.h:507
const char * source
Definition: lua.h:360
int event
Definition: lua.h:356
LUA_API void() lua_call(lua_State *L, int nargs, int nresults)
LUA_API void() lua_insert(lua_State *L, int idx)
LUA_API void() lua_pushnumber(lua_State *L, lua_Number n)
LUA_API int() lua_getmetatable(lua_State *L, int objindex)
LUA_API int() lua_isstring(lua_State *L, int idx)
char short_src[LUA_IDSIZE]
Definition: lua.h:365
int nups
Definition: lua.h:362
LUA_API int() lua_dump(lua_State *L, lua_Writer writer, void *data)
const char * namewhat
Definition: lua.h:358
LUA_API int() lua_yield(lua_State *L, int nresults)
LUA_API const char *() lua_pushvfstring(lua_State *L, const char *fmt, va_list argp)
LUA_API void *() lua_touserdata(lua_State *L, int idx)
LUA_API int() lua_toboolean(lua_State *L, int idx)
LUA_API int lua_sethook(lua_State *L, lua_Hook func, int mask, int count)
LUA_API int() lua_lessthan(lua_State *L, int idx1, int idx2)
int lastlinedefined
Definition: lua.h:364
LUA_API void() lua_getfield(lua_State *L, int idx, const char *k)
LUA_INTEGER lua_Integer
Definition: lua.h:110
LUA_API void() lua_pushlightuserdata(lua_State *L, void *p)
LUA_API void() lua_remove(lua_State *L, int idx)
LUA_API int lua_gethookmask(lua_State *L)
LUA_API int() lua_setmetatable(lua_State *L, int objindex)
int(* lua_CFunction)(lua_State *L)
Definition: lua.h:52
LUA_API int() lua_setfenv(lua_State *L, int idx)
LUA_API lua_Alloc() lua_getallocf(lua_State *L, void **ud)
LUA_API lua_Integer() lua_tointeger(lua_State *L, int idx)
LUA_API void() lua_settable(lua_State *L, int idx)
LUA_API void() lua_replace(lua_State *L, int idx)
LUA_API int() lua_pushthread(lua_State *L)
LUA_API int() lua_load(lua_State *L, lua_Reader reader, void *dt, const char *chunkname)
LUA_API const char *() lua_pushfstring(lua_State *L, const char *fmt,...)
void *(* lua_Alloc)(void *ud, void *ptr, size_t osize, size_t nsize)
Definition: lua.h:66
struct lua_State lua_State
Definition: lua.h:50
LUA_API int() lua_isnumber(lua_State *L, int idx)
LUA_API void() lua_pushstring(lua_State *L, const char *s)
LUA_API const char * lua_setlocal(lua_State *L, const lua_Debug *ar, int n)
#define LUA_API
Definition: luaconf.h:166
LUA_API void() lua_xmove(lua_State *from, lua_State *to, int n)
LUA_API void() lua_gettable(lua_State *L, int idx)
LUA_API void() lua_concat(lua_State *L, int n)
LUA_API int() lua_error(lua_State *L)
LUA_API int() lua_tabletype(lua_State *L, int idx)
LUA_API void lua_setallocf(lua_State *L, lua_Alloc f, void *ud)
LUA_API int lua_gethookcount(lua_State *L)
LUA_API const char * lua_getupvalue(lua_State *L, int funcindex, int n)
LUA_API void() lua_rawgeti(lua_State *L, int idx, int n)
LUA_API void *() lua_newuserdata(lua_State *L, size_t sz)
LUA_API int lua_getinfo(lua_State *L, const char *what, lua_Debug *ar)
LUA_API lua_CFunction() lua_tocfunction(lua_State *L, int idx)
LUA_API void() lua_pushvalue(lua_State *L, int idx)
const char *(* lua_Reader)(lua_State *L, void *ud, size_t *sz)
Definition: lua.h:58
LUA_API int() lua_iscfunction(lua_State *L, int idx)
LUA_API int lua_getstack(lua_State *L, int level, lua_Debug *ar)
LUA_API int() lua_equal(lua_State *L, int idx1, int idx2)
LUA_API int() lua_next(lua_State *L, int idx)
LUA_API int() lua_cpcall(lua_State *L, lua_CFunction func, void *ud)
int i_ci
Definition: lua.h:367
LUA_API void() lua_settop(lua_State *L, int idx)
LUA_API int lua_gethookcountremaining(lua_State *L)
LUA_API void() lua_pushnil(lua_State *L)
LUA_API int() lua_checkstack(lua_State *L, int sz)
void(* lua_Hook)(lua_State *L, lua_Debug *ar)
Definition: lua.h:338
LUA_API int() lua_pcall(lua_State *L, int nargs, int nresults, int errfunc)
LUA_API void() lua_getfenv(lua_State *L, int idx)
LUA_API int() lua_type(lua_State *L, int idx)
LUA_API void() lua_close(lua_State *L)
#define LUA_INTEGER
Definition: luaconf.h:143
int currentline
Definition: lua.h:361
LUA_API lua_Hook lua_gethook(lua_State *L)
LUA_API const char * lua_setupvalue(lua_State *L, int funcindex, int n)
LUA_API void() lua_setfield(lua_State *L, int idx, const char *k)
LUA_API const char *() lua_tolstring(lua_State *L, int idx, size_t *len)
LUA_API void() lua_createtable(lua_State *L, int narr, int nrec)
LUA_API int() lua_gettop(lua_State *L)
LUA_API lua_Number() lua_tonumber(lua_State *L, int idx)
LUA_NUMBER lua_Number
Definition: lua.h:106
#define LUA_IDSIZE
Definition: luaconf.h:212
LUA_API void() lua_pushboolean(lua_State *L, int b)
LUA_API const char * lua_getlocal(lua_State *L, const lua_Debug *ar, int n)
LUA_API void() lua_rawseti(lua_State *L, int idx, int n)
LUA_API const char *() lua_typename(lua_State *L, int tp)
int linedefined
Definition: lua.h:363
LUA_API void() lua_rawset(lua_State *L, int idx)