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