summaryrefslogtreecommitdiff
path: root/apps/plugins/lua/luaconf.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/luaconf.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/luaconf.h')
-rw-r--r--apps/plugins/lua/luaconf.h678
1 files changed, 232 insertions, 446 deletions
diff --git a/apps/plugins/lua/luaconf.h b/apps/plugins/lua/luaconf.h
index 109e680a17..ed83e8f640 100644
--- a/apps/plugins/lua/luaconf.h
+++ b/apps/plugins/lua/luaconf.h
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id$ 2** $Id: luaconf.h,v 1.176.1.1 2013/04/12 18:48:47 roberto Exp $
3** Configuration file for Lua 3** Configuration file for Lua
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -24,30 +24,44 @@
24** CHANGE it (define it) if you want Lua to avoid the use of any 24** CHANGE it (define it) if you want Lua to avoid the use of any
25** non-ansi feature or library. 25** non-ansi feature or library.
26*/ 26*/
27#if defined(__STRICT_ANSI__) 27#if !defined(LUA_ANSI) && defined(__STRICT_ANSI__)
28#define LUA_ANSI 28#define LUA_ANSI
29#endif 29#endif
30 30
31 31
32#if !defined(LUA_ANSI) && defined(_WIN32) 32#if !defined(LUA_ANSI) && defined(_WIN32) && !defined(_WIN32_WCE)
33#define LUA_WIN 33#define LUA_WIN /* enable goodies for regular Windows platforms */
34#endif 34#endif
35 35
36#if defined(LUA_WIN)
37#define LUA_DL_DLL
38#define LUA_USE_AFORMAT /* assume 'printf' handles 'aA' specifiers */
39#endif
40
41
42
36#if defined(LUA_USE_LINUX) 43#if defined(LUA_USE_LINUX)
37#define LUA_USE_POSIX 44#define LUA_USE_POSIX
38#define LUA_USE_DLOPEN /* needs an extra library: -ldl */ 45#define LUA_USE_DLOPEN /* needs an extra library: -ldl */
39#define LUA_USE_READLINE /* needs some extra libraries */ 46#define LUA_USE_READLINE /* needs some extra libraries */
47#define LUA_USE_STRTODHEX /* assume 'strtod' handles hex formats */
48#define LUA_USE_AFORMAT /* assume 'printf' handles 'aA' specifiers */
49#define LUA_USE_LONGLONG /* assume support for long long */
40#endif 50#endif
41 51
42#if defined(LUA_USE_MACOSX) 52#if defined(LUA_USE_MACOSX)
43#define LUA_USE_POSIX 53#define LUA_USE_POSIX
44#define LUA_DL_DYLD /* does not need extra library */ 54#define LUA_USE_DLOPEN /* does not need -ldl */
55#define LUA_USE_READLINE /* needs an extra library: -lreadline */
56#define LUA_USE_STRTODHEX /* assume 'strtod' handles hex formats */
57#define LUA_USE_AFORMAT /* assume 'printf' handles 'aA' specifiers */
58#define LUA_USE_LONGLONG /* assume support for long long */
45#endif 59#endif
46 60
47 61
48 62
49/* 63/*
50@@ LUA_USE_POSIX includes all functionallity listed as X/Open System 64@@ LUA_USE_POSIX includes all functionality listed as X/Open System
51@* Interfaces Extension (XSI). 65@* Interfaces Extension (XSI).
52** CHANGE it (define it) if your system is XSI compatible. 66** CHANGE it (define it) if your system is XSI compatible.
53*/ 67*/
@@ -56,20 +70,10 @@
56#define LUA_USE_ISATTY 70#define LUA_USE_ISATTY
57#define LUA_USE_POPEN 71#define LUA_USE_POPEN
58#define LUA_USE_ULONGJMP 72#define LUA_USE_ULONGJMP
73#define LUA_USE_GMTIME_R
59#endif 74#endif
60 75
61 76
62/*
63@@ LUA_PATH and LUA_CPATH are the names of the environment variables that
64@* Lua check to set its paths.
65@@ LUA_INIT is the name of the environment variable that Lua
66@* checks for initialization code.
67** CHANGE them if you want different names.
68*/
69#define LUA_PATH "LUA_PATH"
70#define LUA_CPATH "LUA_CPATH"
71#define LUA_INIT "LUA_INIT"
72
73 77
74/* 78/*
75@@ LUA_PATH_DEFAULT is the default path that Lua uses to look for 79@@ LUA_PATH_DEFAULT is the default path that Lua uses to look for
@@ -80,7 +84,7 @@
80** hierarchy or if you want to install your libraries in 84** hierarchy or if you want to install your libraries in
81** non-conventional directories. 85** non-conventional directories.
82*/ 86*/
83#if defined(_WIN32) 87#if defined(_WIN32) /* { */
84/* 88/*
85** In Windows, any exclamation mark ('!') in the path is replaced by the 89** In Windows, any exclamation mark ('!') in the path is replaced by the
86** path of the directory of the executable file of the current process. 90** path of the directory of the executable file of the current process.
@@ -88,21 +92,23 @@
88#define LUA_LDIR "!\\lua\\" 92#define LUA_LDIR "!\\lua\\"
89#define LUA_CDIR "!\\" 93#define LUA_CDIR "!\\"
90#define LUA_PATH_DEFAULT \ 94#define LUA_PATH_DEFAULT \
91 ".\\?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" \ 95 LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" \
92 LUA_CDIR"?.lua;" LUA_CDIR"?\\init.lua" 96 LUA_CDIR"?.lua;" LUA_CDIR"?\\init.lua;" ".\\?.lua"
93#define LUA_CPATH_DEFAULT \ 97#define LUA_CPATH_DEFAULT \
94 ".\\?.dll;" LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll" 98 LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll;" ".\\?.dll"
95 99
96#else 100#else /* }{ */
101
102#define LUA_VDIR LUA_VERSION_MAJOR "." LUA_VERSION_MINOR "/"
97#define LUA_ROOT "/usr/local/" 103#define LUA_ROOT "/usr/local/"
98#define LUA_LDIR LUA_ROOT "share/lua/5.1/" 104#define LUA_LDIR LUA_ROOT "share/lua/" LUA_VDIR
99#define LUA_CDIR LUA_ROOT "lib/lua/5.1/" 105#define LUA_CDIR LUA_ROOT "lib/lua/" LUA_VDIR
100#define LUA_PATH_DEFAULT \ 106#define LUA_PATH_DEFAULT \
101 "./?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ 107 LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \
102 LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua" 108 LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua;" "./?.lua"
103#define LUA_CPATH_DEFAULT \ 109#define LUA_CPATH_DEFAULT \
104 "./?.so;" LUA_CDIR"?.so;" LUA_CDIR"loadall.so" 110 LUA_CDIR"?.so;" LUA_CDIR"loadall.so;" "./?.so"
105#endif 111#endif /* } */
106 112
107 113
108/* 114/*
@@ -118,79 +124,67 @@
118 124
119 125
120/* 126/*
121@@ LUA_PATHSEP is the character that separates templates in a path. 127@@ LUA_ENV is the name of the variable that holds the current
122@@ LUA_PATH_MARK is the string that marks the substitution points in a 128@@ environment, used to access global names.
123@* template. 129** CHANGE it if you do not like this name.
124@@ LUA_EXECDIR in a Windows path is replaced by the executable's
125@* directory.
126@@ LUA_IGMARK is a mark to ignore all before it when bulding the
127@* luaopen_ function name.
128** CHANGE them if for some reason your system cannot use those
129** characters. (E.g., if one of those characters is a common character
130** in file/directory names.) Probably you do not need to change them.
131*/
132#define LUA_PATHSEP ";"
133#define LUA_PATH_MARK "?"
134#define LUA_EXECDIR "!"
135#define LUA_IGMARK "-"
136
137
138/*
139@@ LUA_INTEGER is the integral type used by lua_pushinteger/lua_tointeger.
140** CHANGE that if ptrdiff_t is not adequate on your machine. (On most
141** machines, ptrdiff_t gives a good choice between int or long.)
142*/ 130*/
143#define LUA_INTEGER ptrdiff_t 131#define LUA_ENV "_ENV"
144 132
145 133
146/* 134/*
147@@ LUA_API is a mark for all core API functions. 135@@ LUA_API is a mark for all core API functions.
148@@ LUALIB_API is a mark for all standard library functions. 136@@ LUALIB_API is a mark for all auxiliary library functions.
137@@ LUAMOD_API is a mark for all standard library opening functions.
149** CHANGE them if you need to define those functions in some special way. 138** CHANGE them if you need to define those functions in some special way.
150** For instance, if you want to create one Windows DLL with the core and 139** For instance, if you want to create one Windows DLL with the core and
151** the libraries, you may want to use the following definition (define 140** the libraries, you may want to use the following definition (define
152** LUA_BUILD_AS_DLL to get it). 141** LUA_BUILD_AS_DLL to get it).
153*/ 142*/
154#if defined(LUA_BUILD_AS_DLL) 143#if defined(LUA_BUILD_AS_DLL) /* { */
155 144
156#if defined(LUA_CORE) || defined(LUA_LIB) 145#if defined(LUA_CORE) || defined(LUA_LIB) /* { */
157#define LUA_API __declspec(dllexport) 146#define LUA_API __declspec(dllexport)
158#else 147#else /* }{ */
159#define LUA_API __declspec(dllimport) 148#define LUA_API __declspec(dllimport)
160#endif 149#endif /* } */
161 150
162#else 151#else /* }{ */
163 152
164#define LUA_API extern 153#define LUA_API extern
165 154
166#endif 155#endif /* } */
156
167 157
168/* more often than not the libs go together with the core */ 158/* more often than not the libs go together with the core */
169#define LUALIB_API LUA_API 159#define LUALIB_API LUA_API
160#define LUAMOD_API LUALIB_API
170 161
171 162
172/* 163/*
173@@ LUAI_FUNC is a mark for all extern functions that are not to be 164@@ LUAI_FUNC is a mark for all extern functions that are not to be
174@* exported to outside modules. 165@* exported to outside modules.
175@@ LUAI_DATA is a mark for all extern (const) variables that are not to 166@@ LUAI_DDEF and LUAI_DDEC are marks for all extern (const) variables
176@* be exported to outside modules. 167@* that are not to be exported to outside modules (LUAI_DDEF for
168@* definitions and LUAI_DDEC for declarations).
177** CHANGE them if you need to mark them in some special way. Elf/gcc 169** CHANGE them if you need to mark them in some special way. Elf/gcc
178** (versions 3.2 and later) mark them as "hidden" to optimize access 170** (versions 3.2 and later) mark them as "hidden" to optimize access
179** when Lua is compiled as a shared library. 171** when Lua is compiled as a shared library. Not all elf targets support
180*/ 172** this attribute. Unfortunately, gcc does not offer a way to check
181#if defined(luaall_c) 173** whether the target offers that support, and those without support
182#define LUAI_FUNC static 174** give a warning about it. To avoid these warnings, change to the
183#define LUAI_DATA /* empty */ 175** default definition.
184 176*/
185#elif defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \ 177#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \
186 defined(__ELF__) 178 defined(__ELF__) /* { */
187#define LUAI_FUNC __attribute__((visibility("hidden"))) extern 179#define LUAI_FUNC __attribute__((visibility("hidden"))) extern
188#define LUAI_DATA LUAI_FUNC 180#define LUAI_DDEC LUAI_FUNC
181#define LUAI_DDEF /* empty */
189 182
190#else 183#else /* }{ */
191#define LUAI_FUNC extern 184#define LUAI_FUNC extern
192#define LUAI_DATA extern 185#define LUAI_DDEC extern
193#endif 186#define LUAI_DDEF /* empty */
187#endif /* } */
194 188
195 189
196 190
@@ -211,175 +205,108 @@
211 205
212 206
213/* 207/*
214** {================================================================== 208@@ luai_writestring/luai_writeline define how 'print' prints its results.
215** Stand-alone configuration 209** They are only used in libraries and the stand-alone program. (The #if
216** =================================================================== 210** avoids including 'stdio.h' everywhere.)
217*/ 211*/
218 212#if defined(LUA_LIB) || defined(lua_c)
219#if defined(lua_c) || defined(luaall_c) 213#define luai_writestring(s,l) DEBUGF("%s", (s))
214#define luai_writeline() luai_writestring("\n", 1)
215#endif
220 216
221/* 217/*
222@@ lua_stdin_is_tty detects whether the standard input is a 'tty' (that 218@@ luai_writestringerror defines how to print error messages.
223@* is, whether we're running lua interactively). 219** (A format string with one argument is enough for Lua...)
224** CHANGE it if you have a better definition for non-POSIX/non-Windows
225** systems.
226*/ 220*/
227#if defined(LUA_USE_ISATTY) 221#define luai_writestringerror(s,p) \
228#include <unistd.h> 222 (fprintf(stderr, (s), (p)), fflush(stderr))
229#define lua_stdin_is_tty() isatty(0)
230#elif defined(LUA_WIN)
231#include <io.h>
232#include <stdio.h>
233#define lua_stdin_is_tty() _isatty(_fileno(stdin))
234#else
235#define lua_stdin_is_tty() 1 /* assume stdin is a tty */
236#endif
237 223
238 224
239/* 225/*
240@@ LUA_PROMPT is the default prompt used by stand-alone Lua. 226@@ LUAI_MAXSHORTLEN is the maximum length for short strings, that is,
241@@ LUA_PROMPT2 is the default continuation prompt used by stand-alone Lua. 227** strings that are internalized. (Cannot be smaller than reserved words
242** CHANGE them if you want different prompts. (You can also change the 228** or tags for metamethods, as these strings must be internalized;
243** prompts dynamically, assigning to globals _PROMPT/_PROMPT2.) 229** #("function") = 8, #("__newindex") = 10.)
244*/ 230*/
245#define LUA_PROMPT "> " 231#define LUAI_MAXSHORTLEN 40
246#define LUA_PROMPT2 ">> " 232
247 233
248 234
249/* 235/*
250@@ LUA_PROGNAME is the default name for the stand-alone Lua program. 236** {==================================================================
251** CHANGE it if your stand-alone interpreter has a different name and 237** Compatibility with previous versions
252** your system is not able to detect that name automatically. 238** ===================================================================
253*/ 239*/
254#define LUA_PROGNAME "lua"
255
256 240
257/* 241/*
258@@ LUA_MAXINPUT is the maximum length for an input line in the 242@@ LUA_COMPAT_ALL controls all compatibility options.
259@* stand-alone interpreter. 243** You can define it to get all options, or change specific options
260** CHANGE it if you need longer lines. 244** to fit your specific needs.
261*/ 245*/
262#define LUA_MAXINPUT 512 246#if defined(LUA_COMPAT_ALL) /* { */
263
264 247
265/* 248/*
266@@ lua_readline defines how to show a prompt and then read a line from 249@@ LUA_COMPAT_UNPACK controls the presence of global 'unpack'.
267@* the standard input. 250** You can replace it with 'table.unpack'.
268@@ lua_saveline defines how to "save" a read line in a "history".
269@@ lua_freeline defines how to free a line read by lua_readline.
270** CHANGE them if you want to improve this functionality (e.g., by using
271** GNU readline and history facilities).
272*/ 251*/
273#if defined(LUA_USE_READLINE) 252#define LUA_COMPAT_UNPACK
274#include <stdio.h>
275#include <readline/readline.h>
276#include <readline/history.h>
277#define lua_readline(L,b,p) ((void)L, ((b)=readline(p)) != NULL)
278#define lua_saveline(L,idx) \
279 if (lua_strlen(L,idx) > 0) /* non-empty line? */ \
280 add_history(lua_tostring(L, idx)); /* add it to history */
281#define lua_freeline(L,b) ((void)L, free(b))
282#else
283#define lua_readline(L,b,p) \
284 ((void)L, fputs(p, stdout), fflush(stdout), /* show prompt */ \
285 fgets(b, LUA_MAXINPUT, stdin) != NULL) /* get line */
286#define lua_saveline(L,idx) { (void)L; (void)idx; }
287#define lua_freeline(L,b) { (void)L; (void)b; }
288#endif
289
290#endif
291
292/* }================================================================== */
293
294 253
295/* 254/*
296@@ LUAI_GCPAUSE defines the default pause between garbage-collector cycles 255@@ LUA_COMPAT_LOADERS controls the presence of table 'package.loaders'.
297@* as a percentage. 256** You can replace it with 'package.searchers'.
298** CHANGE it if you want the GC to run faster or slower (higher values
299** mean larger pauses which mean slower collection.) You can also change
300** this value dynamically.
301*/ 257*/
302#define LUAI_GCPAUSE 200 /* 200% (wait memory to double before next GC) */ 258#define LUA_COMPAT_LOADERS
303
304 259
305/* 260/*
306@@ LUAI_GCMUL defines the default speed of garbage collection relative to 261@@ macro 'lua_cpcall' emulates deprecated function lua_cpcall.
307@* memory allocation as a percentage. 262** You can call your C function directly (with light C functions).
308** CHANGE it if you want to change the granularity of the garbage
309** collection. (Higher values mean coarser collections. 0 represents
310** infinity, where each step performs a full collection.) You can also
311** change this value dynamically.
312*/ 263*/
313#define LUAI_GCMUL 200 /* GC runs 'twice the speed' of memory allocation */ 264#define lua_cpcall(L,f,u) \
314 265 (lua_pushcfunction(L, (f)), \
266 lua_pushlightuserdata(L,(u)), \
267 lua_pcall(L,1,0,0))
315 268
316 269
317/* 270/*
318@@ LUA_COMPAT_GETN controls compatibility with old getn behavior. 271@@ LUA_COMPAT_LOG10 defines the function 'log10' in the math library.
319** CHANGE it (define it) if you want exact compatibility with the 272** You can rewrite 'log10(x)' as 'log(x, 10)'.
320** behavior of setn/getn in Lua 5.0.
321*/ 273*/
322#undef LUA_COMPAT_GETN 274#define LUA_COMPAT_LOG10
323 275
324/* 276/*
325@@ LUA_COMPAT_LOADLIB controls compatibility about global loadlib. 277@@ LUA_COMPAT_LOADSTRING defines the function 'loadstring' in the base
326** CHANGE it to undefined as soon as you do not need a global 'loadlib' 278** library. You can rewrite 'loadstring(s)' as 'load(s)'.
327** function (the function is still available as 'package.loadlib').
328*/ 279*/
329#undef LUA_COMPAT_LOADLIB 280#define LUA_COMPAT_LOADSTRING
330 281
331/* 282/*
332@@ LUA_COMPAT_VARARG controls compatibility with old vararg feature. 283@@ LUA_COMPAT_MAXN defines the function 'maxn' in the table library.
333** CHANGE it to undefined as soon as your programs use only '...' to
334** access vararg parameters (instead of the old 'arg' table).
335*/ 284*/
336#undef LUA_COMPAT_VARARG 285#define LUA_COMPAT_MAXN
337 286
338/* 287/*
339@@ LUA_COMPAT_MOD controls compatibility with old math.mod function. 288@@ The following macros supply trivial compatibility for some
340** CHANGE it to undefined as soon as your programs use 'math.fmod' or 289** changes in the API. The macros themselves document how to
341** the new '%' operator instead of 'math.mod'. 290** change your code to avoid using them.
342*/ 291*/
343#undef LUA_COMPAT_MOD 292#define lua_strlen(L,i) lua_rawlen(L, (i))
344 293
345/* 294#define lua_objlen(L,i) lua_rawlen(L, (i))
346@@ LUA_COMPAT_LSTR controls compatibility with old long string nesting
347@* facility.
348** CHANGE it to 2 if you want the old behaviour, or undefine it to turn
349** off the advisory error when nesting [[...]].
350*/
351#undef LUA_COMPAT_LSTR
352 295
353/* 296#define lua_equal(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPEQ)
354@@ LUA_COMPAT_GFIND controls compatibility with old 'string.gfind' name. 297#define lua_lessthan(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPLT)
355** CHANGE it to undefined as soon as you rename 'string.gfind' to
356** 'string.gmatch'.
357*/
358#undef LUA_COMPAT_GFIND
359 298
360/* 299/*
361@@ LUA_COMPAT_OPENLIB controls compatibility with old 'luaL_openlib' 300@@ LUA_COMPAT_MODULE controls compatibility with previous
362@* behavior. 301** module functions 'module' (Lua) and 'luaL_register' (C).
363** CHANGE it to undefined as soon as you replace to 'luaL_registry'
364** your uses of 'luaL_openlib'
365*/ 302*/
366#undef LUA_COMPAT_OPENLIB 303#define LUA_COMPAT_MODULE
367 304
305#endif /* } */
306#define LUA_COMPAT_MODULE
368 307
308/* }================================================================== */
369 309
370/*
371@@ luai_apicheck is the assert macro used by the Lua-C API.
372** CHANGE luai_apicheck if you want Lua to perform some checks in the
373** parameters it gets from API calls. This may slow down the interpreter
374** a bit, but may be quite useful when debugging C code that interfaces
375** with Lua. A useful redefinition is to use assert.h.
376*/
377#if defined(LUA_USE_APICHECK)
378#include <assert.h>
379#define luai_apicheck(L,o) { (void)L; assert(o); }
380#else
381#define luai_apicheck(L,o) { (void)L; }
382#endif
383 310
384 311
385/* 312/*
@@ -388,108 +315,65 @@
388** your machine. Probably you do not need to change this. 315** your machine. Probably you do not need to change this.
389*/ 316*/
390/* avoid overflows in comparison */ 317/* avoid overflows in comparison */
391#if INT_MAX-20 < 32760 318#if INT_MAX-20 < 32760 /* { */
392#define LUAI_BITSINT 16 319#define LUAI_BITSINT 16
393#elif INT_MAX > 2147483640L 320#elif INT_MAX > 2147483640L /* }{ */
394/* int has at least 32 bits */ 321/* int has at least 32 bits */
395#define LUAI_BITSINT 32 322#define LUAI_BITSINT 32
396#else 323#else /* }{ */
397#error "you must define LUA_BITSINT with number of bits in an integer" 324#error "you must define LUA_BITSINT with number of bits in an integer"
398#endif 325#endif /* } */
399 326
400 327
401/* 328/*
402@@ LUAI_UINT32 is an unsigned integer with at least 32 bits. 329@@ LUA_INT32 is an signed integer with exactly 32 bits.
403@@ LUAI_INT32 is an signed integer with at least 32 bits.
404@@ LUAI_UMEM is an unsigned integer big enough to count the total 330@@ LUAI_UMEM is an unsigned integer big enough to count the total
405@* memory used by Lua. 331@* memory used by Lua.
406@@ LUAI_MEM is a signed integer big enough to count the total memory 332@@ LUAI_MEM is a signed integer big enough to count the total memory
407@* used by Lua. 333@* used by Lua.
408** CHANGE here if for some weird reason the default definitions are not 334** CHANGE here if for some weird reason the default definitions are not
409** good enough for your machine. (The definitions in the 'else' 335** good enough for your machine. Probably you do not need to change
410** part always works, but may waste space on machines with 64-bit 336** this.
411** longs.) Probably you do not need to change this.
412*/ 337*/
413#if LUAI_BITSINT >= 32 338#if LUAI_BITSINT >= 32 /* { */
414#define LUAI_UINT32 unsigned int 339#define LUA_INT32 int
415#define LUAI_INT32 int
416#define LUAI_MAXINT32 INT_MAX
417#define LUAI_UMEM size_t 340#define LUAI_UMEM size_t
418#define LUAI_MEM ptrdiff_t 341#define LUAI_MEM ptrdiff_t
419#else 342#else /* }{ */
420/* 16-bit ints */ 343/* 16-bit ints */
421#define LUAI_UINT32 unsigned long 344#define LUA_INT32 long
422#define LUAI_INT32 long
423#define LUAI_MAXINT32 LONG_MAX
424#define LUAI_UMEM unsigned long 345#define LUAI_UMEM unsigned long
425#define LUAI_MEM long 346#define LUAI_MEM long
426#endif 347#endif /* } */
427
428
429/*
430@@ LUAI_MAXCALLS limits the number of nested calls.
431** CHANGE it if you need really deep recursive calls. This limit is
432** arbitrary; its only purpose is to stop infinite recursion before
433** exhausting memory.
434*/
435#define LUAI_MAXCALLS 20000
436
437
438/*
439@@ LUAI_MAXCSTACK limits the number of Lua stack slots that a C function
440@* can use.
441** CHANGE it if you need lots of (Lua) stack space for your C
442** functions. This limit is arbitrary; its only purpose is to stop C
443** functions to consume unlimited stack space. (must be smaller than
444** -LUA_REGISTRYINDEX)
445*/
446#define LUAI_MAXCSTACK 8000
447
448
449
450/*
451** {==================================================================
452** CHANGE (to smaller values) the following definitions if your system
453** has a small C stack. (Or you may want to change them to larger
454** values if your system has a large C stack and these limits are
455** too rigid for you.) Some of these constants control the size of
456** stack-allocated arrays used by the compiler or the interpreter, while
457** others limit the maximum number of recursive calls that the compiler
458** or the interpreter can perform. Values too large may cause a C stack
459** overflow for some forms of deep constructs.
460** ===================================================================
461*/
462 348
463 349
464/* 350/*
465@@ LUAI_MAXCCALLS is the maximum depth for nested C calls (short) and 351@@ LUAI_MAXSTACK limits the size of the Lua stack.
466@* syntactical nested non-terminals in a program. 352** CHANGE it if you need a different limit. This limit is arbitrary;
353** its only purpose is to stop Lua to consume unlimited stack
354** space (and to reserve some numbers for pseudo-indices).
467*/ 355*/
468#define LUAI_MAXCCALLS 200 356#if LUAI_BITSINT >= 32
357#define LUAI_MAXSTACK 1000000
358#else
359#define LUAI_MAXSTACK 15000
360#endif
469 361
362/* reserve some space for error handling */
363#define LUAI_FIRSTPSEUDOIDX (-LUAI_MAXSTACK - 1000)
470 364
471/*
472@@ LUAI_MAXVARS is the maximum number of local variables per function
473@* (must be smaller than 250).
474*/
475#define LUAI_MAXVARS 200
476 365
477 366
478/*
479@@ LUAI_MAXUPVALUES is the maximum number of upvalues per function
480@* (must be smaller than 250).
481*/
482#define LUAI_MAXUPVALUES 60
483
484 367
485/* 368/*
486@@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system. 369@@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system.
370** CHANGE it if it uses too much C-stack space.
487*/ 371*/
488#define LUAL_BUFFERSIZE 1024 372#define LUAL_BUFFERSIZE 1024
489 373
490/* }================================================================== */ 374#ifndef SIMULATOR
491 375typedef void FILE;
492 376#endif
493 377
494 378
495/* 379/*
@@ -516,237 +400,138 @@
516@@ LUA_NUMBER_FMT is the format for writing numbers. 400@@ LUA_NUMBER_FMT is the format for writing numbers.
517@@ lua_number2str converts a number to a string. 401@@ lua_number2str converts a number to a string.
518@@ LUAI_MAXNUMBER2STR is maximum size of previous conversion. 402@@ LUAI_MAXNUMBER2STR is maximum size of previous conversion.
519@@ lua_str2number converts a string to a number.
520*/ 403*/
521#define LUA_NUMBER_SCAN "%ld" 404#define LUA_NUMBER_SCAN "%ld"
522#define LUA_NUMBER_FMT "%ld" 405#define LUA_NUMBER_FMT "%ld"
523#define LUAI_MAXNUMBER2STR 32 /* 16 digits, sign, point, and \0 */ 406#define LUAI_MAXNUMBER2STR 32 /* 16 digits, sign, point, and \0 */
524#define lua_number2str(s,n) snprintf((s), 32, LUA_NUMBER_FMT, (n)) 407#define lua_number2str(s,n) snprintf((s), 32, LUA_NUMBER_FMT, (n))
525#define lua_str2number(s,p) strtol((s), (p), 10)
526 408
527 409
528/* 410/*
529@@ The luai_num* macros define the primitive operations over numbers. 411@@ l_mathop allows the addition of an 'l' or 'f' to all math operations
530*/ 412*/
531#if defined(LUA_CORE) 413#define l_mathop(x) (x)
532extern long rb_pow(long, long);
533#define luai_numadd(a,b) ((a)+(b))
534#define luai_numsub(a,b) ((a)-(b))
535#define luai_nummul(a,b) ((a)*(b))
536#define luai_numdiv(a,b) ((a)/(b))
537#define luai_nummod(a,b) ((a)%(b))
538#define luai_numpow(a,b) (rb_pow(a,b))
539#define luai_numunm(a) (-(a))
540#define luai_numeq(a,b) ((a)==(b))
541#define luai_numlt(a,b) ((a)<(b))
542#define luai_numle(a,b) ((a)<=(b))
543#define luai_numisnan(a) (!luai_numeq((a), (a)))
544#endif
545 414
546 415
547/* 416/*
548@@ lua_number2int is a macro to convert lua_Number to int. 417@@ lua_str2number converts a decimal numeric string to a number.
549@@ lua_number2integer is a macro to convert lua_Number to lua_Integer. 418@@ lua_strx2number converts an hexadecimal numeric string to a number.
550** CHANGE them if you know a faster way to convert a lua_Number to 419** In C99, 'strtod' does both conversions. C89, however, has no function
551** int (with any rounding method and without throwing errors) in your 420** to convert floating hexadecimal strings to numbers. For these
552** system. In Pentium machines, a naive typecast from double to int 421** systems, you can leave 'lua_strx2number' undefined and Lua will
553** in C is extremely slow, so any alternative is worth trying. 422** provide its own implementation.
554*/ 423*/
424#define lua_str2number(s,p) strtol((s), (p), 10)
555 425
556/* On a Pentium, resort to a trick */ 426#define lua_strx2number(s,p) strtoul((s), (p), 16)
557#if defined(LUA_NUMBER_DOUBLE) && !defined(LUA_ANSI) && !defined(__SSE2__) && \
558 (defined(__i386) || defined (_M_IX86) || defined(__i386__))
559
560/* On a Microsoft compiler, use assembler */
561#if defined(_MSC_VER)
562
563#define lua_number2int(i,d) __asm fld d __asm fistp i
564#define lua_number2integer(i,n) lua_number2int(i, n)
565
566/* the next trick should work on any Pentium, but sometimes clashes
567 with a DirectX idiosyncrasy */
568#else
569 427
570union luai_Cast { double l_d; long l_l; };
571#define lua_number2int(i,d) \
572 { volatile union luai_Cast u; u.l_d = (d) + 6755399441055744.0; (i) = u.l_l; }
573#define lua_number2integer(i,n) lua_number2int(i, n)
574
575#endif
576 428
429/*
430@@ The luai_num* macros define the primitive operations over numbers.
431*/
577 432
578/* this option always works, but may be slow */
579#else
580#define lua_number2int(i,d) ((i)=(int)(d))
581#define lua_number2integer(i,d) ((i)=(lua_Integer)(d))
582 433
434/* these are quite standard operations */
435#if defined(LUA_CORE)
436extern long rb_pow(long, long);
437#define luai_numadd(L,a,b) ((a)+(b))
438#define luai_numsub(L,a,b) ((a)-(b))
439#define luai_nummul(L,a,b) ((a)*(b))
440#define luai_numdiv(L,a,b) ((a)/(b))
441#define luai_nummod(L,a,b) ((a)%(b))
442#define luai_numpow(L,a,b) (rb_pow(a,b))
443#define luai_numunm(L,a) (-(a))
444#define luai_numeq(a,b) ((a)==(b))
445#define luai_numlt(L,a,b) ((a)<(b))
446#define luai_numle(L,a,b) ((a)<=(b))
447#define luai_numisnan(L,a) (!luai_numeq((a), (a)))
583#endif 448#endif
584 449
585/* }================================================================== */
586 450
587 451
588/* 452/*
589@@ LUAI_USER_ALIGNMENT_T is a type that requires maximum alignment. 453@@ LUA_INTEGER is the integral type used by lua_pushinteger/lua_tointeger.
590** CHANGE it if your system requires alignments larger than double. (For 454** CHANGE that if ptrdiff_t is not adequate on your machine. (On most
591** instance, if your system supports long doubles and they must be 455** machines, ptrdiff_t gives a good choice between int or long.)
592** aligned in 16-byte boundaries, then you should add long double in the
593** union.) Probably you do not need to change this.
594*/ 456*/
595#define LUAI_USER_ALIGNMENT_T union { void *s; long l; } 457#define LUA_INTEGER ptrdiff_t
596
597 458
598/* 459/*
599@@ LUAI_THROW/LUAI_TRY define how Lua does exception handling. 460@@ LUA_UNSIGNED is the integral type used by lua_pushunsigned/lua_tounsigned.
600** CHANGE them if you prefer to use longjmp/setjmp even with C++ 461** It must have at least 32 bits.
601** or if want/don't to use _longjmp/_setjmp instead of regular
602** longjmp/setjmp. By default, Lua handles errors with exceptions when
603** compiling as C++ code, with _longjmp/_setjmp when asked to use them,
604** and with longjmp/setjmp otherwise.
605*/ 462*/
606#if defined(__cplusplus) 463#define LUA_UNSIGNED unsigned LUA_INT32
607/* C++ exceptions */
608#define LUAI_THROW(L,c) throw(c)
609#define LUAI_TRY(L,c,a) try { a } catch(...) \
610 { if ((c)->status == 0) (c)->status = -1; }
611#define luai_jmpbuf int /* dummy variable */
612
613#elif defined(LUA_USE_ULONGJMP)
614/* in Unix, try _longjmp/_setjmp (more efficient) */
615#define LUAI_THROW(L,c) _longjmp((c)->b, 1)
616#define LUAI_TRY(L,c,a) if (_setjmp((c)->b) == 0) { a }
617#define luai_jmpbuf jmp_buf
618
619#else
620/* default handling with long jumps */
621#define LUAI_THROW(L,c) longjmp((c)->b, 1)
622#define LUAI_TRY(L,c,a) if (setjmp((c)->b) == 0) { a }
623#define luai_jmpbuf jmp_buf
624 464
625#endif
626 465
627 466
628/* 467/*
629@@ LUA_MAXCAPTURES is the maximum number of captures that a pattern 468** Some tricks with doubles
630@* can do during pattern-matching.
631** CHANGE it if you need more captures. This limit is arbitrary.
632*/ 469*/
633#define LUA_MAXCAPTURES 32
634
635 470
471#if defined(LUA_NUMBER_DOUBLE) && !defined(LUA_ANSI) /* { */
636/* 472/*
637@@ lua_tmpnam is the function that the OS library uses to create a 473** The next definitions activate some tricks to speed up the
638@* temporary name. 474** conversion from doubles to integer types, mainly to LUA_UNSIGNED.
639@@ LUA_TMPNAMBUFSIZE is the maximum size of a name created by lua_tmpnam. 475**
640** CHANGE them if you have an alternative to tmpnam (which is considered 476@@ LUA_MSASMTRICK uses Microsoft assembler to avoid clashes with a
641** insecure) or if you want the original tmpnam anyway. By default, Lua 477** DirectX idiosyncrasy.
642** uses tmpnam except when POSIX is available, where it uses mkstemp. 478**
479@@ LUA_IEEE754TRICK uses a trick that should work on any machine
480** using IEEE754 with a 32-bit integer type.
481**
482@@ LUA_IEEELL extends the trick to LUA_INTEGER; should only be
483** defined when LUA_INTEGER is a 32-bit integer.
484**
485@@ LUA_IEEEENDIAN is the endianness of doubles in your machine
486** (0 for little endian, 1 for big endian); if not defined, Lua will
487** check it dynamically for LUA_IEEE754TRICK (but not for LUA_NANTRICK).
488**
489@@ LUA_NANTRICK controls the use of a trick to pack all types into
490** a single double value, using NaN values to represent non-number
491** values. The trick only works on 32-bit machines (ints and pointers
492** are 32-bit values) with numbers represented as IEEE 754-2008 doubles
493** with conventional endianess (12345678 or 87654321), in CPUs that do
494** not produce signaling NaN values (all NaNs are quiet).
643*/ 495*/
644#if defined(loslib_c) || defined(luaall_c)
645
646#if defined(LUA_USE_MKSTEMP)
647#include <unistd.h>
648#define LUA_TMPNAMBUFSIZE 32
649#define lua_tmpnam(b,e) { \
650 strcpy(b, "/tmp/lua_XXXXXX"); \
651 e = mkstemp(b); \
652 if (e != -1) close(e); \
653 e = (e == -1); }
654
655#else
656#define LUA_TMPNAMBUFSIZE L_tmpnam
657#define lua_tmpnam(b,e) { e = (tmpnam(b) == NULL); }
658#endif
659
660#endif
661
662
663/*
664@@ lua_popen spawns a new process connected to the current one through
665@* the file streams.
666** CHANGE it if you have a way to implement it in your system.
667*/
668#if defined(LUA_USE_POPEN)
669
670#define lua_popen(L,c,m) ((void)L, fflush(NULL), popen(c,m))
671#define lua_pclose(L,file) ((void)L, (pclose(file) != -1))
672 496
673#elif defined(LUA_WIN) 497/* Microsoft compiler on a Pentium (32 bit) ? */
498#if defined(LUA_WIN) && defined(_MSC_VER) && defined(_M_IX86) /* { */
674 499
675#define lua_popen(L,c,m) ((void)L, _popen(c,m)) 500#define LUA_MSASMTRICK
676#define lua_pclose(L,file) ((void)L, (_pclose(file) != -1)) 501#define LUA_IEEEENDIAN 0
502#define LUA_NANTRICK
677 503
678#else
679 504
680#define lua_popen(L,c,m) ((void)((void)c, m), \ 505/* pentium 32 bits? */
681 luaL_error(L, LUA_QL("popen") " not supported"), (FILE*)0) 506#elif defined(__i386__) || defined(__i386) || defined(__X86__) /* }{ */
682#define lua_pclose(L,file) ((void)((void)L, file), 0)
683 507
684#endif 508#define LUA_IEEE754TRICK
509#define LUA_IEEELL
510#define LUA_IEEEENDIAN 0
511#define LUA_NANTRICK
685 512
686/* 513/* pentium 64 bits? */
687@@ LUA_DL_* define which dynamic-library system Lua should use. 514#elif defined(__x86_64) /* }{ */
688** CHANGE here if Lua has problems choosing the appropriate
689** dynamic-library system for your platform (either Windows' DLL, Mac's
690** dyld, or Unix's dlopen). If your system is some kind of Unix, there
691** is a good chance that it has dlopen, so LUA_DL_DLOPEN will work for
692** it. To use dlopen you also need to adapt the src/Makefile (probably
693** adding -ldl to the linker options), so Lua does not select it
694** automatically. (When you change the makefile to add -ldl, you must
695** also add -DLUA_USE_DLOPEN.)
696** If you do not want any kind of dynamic library, undefine all these
697** options.
698** By default, _WIN32 gets LUA_DL_DLL and MAC OS X gets LUA_DL_DYLD.
699*/
700#if defined(LUA_USE_DLOPEN)
701#define LUA_DL_DLOPEN
702#endif
703 515
704#if defined(LUA_WIN) 516#define LUA_IEEE754TRICK
705#define LUA_DL_DLL 517#define LUA_IEEEENDIAN 0
706#endif
707 518
519#elif defined(__POWERPC__) || defined(__ppc__) /* }{ */
708 520
709/* 521#define LUA_IEEE754TRICK
710@@ LUAI_EXTRASPACE allows you to add user-specific data in a lua_State 522#define LUA_IEEEENDIAN 1
711@* (the data goes just *before* the lua_State pointer).
712** CHANGE (define) this if you really need that. This value must be
713** a multiple of the maximum alignment required for your machine.
714*/
715#define LUAI_EXTRASPACE 0
716 523
524#else /* }{ */
717 525
718/* 526/* assume IEEE754 and a 32-bit integer type */
719@@ luai_userstate* allow user-specific actions on threads. 527#define LUA_IEEE754TRICK
720** CHANGE them if you defined LUAI_EXTRASPACE and need to do something
721** extra when a thread is created/deleted/resumed/yielded.
722*/
723#define luai_userstateopen(L) ((void)L)
724#define luai_userstateclose(L) ((void)L)
725#define luai_userstatethread(L,L1) ((void)L)
726#define luai_userstatefree(L) ((void)L)
727#define luai_userstateresume(L,n) ((void)L)
728#define luai_userstateyield(L,n) ((void)L)
729
730
731/*
732@@ LUA_INTFRMLEN is the length modifier for integer conversions
733@* in 'string.format'.
734@@ LUA_INTFRM_T is the integer type correspoding to the previous length
735@* modifier.
736** CHANGE them if your system supports long long or does not support long.
737*/
738 528
739#if defined(LUA_USELONGLONG) 529#endif /* } */
740 530
741#define LUA_INTFRMLEN "ll" 531#endif /* } */
742#define LUA_INTFRM_T long long
743 532
744#else 533/* }================================================================== */
745
746#define LUA_INTFRMLEN "l"
747#define LUA_INTFRM_T long
748 534
749#endif
750 535
751 536
752 537
@@ -758,6 +543,7 @@ union luai_Cast { double l_d; long l_l; };
758*/ 543*/
759 544
760#include "rockconf.h" 545#include "rockconf.h"
546#define LUA_USE_CTYPE 1
761 547
762#endif 548#endif
763 549