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