summaryrefslogtreecommitdiff
path: root/apps/plugins/lua/lua.h
diff options
context:
space:
mode:
authorRichard Quirk <richard.quirk@gmail.com>2014-03-19 19:31:31 +0100
committerMarcin Bukat <marcin.bukat@gmail.com>2014-04-02 20:31:54 +0200
commit36378988ad4059982742f05f5eb50580b456840a (patch)
treeee70be810d894566c5e351f21a1ebb79be742a85 /apps/plugins/lua/lua.h
parent020f16a1c7d5bc9a302671cef03f56ac735e20c5 (diff)
downloadrockbox-36378988ad4059982742f05f5eb50580b456840a.tar.gz
rockbox-36378988ad4059982742f05f5eb50580b456840a.zip
Update lua plugin to 5.2.3
Prior to this patch the Lua plugin used version 5.1.4. This change reduces the number of modifications in the Lua source using some new defines and because the upstream source is now more flexible. Unless otherwise stated, l*.[ch] files are taken unmodified from the upstream lua-5.2.3. fscanf.c: file descriptors in rockbox are just ints, they are hidden behind a void* now so liolib requires less modifications. fscanf is updated to use void* too. getc.c: this is a new file required for getc implementation in lauxlib.c lauxlib.c: LoadF replaced FILE* with int, the rockbox file descriptor int are cast to FILE* (actually void* due to typedef). getc uses the PREFIX version. stdin is not used, as per 5.1.4. lbaselib.c: now uses strspn in the number parsing. print uses DEBUGF now rather than being commented out. lbitlib.c: use the built-in version from 5.2.3 rather than Reuben Thomas's external library. Backwards compatible and adds some new bit operations. ldo.c: the LUAI_THROW/TRY defines are now in the core lua code, so have been removed from rockconf.h liolib.c: here the implementation has changed to use the LStream from the original source, and cast the FILE* pointers to int. This has reduced the number of modifications from the upstream version. llex.c: the only change from upstream is to remove the locale include. lmathlib.c: updated from the 5.2.3 version and re-applied the changes that were made vs 5.1.4 for random numbers and to remove unsupported float functions. loadlib.c: upstream version, with the 5.1.4 changes for missing functions. lobject.c: upstream version, with ctype.h added and sprintf changed to snprintf. loslib.c: upstream version with locale.h removed and 5.1.4 changes for unsupportable functions. lstrlib.c: sprintf changed to snprintf. ltable.c: upstream with the hashnum function from 5.1.4 to avoid frexp in luai_hashnum. luaconf.h: updated to 5.2.3 version, restored relevant parts from the original 5.1.4 configuration. The COMPAT defines that are no longer available are not included. lundump.c: VERSION macro conflicts with the core Rockbox equivalent. rocklib.c: luaL_reg is no longer available, replaced by luaL_Reg equivalent. Moved checkboolean/optboolean functions to this file and out of core lua files. luaL_getn is no longer available, replaced by luaL_rawlen. luaL_register is deprecated, use the newlib/setfuncs replacements. rli_init has to be called before setting up the newlib to avoid overwriting the rb table. rocklib_aux.pl: use rli_checkboolean from rocklib.c. rocklua.c: new default bits library used, update the library loading code with idiomatic 5.2 code. strcspn.c: no longer needed, but strspn.c is required for strspn in lbaselib.c Change-Id: I0c7945c755f79083afe98ec117e1e8cf13de2651 Reviewed-on: http://gerrit.rockbox.org/774 Tested: Richard Quirk <richard.quirk@gmail.com> Reviewed-by: Marcin Bukat <marcin.bukat@gmail.com>
Diffstat (limited to 'apps/plugins/lua/lua.h')
-rw-r--r--apps/plugins/lua/lua.h224
1 files changed, 140 insertions, 84 deletions
diff --git a/apps/plugins/lua/lua.h b/apps/plugins/lua/lua.h
index a0c57dc60b..149a2c37bc 100644
--- a/apps/plugins/lua/lua.h
+++ b/apps/plugins/lua/lua.h
@@ -1,6 +1,6 @@
1/* 1/*
2** $Id$ 2** $Id: lua.h,v 1.285.1.2 2013/11/11 12:09:16 roberto Exp $
3** Lua - An Extensible Extension Language 3** Lua - A Scripting Language
4** Lua.org, PUC-Rio, Brazil (http://www.lua.org) 4** Lua.org, PUC-Rio, Brazil (http://www.lua.org)
5** See Copyright Notice at the end of this file 5** See Copyright Notice at the end of this file
6*/ 6*/
@@ -16,35 +16,39 @@
16#include "luaconf.h" 16#include "luaconf.h"
17 17
18 18
19#define LUA_VERSION "Lua 5.1" 19#define LUA_VERSION_MAJOR "5"
20#define LUA_RELEASE "Lua 5.1.4" 20#define LUA_VERSION_MINOR "2"
21#define LUA_VERSION_NUM 501 21#define LUA_VERSION_NUM 502
22#define LUA_COPYRIGHT "Copyright (C) 1994-2008 Lua.org, PUC-Rio" 22#define LUA_VERSION_RELEASE "3"
23#define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo & W. Celes"
24 23
24#define LUA_VERSION "Lua " LUA_VERSION_MAJOR "." LUA_VERSION_MINOR
25#define LUA_RELEASE LUA_VERSION "." LUA_VERSION_RELEASE
26#define LUA_COPYRIGHT LUA_RELEASE " Copyright (C) 1994-2013 Lua.org, PUC-Rio"
27#define LUA_AUTHORS "R. Ierusalimschy, L. H. de Figueiredo, W. Celes"
25 28
26/* mark for precompiled code (`<esc>Lua') */
27#define LUA_SIGNATURE "\033Lua"
28 29
29/* option for multiple returns in `lua_pcall' and `lua_call' */ 30/* mark for precompiled code ('<esc>Lua') */
31#define LUA_SIGNATURE "\033Lua"
32
33/* option for multiple returns in 'lua_pcall' and 'lua_call' */
30#define LUA_MULTRET (-1) 34#define LUA_MULTRET (-1)
31 35
32 36
33/* 37/*
34** pseudo-indices 38** pseudo-indices
35*/ 39*/
36#define LUA_REGISTRYINDEX (-10000) 40#define LUA_REGISTRYINDEX LUAI_FIRSTPSEUDOIDX
37#define LUA_ENVIRONINDEX (-10001) 41#define lua_upvalueindex(i) (LUA_REGISTRYINDEX - (i))
38#define LUA_GLOBALSINDEX (-10002)
39#define lua_upvalueindex(i) (LUA_GLOBALSINDEX-(i))
40 42
41 43
42/* thread status; 0 is OK */ 44/* thread status */
45#define LUA_OK 0
43#define LUA_YIELD 1 46#define LUA_YIELD 1
44#define LUA_ERRRUN 2 47#define LUA_ERRRUN 2
45#define LUA_ERRSYNTAX 3 48#define LUA_ERRSYNTAX 3
46#define LUA_ERRMEM 4 49#define LUA_ERRMEM 4
47#define LUA_ERRERR 5 50#define LUA_ERRGCMM 5
51#define LUA_ERRERR 6
48 52
49 53
50typedef struct lua_State lua_State; 54typedef struct lua_State lua_State;
@@ -81,18 +85,18 @@ typedef void * (*lua_Alloc) (void *ud, void *ptr, size_t osize, size_t nsize);
81#define LUA_TUSERDATA 7 85#define LUA_TUSERDATA 7
82#define LUA_TTHREAD 8 86#define LUA_TTHREAD 8
83 87
88#define LUA_NUMTAGS 9
89
84 90
85 91
86/* minimum Lua stack available to a C function */ 92/* minimum Lua stack available to a C function */
87#define LUA_MINSTACK 20 93#define LUA_MINSTACK 20
88 94
89 95
90/* 96/* predefined values in the registry */
91** generic extra include file 97#define LUA_RIDX_MAINTHREAD 1
92*/ 98#define LUA_RIDX_GLOBALS 2
93#if defined(LUA_USER_H) 99#define LUA_RIDX_LAST LUA_RIDX_GLOBALS
94#include LUA_USER_H
95#endif
96 100
97 101
98/* type of numbers in Lua */ 102/* type of numbers in Lua */
@@ -102,6 +106,23 @@ typedef LUA_NUMBER lua_Number;
102/* type for integer functions */ 106/* type for integer functions */
103typedef LUA_INTEGER lua_Integer; 107typedef LUA_INTEGER lua_Integer;
104 108
109/* unsigned integer type */
110typedef LUA_UNSIGNED lua_Unsigned;
111
112
113
114/*
115** generic extra include file
116*/
117#if defined(LUA_USER_H)
118#include LUA_USER_H
119#endif
120
121
122/*
123** RCS ident string
124*/
125extern const char lua_ident[];
105 126
106 127
107/* 128/*
@@ -114,15 +135,20 @@ LUA_API lua_State *(lua_newthread) (lua_State *L);
114LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf); 135LUA_API lua_CFunction (lua_atpanic) (lua_State *L, lua_CFunction panicf);
115 136
116 137
138LUA_API const lua_Number *(lua_version) (lua_State *L);
139
140
117/* 141/*
118** basic stack manipulation 142** basic stack manipulation
119*/ 143*/
144LUA_API int (lua_absindex) (lua_State *L, int idx);
120LUA_API int (lua_gettop) (lua_State *L); 145LUA_API int (lua_gettop) (lua_State *L);
121LUA_API void (lua_settop) (lua_State *L, int idx); 146LUA_API void (lua_settop) (lua_State *L, int idx);
122LUA_API void (lua_pushvalue) (lua_State *L, int idx); 147LUA_API void (lua_pushvalue) (lua_State *L, int idx);
123LUA_API void (lua_remove) (lua_State *L, int idx); 148LUA_API void (lua_remove) (lua_State *L, int idx);
124LUA_API void (lua_insert) (lua_State *L, int idx); 149LUA_API void (lua_insert) (lua_State *L, int idx);
125LUA_API void (lua_replace) (lua_State *L, int idx); 150LUA_API void (lua_replace) (lua_State *L, int idx);
151LUA_API void (lua_copy) (lua_State *L, int fromidx, int toidx);
126LUA_API int (lua_checkstack) (lua_State *L, int sz); 152LUA_API int (lua_checkstack) (lua_State *L, int sz);
127 153
128LUA_API void (lua_xmove) (lua_State *from, lua_State *to, int n); 154LUA_API void (lua_xmove) (lua_State *from, lua_State *to, int n);
@@ -139,15 +165,12 @@ LUA_API int (lua_isuserdata) (lua_State *L, int idx);
139LUA_API int (lua_type) (lua_State *L, int idx); 165LUA_API int (lua_type) (lua_State *L, int idx);
140LUA_API const char *(lua_typename) (lua_State *L, int tp); 166LUA_API const char *(lua_typename) (lua_State *L, int tp);
141 167
142LUA_API int (lua_equal) (lua_State *L, int idx1, int idx2); 168LUA_API lua_Number (lua_tonumberx) (lua_State *L, int idx, int *isnum);
143LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2); 169LUA_API lua_Integer (lua_tointegerx) (lua_State *L, int idx, int *isnum);
144LUA_API int (lua_lessthan) (lua_State *L, int idx1, int idx2); 170LUA_API lua_Unsigned (lua_tounsignedx) (lua_State *L, int idx, int *isnum);
145
146LUA_API lua_Number (lua_tonumber) (lua_State *L, int idx);
147LUA_API lua_Integer (lua_tointeger) (lua_State *L, int idx);
148LUA_API int (lua_toboolean) (lua_State *L, int idx); 171LUA_API int (lua_toboolean) (lua_State *L, int idx);
149LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len); 172LUA_API const char *(lua_tolstring) (lua_State *L, int idx, size_t *len);
150LUA_API size_t (lua_objlen) (lua_State *L, int idx); 173LUA_API size_t (lua_rawlen) (lua_State *L, int idx);
151LUA_API lua_CFunction (lua_tocfunction) (lua_State *L, int idx); 174LUA_API lua_CFunction (lua_tocfunction) (lua_State *L, int idx);
152LUA_API void *(lua_touserdata) (lua_State *L, int idx); 175LUA_API void *(lua_touserdata) (lua_State *L, int idx);
153LUA_API lua_State *(lua_tothread) (lua_State *L, int idx); 176LUA_API lua_State *(lua_tothread) (lua_State *L, int idx);
@@ -155,13 +178,36 @@ LUA_API const void *(lua_topointer) (lua_State *L, int idx);
155 178
156 179
157/* 180/*
181** Comparison and arithmetic functions
182*/
183
184#define LUA_OPADD 0 /* ORDER TM */
185#define LUA_OPSUB 1
186#define LUA_OPMUL 2
187#define LUA_OPDIV 3
188#define LUA_OPMOD 4
189#define LUA_OPPOW 5
190#define LUA_OPUNM 6
191
192LUA_API void (lua_arith) (lua_State *L, int op);
193
194#define LUA_OPEQ 0
195#define LUA_OPLT 1
196#define LUA_OPLE 2
197
198LUA_API int (lua_rawequal) (lua_State *L, int idx1, int idx2);
199LUA_API int (lua_compare) (lua_State *L, int idx1, int idx2, int op);
200
201
202/*
158** push functions (C -> stack) 203** push functions (C -> stack)
159*/ 204*/
160LUA_API void (lua_pushnil) (lua_State *L); 205LUA_API void (lua_pushnil) (lua_State *L);
161LUA_API void (lua_pushnumber) (lua_State *L, lua_Number n); 206LUA_API void (lua_pushnumber) (lua_State *L, lua_Number n);
162LUA_API void (lua_pushinteger) (lua_State *L, lua_Integer n); 207LUA_API void (lua_pushinteger) (lua_State *L, lua_Integer n);
163LUA_API void (lua_pushlstring) (lua_State *L, const char *s, size_t l); 208LUA_API void (lua_pushunsigned) (lua_State *L, lua_Unsigned n);
164LUA_API void (lua_pushstring) (lua_State *L, const char *s); 209LUA_API const char *(lua_pushlstring) (lua_State *L, const char *s, size_t l);
210LUA_API const char *(lua_pushstring) (lua_State *L, const char *s);
165LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt, 211LUA_API const char *(lua_pushvfstring) (lua_State *L, const char *fmt,
166 va_list argp); 212 va_list argp);
167LUA_API const char *(lua_pushfstring) (lua_State *L, const char *fmt, ...); 213LUA_API const char *(lua_pushfstring) (lua_State *L, const char *fmt, ...);
@@ -174,35 +220,47 @@ LUA_API int (lua_pushthread) (lua_State *L);
174/* 220/*
175** get functions (Lua -> stack) 221** get functions (Lua -> stack)
176*/ 222*/
223LUA_API void (lua_getglobal) (lua_State *L, const char *var);
177LUA_API void (lua_gettable) (lua_State *L, int idx); 224LUA_API void (lua_gettable) (lua_State *L, int idx);
178LUA_API void (lua_getfield) (lua_State *L, int idx, const char *k); 225LUA_API void (lua_getfield) (lua_State *L, int idx, const char *k);
179LUA_API void (lua_rawget) (lua_State *L, int idx); 226LUA_API void (lua_rawget) (lua_State *L, int idx);
180LUA_API void (lua_rawgeti) (lua_State *L, int idx, int n); 227LUA_API void (lua_rawgeti) (lua_State *L, int idx, int n);
228LUA_API void (lua_rawgetp) (lua_State *L, int idx, const void *p);
181LUA_API void (lua_createtable) (lua_State *L, int narr, int nrec); 229LUA_API void (lua_createtable) (lua_State *L, int narr, int nrec);
182LUA_API void *(lua_newuserdata) (lua_State *L, size_t sz); 230LUA_API void *(lua_newuserdata) (lua_State *L, size_t sz);
183LUA_API int (lua_getmetatable) (lua_State *L, int objindex); 231LUA_API int (lua_getmetatable) (lua_State *L, int objindex);
184LUA_API void (lua_getfenv) (lua_State *L, int idx); 232LUA_API void (lua_getuservalue) (lua_State *L, int idx);
185 233
186 234
187/* 235/*
188** set functions (stack -> Lua) 236** set functions (stack -> Lua)
189*/ 237*/
238LUA_API void (lua_setglobal) (lua_State *L, const char *var);
190LUA_API void (lua_settable) (lua_State *L, int idx); 239LUA_API void (lua_settable) (lua_State *L, int idx);
191LUA_API void (lua_setfield) (lua_State *L, int idx, const char *k); 240LUA_API void (lua_setfield) (lua_State *L, int idx, const char *k);
192LUA_API void (lua_rawset) (lua_State *L, int idx); 241LUA_API void (lua_rawset) (lua_State *L, int idx);
193LUA_API void (lua_rawseti) (lua_State *L, int idx, int n); 242LUA_API void (lua_rawseti) (lua_State *L, int idx, int n);
243LUA_API void (lua_rawsetp) (lua_State *L, int idx, const void *p);
194LUA_API int (lua_setmetatable) (lua_State *L, int objindex); 244LUA_API int (lua_setmetatable) (lua_State *L, int objindex);
195LUA_API int (lua_setfenv) (lua_State *L, int idx); 245LUA_API void (lua_setuservalue) (lua_State *L, int idx);
196 246
197 247
198/* 248/*
199** `load' and `call' functions (load and run Lua code) 249** 'load' and 'call' functions (load and run Lua code)
200*/ 250*/
201LUA_API void (lua_call) (lua_State *L, int nargs, int nresults); 251LUA_API void (lua_callk) (lua_State *L, int nargs, int nresults, int ctx,
202LUA_API int (lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc); 252 lua_CFunction k);
203LUA_API int (lua_cpcall) (lua_State *L, lua_CFunction func, void *ud); 253#define lua_call(L,n,r) lua_callk(L, (n), (r), 0, NULL)
254
255LUA_API int (lua_getctx) (lua_State *L, int *ctx);
256
257LUA_API int (lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc,
258 int ctx, lua_CFunction k);
259#define lua_pcall(L,n,r,f) lua_pcallk(L, (n), (r), (f), 0, NULL)
260
204LUA_API int (lua_load) (lua_State *L, lua_Reader reader, void *dt, 261LUA_API int (lua_load) (lua_State *L, lua_Reader reader, void *dt,
205 const char *chunkname); 262 const char *chunkname,
263 const char *mode);
206 264
207LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data); 265LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data);
208 266
@@ -210,8 +268,10 @@ LUA_API int (lua_dump) (lua_State *L, lua_Writer writer, void *data);
210/* 268/*
211** coroutine functions 269** coroutine functions
212*/ 270*/
213LUA_API int (lua_yield) (lua_State *L, int nresults); 271LUA_API int (lua_yieldk) (lua_State *L, int nresults, int ctx,
214LUA_API int (lua_resume) (lua_State *L, int narg); 272 lua_CFunction k);
273#define lua_yield(L,n) lua_yieldk(L, (n), 0, NULL)
274LUA_API int (lua_resume) (lua_State *L, lua_State *from, int narg);
215LUA_API int (lua_status) (lua_State *L); 275LUA_API int (lua_status) (lua_State *L);
216 276
217/* 277/*
@@ -226,6 +286,10 @@ LUA_API int (lua_status) (lua_State *L);
226#define LUA_GCSTEP 5 286#define LUA_GCSTEP 5
227#define LUA_GCSETPAUSE 6 287#define LUA_GCSETPAUSE 6
228#define LUA_GCSETSTEPMUL 7 288#define LUA_GCSETSTEPMUL 7
289#define LUA_GCSETMAJORINC 8
290#define LUA_GCISRUNNING 9
291#define LUA_GCGEN 10
292#define LUA_GCINC 11
229 293
230LUA_API int (lua_gc) (lua_State *L, int what, int data); 294LUA_API int (lua_gc) (lua_State *L, int what, int data);
231 295
@@ -239,18 +303,23 @@ LUA_API int (lua_error) (lua_State *L);
239LUA_API int (lua_next) (lua_State *L, int idx); 303LUA_API int (lua_next) (lua_State *L, int idx);
240 304
241LUA_API void (lua_concat) (lua_State *L, int n); 305LUA_API void (lua_concat) (lua_State *L, int n);
306LUA_API void (lua_len) (lua_State *L, int idx);
242 307
243LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud); 308LUA_API lua_Alloc (lua_getallocf) (lua_State *L, void **ud);
244LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud); 309LUA_API void (lua_setallocf) (lua_State *L, lua_Alloc f, void *ud);
245 310
246 311
247 312
248/* 313/*
249** =============================================================== 314** ===============================================================
250** some useful macros 315** some useful macros
251** =============================================================== 316** ===============================================================
252*/ 317*/
253 318
319#define lua_tonumber(L,i) lua_tonumberx(L,i,NULL)
320#define lua_tointeger(L,i) lua_tointegerx(L,i,NULL)
321#define lua_tounsigned(L,i) lua_tounsignedx(L,i,NULL)
322
254#define lua_pop(L,n) lua_settop(L, -(n)-1) 323#define lua_pop(L,n) lua_settop(L, -(n)-1)
255 324
256#define lua_newtable(L) lua_createtable(L, 0, 0) 325#define lua_newtable(L) lua_createtable(L, 0, 0)
@@ -259,8 +328,6 @@ LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud);
259 328
260#define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0) 329#define lua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0)
261 330
262#define lua_strlen(L,i) lua_objlen(L, (i))
263
264#define lua_isfunction(L,n) (lua_type(L, (n)) == LUA_TFUNCTION) 331#define lua_isfunction(L,n) (lua_type(L, (n)) == LUA_TFUNCTION)
265#define lua_istable(L,n) (lua_type(L, (n)) == LUA_TTABLE) 332#define lua_istable(L,n) (lua_type(L, (n)) == LUA_TTABLE)
266#define lua_islightuserdata(L,n) (lua_type(L, (n)) == LUA_TLIGHTUSERDATA) 333#define lua_islightuserdata(L,n) (lua_type(L, (n)) == LUA_TLIGHTUSERDATA)
@@ -273,32 +340,14 @@ LUA_API void lua_setallocf (lua_State *L, lua_Alloc f, void *ud);
273#define lua_pushliteral(L, s) \ 340#define lua_pushliteral(L, s) \
274 lua_pushlstring(L, "" s, (sizeof(s)/sizeof(char))-1) 341 lua_pushlstring(L, "" s, (sizeof(s)/sizeof(char))-1)
275 342
276#define lua_setglobal(L,s) lua_setfield(L, LUA_GLOBALSINDEX, (s)) 343#define lua_pushglobaltable(L) \
277#define lua_getglobal(L,s) lua_getfield(L, LUA_GLOBALSINDEX, (s)) 344 lua_rawgeti(L, LUA_REGISTRYINDEX, LUA_RIDX_GLOBALS)
278 345
279#define lua_tostring(L,i) lua_tolstring(L, (i), NULL) 346#define lua_tostring(L,i) lua_tolstring(L, (i), NULL)
280 347
281 348
282 349
283/* 350/*
284** compatibility macros and functions
285*/
286
287#define lua_open() luaL_newstate()
288
289#define lua_getregistry(L) lua_pushvalue(L, LUA_REGISTRYINDEX)
290
291#define lua_getgccount(L) lua_gc(L, LUA_GCCOUNT, 0)
292
293#define lua_Chunkreader lua_Reader
294#define lua_Chunkwriter lua_Writer
295
296
297/* hack */
298LUA_API void lua_setlevel (lua_State *from, lua_State *to);
299
300
301/*
302** {====================================================================== 351** {======================================================================
303** Debug API 352** Debug API
304** ======================================================================= 353** =======================================================================
@@ -312,7 +361,7 @@ LUA_API void lua_setlevel (lua_State *from, lua_State *to);
312#define LUA_HOOKRET 1 361#define LUA_HOOKRET 1
313#define LUA_HOOKLINE 2 362#define LUA_HOOKLINE 2
314#define LUA_HOOKCOUNT 3 363#define LUA_HOOKCOUNT 3
315#define LUA_HOOKTAILRET 4 364#define LUA_HOOKTAILCALL 4
316 365
317 366
318/* 367/*
@@ -326,43 +375,50 @@ LUA_API void lua_setlevel (lua_State *from, lua_State *to);
326typedef struct lua_Debug lua_Debug; /* activation record */ 375typedef struct lua_Debug lua_Debug; /* activation record */
327 376
328 377
329/* Functions to be called by the debuger in specific events */ 378/* Functions to be called by the debugger in specific events */
330typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar); 379typedef void (*lua_Hook) (lua_State *L, lua_Debug *ar);
331 380
332 381
333LUA_API int lua_getstack (lua_State *L, int level, lua_Debug *ar); 382LUA_API int (lua_getstack) (lua_State *L, int level, lua_Debug *ar);
334LUA_API int lua_getinfo (lua_State *L, const char *what, lua_Debug *ar); 383LUA_API int (lua_getinfo) (lua_State *L, const char *what, lua_Debug *ar);
335LUA_API const char *lua_getlocal (lua_State *L, const lua_Debug *ar, int n); 384LUA_API const char *(lua_getlocal) (lua_State *L, const lua_Debug *ar, int n);
336LUA_API const char *lua_setlocal (lua_State *L, const lua_Debug *ar, int n); 385LUA_API const char *(lua_setlocal) (lua_State *L, const lua_Debug *ar, int n);
337LUA_API const char *lua_getupvalue (lua_State *L, int funcindex, int n); 386LUA_API const char *(lua_getupvalue) (lua_State *L, int funcindex, int n);
338LUA_API const char *lua_setupvalue (lua_State *L, int funcindex, int n); 387LUA_API const char *(lua_setupvalue) (lua_State *L, int funcindex, int n);
388
389LUA_API void *(lua_upvalueid) (lua_State *L, int fidx, int n);
390LUA_API void (lua_upvaluejoin) (lua_State *L, int fidx1, int n1,
391 int fidx2, int n2);
339 392
340LUA_API int lua_sethook (lua_State *L, lua_Hook func, int mask, int count); 393LUA_API int (lua_sethook) (lua_State *L, lua_Hook func, int mask, int count);
341LUA_API lua_Hook lua_gethook (lua_State *L); 394LUA_API lua_Hook (lua_gethook) (lua_State *L);
342LUA_API int lua_gethookmask (lua_State *L); 395LUA_API int (lua_gethookmask) (lua_State *L);
343LUA_API int lua_gethookcount (lua_State *L); 396LUA_API int (lua_gethookcount) (lua_State *L);
344 397
345 398
346struct lua_Debug { 399struct lua_Debug {
347 int event; 400 int event;
348 const char *name; /* (n) */ 401 const char *name; /* (n) */
349 const char *namewhat; /* (n) `global', `local', `field', `method' */ 402 const char *namewhat; /* (n) 'global', 'local', 'field', 'method' */
350 const char *what; /* (S) `Lua', `C', `main', `tail' */ 403 const char *what; /* (S) 'Lua', 'C', 'main', 'tail' */
351 const char *source; /* (S) */ 404 const char *source; /* (S) */
352 int currentline; /* (l) */ 405 int currentline; /* (l) */
353 int nups; /* (u) number of upvalues */
354 int linedefined; /* (S) */ 406 int linedefined; /* (S) */
355 int lastlinedefined; /* (S) */ 407 int lastlinedefined; /* (S) */
408 unsigned char nups; /* (u) number of upvalues */
409 unsigned char nparams;/* (u) number of parameters */
410 char isvararg; /* (u) */
411 char istailcall; /* (t) */
356 char short_src[LUA_IDSIZE]; /* (S) */ 412 char short_src[LUA_IDSIZE]; /* (S) */
357 /* private part */ 413 /* private part */
358 int i_ci; /* active function */ 414 struct CallInfo *i_ci; /* active function */
359}; 415};
360 416
361/* }====================================================================== */ 417/* }====================================================================== */
362 418
363 419
364/****************************************************************************** 420/******************************************************************************
365* Copyright (C) 1994-2008 Lua.org, PUC-Rio. All rights reserved. 421* Copyright (C) 1994-2013 Lua.org, PUC-Rio.
366* 422*
367* Permission is hereby granted, free of charge, to any person obtaining 423* Permission is hereby granted, free of charge, to any person obtaining
368* a copy of this software and associated documentation files (the 424* a copy of this software and associated documentation files (the