aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2013-06-25 16:04:40 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2013-06-25 16:04:40 -0300
commit2b4975dca710510a7b94f1f9bef97814d1349f95 (patch)
treef1669be4bac09beadea854165a1c06c111785753
parente39da66c8c23ede187df14fef6314052d124dad3 (diff)
downloadlua-2b4975dca710510a7b94f1f9bef97814d1349f95.tar.gz
lua-2b4975dca710510a7b94f1f9bef97814d1349f95.tar.bz2
lua-2b4975dca710510a7b94f1f9bef97814d1349f95.zip
LUA_SMALL_* changed to LUA_*SIZE + added support for long double + better
support for ANSI systems
-rw-r--r--luaconf.h64
1 files changed, 40 insertions, 24 deletions
diff --git a/luaconf.h b/luaconf.h
index fe9fcd25..4ed6280a 100644
--- a/luaconf.h
+++ b/luaconf.h
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: luaconf.h,v 1.183 2013/06/20 15:02:49 roberto Exp roberto $ 2** $Id: luaconf.h,v 1.184 2013/06/21 17:42:28 roberto Exp roberto $
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*/
@@ -384,11 +384,12 @@
384*/ 384*/
385 385
386/* 386/*
387@@ LUA_SMALL_INT true makes Lua use a 32-bit integer type 387@@ LUA_INTSIZE defines size for Lua integer: 1=int, 2=long, 3=long long
388@@ LUA_SMALL_FLOAT true makes Lua use a 32-bit float type 388@@ LUA_FLOATSIZE defines size for Lua float: 1=float, 2=double, 3=long double
389** Default is long long + double
389*/ 390*/
390#define LUA_SMALL_FLOAT 0 391#define LUA_INTSIZE 3
391#define LUA_SMALL_INT 0 392#define LUA_FLOATSIZE 2
392 393
393 394
394/* 395/*
@@ -405,14 +406,9 @@
405@@ l_mathop allows the addition of an 'l' or 'f' to all math operations 406@@ l_mathop allows the addition of an 'l' or 'f' to all math operations
406** 407**
407@@ lua_str2number converts a decimal numeric string to a number. 408@@ lua_str2number converts a decimal numeric string to a number.
408@@ lua_strx2number converts an hexadecimal numeric string to a number.
409** In C99, 'strtod' does both conversions. C89, however, has no function
410** to convert floating hexadecimal strings to numbers. For these
411** systems, you can leave 'lua_strx2number' undefined and Lua will
412** provide its own implementation.
413*/ 409*/
414 410
415#if LUA_SMALL_FLOAT /* { */ 411#if LUA_FLOATSIZE == 1 /* { single float */
416 412
417#define LUA_NUMBER float 413#define LUA_NUMBER float
418 414
@@ -423,13 +419,26 @@
423#define LUA_NUMBER_FMT "%.7g" 419#define LUA_NUMBER_FMT "%.7g"
424 420
425#define l_mathop(op) op##f 421#define l_mathop(op) op##f
426#define l_floor(x) (floorf(x))
427 422
428#define lua_str2number(s,p) strtof((s), (p)) 423#define lua_str2number(s,p) strtof((s), (p))
429 424
430#else /* }{ */
431 425
432#define LUA_NUMBER_DOUBLE 426#elif LUA_FLOATSIZE == 3 /* }{ long double */
427
428#define LUA_NUMBER long double
429
430#define LUAI_UACNUMBER long double
431
432#define LUA_NUMBER_FRMLEN "L"
433#define LUA_NUMBER_SCAN "%Lf"
434#define LUA_NUMBER_FMT "%.19Lg"
435
436#define l_mathop(op) op##l
437
438#define lua_str2number(s,p) strtold((s), (p))
439
440#else /* }{ default: double */
441
433#define LUA_NUMBER double 442#define LUA_NUMBER double
434 443
435#define LUAI_UACNUMBER double 444#define LUAI_UACNUMBER double
@@ -439,18 +448,28 @@
439#define LUA_NUMBER_FMT "%.14g" 448#define LUA_NUMBER_FMT "%.14g"
440 449
441#define l_mathop(op) op 450#define l_mathop(op) op
442#define l_floor(x) (floor(x))
443 451
444#define lua_str2number(s,p) strtod((s), (p)) 452#define lua_str2number(s,p) strtod((s), (p))
445 453
446#endif /* } */ 454#endif /* } */
447 455
448 456
449#if defined(LUA_USE_STRTODHEX) 457#if defined(LUA_ANSI)
450#define lua_strx2number(s,p) lua_str2number(s,p) 458/* C89 does not support 'opf' variants for math functions */
459#undef l_mathop
460#define l_mathop(op) (lua_Number)op
451#endif 461#endif
452 462
453 463
464#if defined(LUA_ANSI) || defined(_WIN32)
465/* C89 and Windows do not support 'strtof'... */
466#undef lua_str2number
467#define lua_str2number(s,p) ((lua_Number)strtod((s), (p)))
468#endif
469
470
471#define l_floor(x) (l_mathop(floor)(x))
472
454#define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n)) 473#define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n))
455 474
456 475
@@ -492,27 +511,24 @@
492@@ lua_integer2str converts an integer to a string. 511@@ lua_integer2str converts an integer to a string.
493*/ 512*/
494 513
495#if LUA_SMALL_INT /* { */ 514#if LUA_INTSIZE == 1 /* { int */
496
497#if LUAI_BITSINT >= 32
498 515
499#define LUA_INTEGER int 516#define LUA_INTEGER int
500#define LUA_INTEGER_FRMLEN "" 517#define LUA_INTEGER_FRMLEN ""
501 518
502#else 519#elif LUA_INTSIZE == 2 /* }{ long */
503 520
504#define LUA_INTEGER long 521#define LUA_INTEGER long
505#define LUA_INTEGER_FRMLEN "l" 522#define LUA_INTEGER_FRMLEN "l"
506 523
507#endif 524#else /* }{ default: long long */
508
509#else /* }{ */
510 525
511#define LUA_INTEGER long long 526#define LUA_INTEGER long long
512#define LUA_INTEGER_FRMLEN "ll" 527#define LUA_INTEGER_FRMLEN "ll"
513 528
514#endif /* } */ 529#endif /* } */
515 530
531
516#define LUA_INTEGER_SCAN "%" LUA_INTEGER_FRMLEN "d" 532#define LUA_INTEGER_SCAN "%" LUA_INTEGER_FRMLEN "d"
517#define LUA_INTEGER_FMT "%" LUA_INTEGER_FRMLEN "d" 533#define LUA_INTEGER_FMT "%" LUA_INTEGER_FRMLEN "d"
518#define lua_integer2str(s,n) sprintf((s), LUA_INTEGER_FMT, (n)) 534#define lua_integer2str(s,n) sprintf((s), LUA_INTEGER_FMT, (n))