83 #if defined(_WIN32) |
83 #if defined(_WIN32) |
84 /* |
84 /* |
85 ** In Windows, any exclamation mark ('!') in the path is replaced by the |
85 ** 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. |
86 ** path of the directory of the executable file of the current process. |
87 */ |
87 */ |
88 #define LUA_LDIR "!\\lua\\" |
88 #define LUA_LDIR "!\\lua\\" |
89 #define LUA_CDIR "!\\" |
89 #define LUA_CDIR "!\\" |
90 #define LUA_PATH_DEFAULT \ |
90 #define LUA_PATH_DEFAULT \ |
91 ".\\?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" \ |
91 ".\\?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" \ |
92 LUA_CDIR"?.lua;" LUA_CDIR"?\\init.lua" |
92 LUA_CDIR"?.lua;" LUA_CDIR"?\\init.lua" |
93 #define LUA_CPATH_DEFAULT \ |
93 #define LUA_CPATH_DEFAULT \ |
94 ".\\?.dll;" LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll" |
94 ".\\?.dll;" LUA_CDIR"?.dll;" LUA_CDIR"loadall.dll" |
95 |
95 |
96 #else |
96 #else |
97 #define LUA_ROOT "/usr/local/" |
97 #define LUA_ROOT "/usr/local/" |
98 #define LUA_LDIR LUA_ROOT "share/lua/5.1/" |
98 #define LUA_LDIR LUA_ROOT "share/lua/5.1/" |
99 #define LUA_CDIR LUA_ROOT "lib/lua/5.1/" |
99 #define LUA_CDIR LUA_ROOT "lib/lua/5.1/" |
100 #define LUA_PATH_DEFAULT \ |
100 #define LUA_PATH_DEFAULT \ |
101 "./?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ |
101 "./?.lua;" LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ |
102 LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua" |
102 LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua" |
103 #define LUA_CPATH_DEFAULT \ |
103 #define LUA_CPATH_DEFAULT \ |
104 "./?.so;" LUA_CDIR"?.so;" LUA_CDIR"loadall.so" |
104 "./?.so;" LUA_CDIR"?.so;" LUA_CDIR"loadall.so" |
105 #endif |
105 #endif |
106 |
106 |
107 |
107 |
108 /* |
108 /* |
109 @@ LUA_DIRSEP is the directory separator (for submodules). |
109 @@ LUA_DIRSEP is the directory separator (for submodules). |
110 ** CHANGE it if your machine does not use "/" as the directory separator |
110 ** CHANGE it if your machine does not use "/" as the directory separator |
111 ** and is not Windows. (On Windows Lua automatically uses "\".) |
111 ** and is not Windows. (On Windows Lua automatically uses "\".) |
112 */ |
112 */ |
113 #if defined(_WIN32) |
113 #if defined(_WIN32) |
114 #define LUA_DIRSEP "\\" |
114 #define LUA_DIRSEP "\\" |
115 #else |
115 #else |
116 #define LUA_DIRSEP "/" |
116 #define LUA_DIRSEP "/" |
117 #endif |
117 #endif |
118 |
118 |
119 |
119 |
120 /* |
120 /* |
121 @@ LUA_PATHSEP is the character that separates templates in a path. |
121 @@ LUA_PATHSEP is the character that separates templates in a path. |
127 @* luaopen_ function name. |
127 @* luaopen_ function name. |
128 ** CHANGE them if for some reason your system cannot use those |
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 |
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. |
130 ** in file/directory names.) Probably you do not need to change them. |
131 */ |
131 */ |
132 #define LUA_PATHSEP ";" |
132 #define LUA_PATHSEP ";" |
133 #define LUA_PATH_MARK "?" |
133 #define LUA_PATH_MARK "?" |
134 #define LUA_EXECDIR "!" |
134 #define LUA_EXECDIR "!" |
135 #define LUA_IGMARK "-" |
135 #define LUA_IGMARK "-" |
136 |
136 |
137 |
137 |
138 /* |
138 /* |
139 @@ LUA_INTEGER is the integral type used by lua_pushinteger/lua_tointeger. |
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 |
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.) |
141 ** machines, ptrdiff_t gives a good choice between int or long.) |
142 */ |
142 */ |
143 #define LUA_INTEGER ptrdiff_t |
143 #define LUA_INTEGER ptrdiff_t |
144 |
144 |
145 |
145 |
146 /* |
146 /* |
147 @@ LUA_API is a mark for all core API functions. |
147 @@ LUA_API is a mark for all core API functions. |
148 @@ LUALIB_API is a mark for all standard library functions. |
148 @@ LUALIB_API is a mark for all standard library functions. |
177 ** CHANGE them if you need to mark them in some special way. Elf/gcc |
177 ** 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 |
178 ** (versions 3.2 and later) mark them as "hidden" to optimize access |
179 ** when Lua is compiled as a shared library. |
179 ** when Lua is compiled as a shared library. |
180 */ |
180 */ |
181 #if defined(luaall_c) |
181 #if defined(luaall_c) |
182 #define LUAI_FUNC static |
182 #define LUAI_FUNC static |
183 #define LUAI_DATA /* empty */ |
183 #define LUAI_DATA /* empty */ |
184 |
184 |
185 #elif defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \ |
185 #elif defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \ |
186 defined(__ELF__) |
186 defined(__ELF__) |
187 #define LUAI_FUNC __attribute__((visibility("hidden"))) extern |
187 #define LUAI_FUNC __attribute__((visibility("hidden"))) extern |
188 #define LUAI_DATA LUAI_FUNC |
188 #define LUAI_DATA LUAI_FUNC |
189 |
189 |
190 #else |
190 #else |
191 #define LUAI_FUNC extern |
191 #define LUAI_FUNC extern |
192 #define LUAI_DATA extern |
192 #define LUAI_DATA extern |
193 #endif |
193 #endif |
194 |
194 |
195 |
195 |
196 |
196 |
197 /* |
197 /* |
198 @@ LUA_QL describes how error messages quote program elements. |
198 @@ LUA_QL describes how error messages quote program elements. |
199 ** CHANGE it if you want a different appearance. |
199 ** CHANGE it if you want a different appearance. |
200 */ |
200 */ |
201 #define LUA_QL(x) "'" x "'" |
201 #define LUA_QL(x) "'" x "'" |
202 #define LUA_QS LUA_QL("%s") |
202 #define LUA_QS LUA_QL("%s") |
203 |
203 |
204 |
204 |
205 /* |
205 /* |
206 @@ LUA_IDSIZE gives the maximum size for the description of the source |
206 @@ LUA_IDSIZE gives the maximum size for the description of the source |
207 @* of a function in debug information. |
207 @* of a function in debug information. |
208 ** CHANGE it if you want a different size. |
208 ** CHANGE it if you want a different size. |
209 */ |
209 */ |
210 #define LUA_IDSIZE 60 |
210 #define LUA_IDSIZE 60 |
211 |
211 |
212 |
212 |
213 /* |
213 /* |
214 ** {================================================================== |
214 ** {================================================================== |
215 ** Stand-alone configuration |
215 ** Stand-alone configuration |
224 ** CHANGE it if you have a better definition for non-POSIX/non-Windows |
224 ** CHANGE it if you have a better definition for non-POSIX/non-Windows |
225 ** systems. |
225 ** systems. |
226 */ |
226 */ |
227 #if defined(LUA_USE_ISATTY) |
227 #if defined(LUA_USE_ISATTY) |
228 #include <unistd.h> |
228 #include <unistd.h> |
229 #define lua_stdin_is_tty() isatty(0) |
229 #define lua_stdin_is_tty() isatty(0) |
230 #elif defined(LUA_WIN) |
230 #elif defined(LUA_WIN) |
231 #include <io.h> |
231 #include <io.h> |
232 #include <stdio.h> |
232 #include <stdio.h> |
233 #define lua_stdin_is_tty() _isatty(_fileno(stdin)) |
233 #define lua_stdin_is_tty() _isatty(_fileno(stdin)) |
234 #else |
234 #else |
235 #define lua_stdin_is_tty() 1 /* assume stdin is a tty */ |
235 #define lua_stdin_is_tty() 1 /* assume stdin is a tty */ |
236 #endif |
236 #endif |
237 |
237 |
238 |
238 |
239 /* |
239 /* |
240 @@ LUA_PROMPT is the default prompt used by stand-alone Lua. |
240 @@ LUA_PROMPT is the default prompt used by stand-alone Lua. |
241 @@ LUA_PROMPT2 is the default continuation prompt used by stand-alone Lua. |
241 @@ LUA_PROMPT2 is the default continuation prompt used by stand-alone Lua. |
242 ** CHANGE them if you want different prompts. (You can also change the |
242 ** CHANGE them if you want different prompts. (You can also change the |
243 ** prompts dynamically, assigning to globals _PROMPT/_PROMPT2.) |
243 ** prompts dynamically, assigning to globals _PROMPT/_PROMPT2.) |
244 */ |
244 */ |
245 #define LUA_PROMPT "> " |
245 #define LUA_PROMPT "> " |
246 #define LUA_PROMPT2 ">> " |
246 #define LUA_PROMPT2 ">> " |
247 |
247 |
248 |
248 |
249 /* |
249 /* |
250 @@ LUA_PROGNAME is the default name for the stand-alone Lua program. |
250 @@ LUA_PROGNAME is the default name for the stand-alone Lua program. |
251 ** CHANGE it if your stand-alone interpreter has a different name and |
251 ** CHANGE it if your stand-alone interpreter has a different name and |
252 ** your system is not able to detect that name automatically. |
252 ** your system is not able to detect that name automatically. |
253 */ |
253 */ |
254 #define LUA_PROGNAME "lua" |
254 #define LUA_PROGNAME "lua" |
255 |
255 |
256 |
256 |
257 /* |
257 /* |
258 @@ LUA_MAXINPUT is the maximum length for an input line in the |
258 @@ LUA_MAXINPUT is the maximum length for an input line in the |
259 @* stand-alone interpreter. |
259 @* stand-alone interpreter. |
260 ** CHANGE it if you need longer lines. |
260 ** CHANGE it if you need longer lines. |
261 */ |
261 */ |
262 #define LUA_MAXINPUT 512 |
262 #define LUA_MAXINPUT 512 |
263 |
263 |
264 |
264 |
265 /* |
265 /* |
266 @@ lua_readline defines how to show a prompt and then read a line from |
266 @@ lua_readline defines how to show a prompt and then read a line from |
267 @* the standard input. |
267 @* the standard input. |
272 */ |
272 */ |
273 #if defined(LUA_USE_READLINE) |
273 #if defined(LUA_USE_READLINE) |
274 #include <stdio.h> |
274 #include <stdio.h> |
275 #include <readline/readline.h> |
275 #include <readline/readline.h> |
276 #include <readline/history.h> |
276 #include <readline/history.h> |
277 #define lua_readline(L,b,p) ((void)L, ((b)=readline(p)) != NULL) |
277 #define lua_readline(L,b,p) ((void)L, ((b)=readline(p)) != NULL) |
278 #define lua_saveline(L,idx) \ |
278 #define lua_saveline(L,idx) \ |
279 if (lua_strlen(L,idx) > 0) /* non-empty line? */ \ |
279 if (lua_strlen(L,idx) > 0) /* non-empty line? */ \ |
280 add_history(lua_tostring(L, idx)); /* add it to history */ |
280 add_history(lua_tostring(L, idx)); /* add it to history */ |
281 #define lua_freeline(L,b) ((void)L, free(b)) |
281 #define lua_freeline(L,b) ((void)L, free(b)) |
282 #else |
282 #else |
283 #define lua_readline(L,b,p) \ |
283 #define lua_readline(L,b,p) \ |
284 ((void)L, fputs(p, stdout), fflush(stdout), /* show prompt */ \ |
284 ((void)L, fputs(p, stdout), fflush(stdout), /* show prompt */ \ |
285 fgets(b, LUA_MAXINPUT, stdin) != NULL) /* get line */ |
285 fgets(b, LUA_MAXINPUT, stdin) != NULL) /* get line */ |
286 #define lua_saveline(L,idx) { (void)L; (void)idx; } |
286 #define lua_saveline(L,idx) { (void)L; (void)idx; } |
287 #define lua_freeline(L,b) { (void)L; (void)b; } |
287 #define lua_freeline(L,b) { (void)L; (void)b; } |
288 #endif |
288 #endif |
289 |
289 |
290 #endif |
290 #endif |
291 |
291 |
292 /* }================================================================== */ |
292 /* }================================================================== */ |
297 @* as a percentage. |
297 @* as a percentage. |
298 ** CHANGE it if you want the GC to run faster or slower (higher values |
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 |
299 ** mean larger pauses which mean slower collection.) You can also change |
300 ** this value dynamically. |
300 ** this value dynamically. |
301 */ |
301 */ |
302 #define LUAI_GCPAUSE 200 /* 200% (wait memory to double before next GC) */ |
302 #define LUAI_GCPAUSE 200 /* 200% (wait memory to double before next GC) */ |
303 |
303 |
304 |
304 |
305 /* |
305 /* |
306 @@ LUAI_GCMUL defines the default speed of garbage collection relative to |
306 @@ LUAI_GCMUL defines the default speed of garbage collection relative to |
307 @* memory allocation as a percentage. |
307 @* memory allocation as a percentage. |
308 ** CHANGE it if you want to change the granularity of the garbage |
308 ** CHANGE it if you want to change the granularity of the garbage |
309 ** collection. (Higher values mean coarser collections. 0 represents |
309 ** collection. (Higher values mean coarser collections. 0 represents |
310 ** infinity, where each step performs a full collection.) You can also |
310 ** infinity, where each step performs a full collection.) You can also |
311 ** change this value dynamically. |
311 ** change this value dynamically. |
312 */ |
312 */ |
313 #define LUAI_GCMUL 200 /* GC runs 'twice the speed' of memory allocation */ |
313 #define LUAI_GCMUL 200 /* GC runs 'twice the speed' of memory allocation */ |
314 |
314 |
315 |
315 |
316 |
316 |
317 /* |
317 /* |
318 @@ LUA_COMPAT_GETN controls compatibility with old getn behavior. |
318 @@ LUA_COMPAT_GETN controls compatibility with old getn behavior. |
374 ** a bit, but may be quite useful when debugging C code that interfaces |
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. |
375 ** with Lua. A useful redefinition is to use assert.h. |
376 */ |
376 */ |
377 #if defined(LUA_USE_APICHECK) |
377 #if defined(LUA_USE_APICHECK) |
378 #include <assert.h> |
378 #include <assert.h> |
379 #define luai_apicheck(L,o) { (void)L; assert(o); } |
379 #define luai_apicheck(L,o) { (void)L; assert(o); } |
380 #else |
380 #else |
381 #define luai_apicheck(L,o) { (void)L; } |
381 #define luai_apicheck(L,o) { (void)L; } |
382 #endif |
382 #endif |
383 |
383 |
384 |
384 |
385 /* |
385 /* |
386 @@ LUAI_BITSINT defines the number of bits in an int. |
386 @@ LUAI_BITSINT defines the number of bits in an int. |
387 ** CHANGE here if Lua cannot automatically detect the number of bits of |
387 ** CHANGE here if Lua cannot automatically detect the number of bits of |
388 ** your machine. Probably you do not need to change this. |
388 ** your machine. Probably you do not need to change this. |
389 */ |
389 */ |
390 /* avoid overflows in comparison */ |
390 /* avoid overflows in comparison */ |
391 #if INT_MAX-20 < 32760 |
391 #if INT_MAX-20 < 32760 |
392 #define LUAI_BITSINT 16 |
392 #define LUAI_BITSINT 16 |
393 #elif INT_MAX > 2147483640L |
393 #elif INT_MAX > 2147483640L |
394 /* int has at least 32 bits */ |
394 /* int has at least 32 bits */ |
395 #define LUAI_BITSINT 32 |
395 #define LUAI_BITSINT 32 |
396 #else |
396 #else |
397 #error "you must define LUA_BITSINT with number of bits in an integer" |
397 #error "you must define LUA_BITSINT with number of bits in an integer" |
398 #endif |
398 #endif |
399 |
399 |
400 |
400 |
409 ** good enough for your machine. (The definitions in the 'else' |
409 ** good enough for your machine. (The definitions in the 'else' |
410 ** part always works, but may waste space on machines with 64-bit |
410 ** part always works, but may waste space on machines with 64-bit |
411 ** longs.) Probably you do not need to change this. |
411 ** longs.) Probably you do not need to change this. |
412 */ |
412 */ |
413 #if LUAI_BITSINT >= 32 |
413 #if LUAI_BITSINT >= 32 |
414 #define LUAI_UINT32 unsigned int |
414 #define LUAI_UINT32 unsigned int |
415 #define LUAI_INT32 int |
415 #define LUAI_INT32 int |
416 #define LUAI_MAXINT32 INT_MAX |
416 #define LUAI_MAXINT32 INT_MAX |
417 #define LUAI_UMEM size_t |
417 #define LUAI_UMEM size_t |
418 #define LUAI_MEM ptrdiff_t |
418 #define LUAI_MEM ptrdiff_t |
419 #else |
419 #else |
420 /* 16-bit ints */ |
420 /* 16-bit ints */ |
421 #define LUAI_UINT32 unsigned long |
421 #define LUAI_UINT32 unsigned long |
422 #define LUAI_INT32 long |
422 #define LUAI_INT32 long |
423 #define LUAI_MAXINT32 LONG_MAX |
423 #define LUAI_MAXINT32 LONG_MAX |
424 #define LUAI_UMEM unsigned long |
424 #define LUAI_UMEM unsigned long |
425 #define LUAI_MEM long |
425 #define LUAI_MEM long |
426 #endif |
426 #endif |
427 |
427 |
428 |
428 |
429 /* |
429 /* |
430 @@ LUAI_MAXCALLS limits the number of nested calls. |
430 @@ LUAI_MAXCALLS limits the number of nested calls. |
431 ** CHANGE it if you need really deep recursive calls. This limit is |
431 ** CHANGE it if you need really deep recursive calls. This limit is |
432 ** arbitrary; its only purpose is to stop infinite recursion before |
432 ** arbitrary; its only purpose is to stop infinite recursion before |
433 ** exhausting memory. |
433 ** exhausting memory. |
434 */ |
434 */ |
435 #define LUAI_MAXCALLS 20000 |
435 #define LUAI_MAXCALLS 20000 |
436 |
436 |
437 |
437 |
438 /* |
438 /* |
439 @@ LUAI_MAXCSTACK limits the number of Lua stack slots that a C function |
439 @@ LUAI_MAXCSTACK limits the number of Lua stack slots that a C function |
440 @* can use. |
440 @* can use. |
441 ** CHANGE it if you need lots of (Lua) stack space for your C |
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 |
442 ** functions. This limit is arbitrary; its only purpose is to stop C |
443 ** functions to consume unlimited stack space. (must be smaller than |
443 ** functions to consume unlimited stack space. (must be smaller than |
444 ** -LUA_REGISTRYINDEX) |
444 ** -LUA_REGISTRYINDEX) |
445 */ |
445 */ |
446 #define LUAI_MAXCSTACK 8000 |
446 #define LUAI_MAXCSTACK 8000 |
447 |
447 |
448 |
448 |
449 |
449 |
450 /* |
450 /* |
451 ** {================================================================== |
451 ** {================================================================== |
463 |
463 |
464 /* |
464 /* |
465 @@ LUAI_MAXCCALLS is the maximum depth for nested C calls (short) and |
465 @@ LUAI_MAXCCALLS is the maximum depth for nested C calls (short) and |
466 @* syntactical nested non-terminals in a program. |
466 @* syntactical nested non-terminals in a program. |
467 */ |
467 */ |
468 #define LUAI_MAXCCALLS 200 |
468 #define LUAI_MAXCCALLS 200 |
469 |
469 |
470 |
470 |
471 /* |
471 /* |
472 @@ LUAI_MAXVARS is the maximum number of local variables per function |
472 @@ LUAI_MAXVARS is the maximum number of local variables per function |
473 @* (must be smaller than 250). |
473 @* (must be smaller than 250). |
474 */ |
474 */ |
475 #define LUAI_MAXVARS 200 |
475 #define LUAI_MAXVARS 200 |
476 |
476 |
477 |
477 |
478 /* |
478 /* |
479 @@ LUAI_MAXUPVALUES is the maximum number of upvalues per function |
479 @@ LUAI_MAXUPVALUES is the maximum number of upvalues per function |
480 @* (must be smaller than 250). |
480 @* (must be smaller than 250). |
481 */ |
481 */ |
482 #define LUAI_MAXUPVALUES 60 |
482 #define LUAI_MAXUPVALUES 60 |
483 |
483 |
484 |
484 |
485 /* |
485 /* |
486 @@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system. |
486 @@ LUAL_BUFFERSIZE is the buffer size used by the lauxlib buffer system. |
487 */ |
487 */ |
488 #define LUAL_BUFFERSIZE BUFSIZ |
488 #define LUAL_BUFFERSIZE BUFSIZ |
489 |
489 |
490 /* }================================================================== */ |
490 /* }================================================================== */ |
491 |
491 |
492 |
492 |
493 |
493 |
500 ** change lua_number2int & lua_number2integer. |
500 ** change lua_number2int & lua_number2integer. |
501 ** =================================================================== |
501 ** =================================================================== |
502 */ |
502 */ |
503 |
503 |
504 #define LUA_NUMBER_DOUBLE |
504 #define LUA_NUMBER_DOUBLE |
505 #define LUA_NUMBER double |
505 #define LUA_NUMBER double |
506 |
506 |
507 /* |
507 /* |
508 @@ LUAI_UACNUMBER is the result of an 'usual argument conversion' |
508 @@ LUAI_UACNUMBER is the result of an 'usual argument conversion' |
509 @* over a number. |
509 @* over a number. |
510 */ |
510 */ |
511 #define LUAI_UACNUMBER double |
511 #define LUAI_UACNUMBER double |
512 |
512 |
513 |
513 |
514 /* |
514 /* |
515 @@ LUA_NUMBER_SCAN is the format for reading numbers. |
515 @@ LUA_NUMBER_SCAN is the format for reading numbers. |
516 @@ LUA_NUMBER_FMT is the format for writing numbers. |
516 @@ LUA_NUMBER_FMT is the format for writing numbers. |
517 @@ lua_number2str converts a number to a string. |
517 @@ lua_number2str converts a number to a string. |
518 @@ LUAI_MAXNUMBER2STR is maximum size of previous conversion. |
518 @@ LUAI_MAXNUMBER2STR is maximum size of previous conversion. |
519 @@ lua_str2number converts a string to a number. |
519 @@ lua_str2number converts a string to a number. |
520 */ |
520 */ |
521 #define LUA_NUMBER_SCAN "%lf" |
521 #define LUA_NUMBER_SCAN "%lf" |
522 #define LUA_NUMBER_FMT "%.14g" |
522 #define LUA_NUMBER_FMT "%.14g" |
523 #define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n)) |
523 #define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n)) |
524 #define LUAI_MAXNUMBER2STR 32 /* 16 digits, sign, point, and \0 */ |
524 #define LUAI_MAXNUMBER2STR 32 /* 16 digits, sign, point, and \0 */ |
525 #define lua_str2number(s,p) strtod((s), (p)) |
525 #define lua_str2number(s,p) strtod((s), (p)) |
526 |
526 |
527 |
527 |
528 /* |
528 /* |
529 @@ The luai_num* macros define the primitive operations over numbers. |
529 @@ The luai_num* macros define the primitive operations over numbers. |
530 */ |
530 */ |
531 #if defined(LUA_CORE) |
531 #if defined(LUA_CORE) |
532 #include <math.h> |
532 #include <math.h> |
533 #define luai_numadd(a,b) ((a)+(b)) |
533 #define luai_numadd(a,b) ((a)+(b)) |
534 #define luai_numsub(a,b) ((a)-(b)) |
534 #define luai_numsub(a,b) ((a)-(b)) |
535 #define luai_nummul(a,b) ((a)*(b)) |
535 #define luai_nummul(a,b) ((a)*(b)) |
536 #define luai_numdiv(a,b) ((a)/(b)) |
536 #define luai_numdiv(a,b) ((a)/(b)) |
537 #define luai_nummod(a,b) ((a) - floor((a)/(b))*(b)) |
537 #define luai_nummod(a,b) ((a) - floor((a)/(b))*(b)) |
538 #define luai_numpow(a,b) (pow(a,b)) |
538 #define luai_numpow(a,b) (pow(a,b)) |
539 #define luai_numunm(a) (-(a)) |
539 #define luai_numunm(a) (-(a)) |
540 #define luai_numeq(a,b) ((a)==(b)) |
540 #define luai_numeq(a,b) ((a)==(b)) |
541 #define luai_numlt(a,b) ((a)<(b)) |
541 #define luai_numlt(a,b) ((a)<(b)) |
542 #define luai_numle(a,b) ((a)<=(b)) |
542 #define luai_numle(a,b) ((a)<=(b)) |
543 #define luai_numisnan(a) (!luai_numeq((a), (a))) |
543 #define luai_numisnan(a) (!luai_numeq((a), (a))) |
544 #endif |
544 #endif |
545 |
545 |
546 |
546 |
547 /* |
547 /* |
548 @@ lua_number2int is a macro to convert lua_Number to int. |
548 @@ lua_number2int is a macro to convert lua_Number to int. |
559 |
559 |
560 /* On a Microsoft compiler, use assembler */ |
560 /* On a Microsoft compiler, use assembler */ |
561 #if defined(_MSC_VER) |
561 #if defined(_MSC_VER) |
562 |
562 |
563 #define lua_number2int(i,d) __asm fld d __asm fistp i |
563 #define lua_number2int(i,d) __asm fld d __asm fistp i |
564 #define lua_number2integer(i,n) lua_number2int(i, n) |
564 #define lua_number2integer(i,n) lua_number2int(i, n) |
565 |
565 |
566 /* the next trick should work on any Pentium, but sometimes clashes |
566 /* the next trick should work on any Pentium, but sometimes clashes |
567 with a DirectX idiosyncrasy */ |
567 with a DirectX idiosyncrasy */ |
568 #else |
568 #else |
569 |
569 |
570 union luai_Cast { double l_d; long l_l; }; |
570 union luai_Cast { double l_d; long l_l; }; |
571 #define lua_number2int(i,d) \ |
571 #define lua_number2int(i,d) \ |
572 { volatile union luai_Cast u; u.l_d = (d) + 6755399441055744.0; (i) = u.l_l; } |
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) |
573 #define lua_number2integer(i,n) lua_number2int(i, n) |
574 |
574 |
575 #endif |
575 #endif |
576 |
576 |
577 |
577 |
578 /* this option always works, but may be slow */ |
578 /* this option always works, but may be slow */ |
579 #else |
579 #else |
580 #define lua_number2int(i,d) ((i)=(int)(d)) |
580 #define lua_number2int(i,d) ((i)=(int)(d)) |
581 #define lua_number2integer(i,d) ((i)=(lua_Integer)(d)) |
581 #define lua_number2integer(i,d) ((i)=(lua_Integer)(d)) |
582 |
582 |
583 #endif |
583 #endif |
584 |
584 |
585 /* }================================================================== */ |
585 /* }================================================================== */ |
586 |
586 |
590 ** CHANGE it if your system requires alignments larger than double. (For |
590 ** CHANGE it if your system requires alignments larger than double. (For |
591 ** instance, if your system supports long doubles and they must be |
591 ** instance, if your system supports long doubles and they must be |
592 ** aligned in 16-byte boundaries, then you should add long double in the |
592 ** aligned in 16-byte boundaries, then you should add long double in the |
593 ** union.) Probably you do not need to change this. |
593 ** union.) Probably you do not need to change this. |
594 */ |
594 */ |
595 #define LUAI_USER_ALIGNMENT_T union { double u; void *s; long l; } |
595 #define LUAI_USER_ALIGNMENT_T union { double u; void *s; long l; } |
596 |
596 |
597 |
597 |
598 /* |
598 /* |
599 @@ LUAI_THROW/LUAI_TRY define how Lua does exception handling. |
599 @@ LUAI_THROW/LUAI_TRY define how Lua does exception handling. |
600 ** CHANGE them if you prefer to use longjmp/setjmp even with C++ |
600 ** CHANGE them if you prefer to use longjmp/setjmp even with C++ |
603 ** compiling as C++ code, with _longjmp/_setjmp when asked to use them, |
603 ** compiling as C++ code, with _longjmp/_setjmp when asked to use them, |
604 ** and with longjmp/setjmp otherwise. |
604 ** and with longjmp/setjmp otherwise. |
605 */ |
605 */ |
606 #if defined(__cplusplus) |
606 #if defined(__cplusplus) |
607 /* C++ exceptions */ |
607 /* C++ exceptions */ |
608 #define LUAI_THROW(L,c) throw(c) |
608 #define LUAI_THROW(L,c) throw(c) |
609 #define LUAI_TRY(L,c,a) try { a } catch(...) \ |
609 #define LUAI_TRY(L,c,a) try { a } catch(...) \ |
610 { if ((c)->status == 0) (c)->status = -1; } |
610 { if ((c)->status == 0) (c)->status = -1; } |
611 #define luai_jmpbuf int /* dummy variable */ |
611 #define luai_jmpbuf int /* dummy variable */ |
612 |
612 |
613 #elif defined(LUA_USE_ULONGJMP) |
613 #elif defined(LUA_USE_ULONGJMP) |
614 /* in Unix, try _longjmp/_setjmp (more efficient) */ |
614 /* in Unix, try _longjmp/_setjmp (more efficient) */ |
615 #define LUAI_THROW(L,c) _longjmp((c)->b, 1) |
615 #define LUAI_THROW(L,c) _longjmp((c)->b, 1) |
616 #define LUAI_TRY(L,c,a) if (_setjmp((c)->b) == 0) { a } |
616 #define LUAI_TRY(L,c,a) if (_setjmp((c)->b) == 0) { a } |
617 #define luai_jmpbuf jmp_buf |
617 #define luai_jmpbuf jmp_buf |
618 |
618 |
619 #else |
619 #else |
620 /* default handling with long jumps */ |
620 /* default handling with long jumps */ |
621 #define LUAI_THROW(L,c) longjmp((c)->b, 1) |
621 #define LUAI_THROW(L,c) longjmp((c)->b, 1) |
622 #define LUAI_TRY(L,c,a) if (setjmp((c)->b) == 0) { a } |
622 #define LUAI_TRY(L,c,a) if (setjmp((c)->b) == 0) { a } |
623 #define luai_jmpbuf jmp_buf |
623 #define luai_jmpbuf jmp_buf |
624 |
624 |
625 #endif |
625 #endif |
626 |
626 |
627 |
627 |
628 /* |
628 /* |
629 @@ LUA_MAXCAPTURES is the maximum number of captures that a pattern |
629 @@ LUA_MAXCAPTURES is the maximum number of captures that a pattern |
630 @* can do during pattern-matching. |
630 @* can do during pattern-matching. |
631 ** CHANGE it if you need more captures. This limit is arbitrary. |
631 ** CHANGE it if you need more captures. This limit is arbitrary. |
632 */ |
632 */ |
633 #define LUA_MAXCAPTURES 32 |
633 #define LUA_MAXCAPTURES 32 |
634 |
634 |
635 |
635 |
636 /* |
636 /* |
637 @@ lua_tmpnam is the function that the OS library uses to create a |
637 @@ lua_tmpnam is the function that the OS library uses to create a |
638 @* temporary name. |
638 @* temporary name. |
643 */ |
643 */ |
644 #if defined(loslib_c) || defined(luaall_c) |
644 #if defined(loslib_c) || defined(luaall_c) |
645 |
645 |
646 #if defined(LUA_USE_MKSTEMP) |
646 #if defined(LUA_USE_MKSTEMP) |
647 #include <unistd.h> |
647 #include <unistd.h> |
648 #define LUA_TMPNAMBUFSIZE 32 |
648 #define LUA_TMPNAMBUFSIZE 32 |
649 #define lua_tmpnam(b,e) { \ |
649 #define lua_tmpnam(b,e) { \ |
650 strcpy(b, "/tmp/lua_XXXXXX"); \ |
650 strcpy(b, "/tmp/lua_XXXXXX"); \ |
651 e = mkstemp(b); \ |
651 e = mkstemp(b); \ |
652 if (e != -1) close(e); \ |
652 if (e != -1) close(e); \ |
653 e = (e == -1); } |
653 e = (e == -1); } |
654 |
654 |
655 #else |
655 #else |
656 #define LUA_TMPNAMBUFSIZE L_tmpnam |
656 #define LUA_TMPNAMBUFSIZE L_tmpnam |
657 #define lua_tmpnam(b,e) { e = (tmpnam(b) == NULL); } |
657 #define lua_tmpnam(b,e) { e = (tmpnam(b) == NULL); } |
658 #endif |
658 #endif |
659 |
659 |
660 #endif |
660 #endif |
661 |
661 |
662 |
662 |
665 @* the file streams. |
665 @* the file streams. |
666 ** CHANGE it if you have a way to implement it in your system. |
666 ** CHANGE it if you have a way to implement it in your system. |
667 */ |
667 */ |
668 #if defined(LUA_USE_POPEN) |
668 #if defined(LUA_USE_POPEN) |
669 |
669 |
670 #define lua_popen(L,c,m) ((void)L, fflush(NULL), popen(c,m)) |
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)) |
671 #define lua_pclose(L,file) ((void)L, (pclose(file) != -1)) |
672 |
672 |
673 #elif defined(LUA_WIN) |
673 #elif defined(LUA_WIN) |
674 |
674 |
675 #define lua_popen(L,c,m) ((void)L, _popen(c,m)) |
675 #define lua_popen(L,c,m) ((void)L, _popen(c,m)) |
676 #define lua_pclose(L,file) ((void)L, (_pclose(file) != -1)) |
676 #define lua_pclose(L,file) ((void)L, (_pclose(file) != -1)) |
677 |
677 |
678 #else |
678 #else |
679 |
679 |
680 #define lua_popen(L,c,m) ((void)((void)c, m), \ |
680 #define lua_popen(L,c,m) ((void)((void)c, m), \ |
681 luaL_error(L, LUA_QL("popen") " not supported"), (FILE*)0) |
681 luaL_error(L, LUA_QL("popen") " not supported"), (FILE*)0) |
682 #define lua_pclose(L,file) ((void)((void)L, file), 0) |
682 #define lua_pclose(L,file) ((void)((void)L, file), 0) |
683 |
683 |
684 #endif |
684 #endif |
685 |
685 |
686 /* |
686 /* |
687 @@ LUA_DL_* define which dynamic-library system Lua should use. |
687 @@ LUA_DL_* define which dynamic-library system Lua should use. |
710 @@ LUAI_EXTRASPACE allows you to add user-specific data in a lua_State |
710 @@ LUAI_EXTRASPACE allows you to add user-specific data in a lua_State |
711 @* (the data goes just *before* the lua_State pointer). |
711 @* (the data goes just *before* the lua_State pointer). |
712 ** CHANGE (define) this if you really need that. This value must be |
712 ** CHANGE (define) this if you really need that. This value must be |
713 ** a multiple of the maximum alignment required for your machine. |
713 ** a multiple of the maximum alignment required for your machine. |
714 */ |
714 */ |
715 #define LUAI_EXTRASPACE 0 |
715 #define LUAI_EXTRASPACE 0 |
716 |
716 |
717 |
717 |
718 /* |
718 /* |
719 @@ luai_userstate* allow user-specific actions on threads. |
719 @@ luai_userstate* allow user-specific actions on threads. |
720 ** CHANGE them if you defined LUAI_EXTRASPACE and need to do something |
720 ** CHANGE them if you defined LUAI_EXTRASPACE and need to do something |
721 ** extra when a thread is created/deleted/resumed/yielded. |
721 ** extra when a thread is created/deleted/resumed/yielded. |
722 */ |
722 */ |
723 #define luai_userstateopen(L) ((void)L) |
723 #define luai_userstateopen(L) ((void)L) |
724 #define luai_userstateclose(L) ((void)L) |
724 #define luai_userstateclose(L) ((void)L) |
725 #define luai_userstatethread(L,L1) ((void)L) |
725 #define luai_userstatethread(L,L1) ((void)L) |
726 #define luai_userstatefree(L) ((void)L) |
726 #define luai_userstatefree(L) ((void)L) |
727 #define luai_userstateresume(L,n) ((void)L) |
727 #define luai_userstateresume(L,n) ((void)L) |
728 #define luai_userstateyield(L,n) ((void)L) |
728 #define luai_userstateyield(L,n) ((void)L) |
729 |
729 |
730 |
730 |
731 /* |
731 /* |
732 @@ LUA_INTFRMLEN is the length modifier for integer conversions |
732 @@ LUA_INTFRMLEN is the length modifier for integer conversions |
733 @* in 'string.format'. |
733 @* in 'string.format'. |