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