diff options
author | Richard Quirk <richard.quirk@gmail.com> | 2014-03-19 19:31:31 +0100 |
---|---|---|
committer | Marcin Bukat <marcin.bukat@gmail.com> | 2014-04-02 20:31:54 +0200 |
commit | 36378988ad4059982742f05f5eb50580b456840a (patch) | |
tree | ee70be810d894566c5e351f21a1ebb79be742a85 /apps/plugins/lua/luaconf.h | |
parent | 020f16a1c7d5bc9a302671cef03f56ac735e20c5 (diff) | |
download | rockbox-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.h | 678 |
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 | 375 | typedef 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) |
532 | extern 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 | ||
570 | union 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) | ||
436 | extern 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 | ||