/*** $Id: luaconf.h,v 1.238 2014/12/29 13:27:55 roberto Exp $** Configuration file for Lua** See Copyright Notice in lua.h*/ #ifndef luaconf_h#define luaconf_h #include <limits.h>#include <stddef.h> /*** ===================================================================** Search for "@@" to find all configurable definitions.** ===================================================================*/ /*** {====================================================================** System Configuration: macros to adapt (if needed) Lua to some** particular platform, for instance compiling it with 32-bit numbers or** restricting it to C89.** =====================================================================*/ /*@@ LUA_32BITS enables Lua with 32-bit integers and 32-bit floats. You** can also define LUA_32BITS in the make file, but changing here you** ensure that all software connected to Lua will be compiled with the** same configuration.*//* #define LUA_32BITS */ /*@@ LUA_USE_C89 controls the use of non-ISO-C89 features.** Define it if you want Lua to avoid the use of a few C99 features** or Windows-specific features on Windows.*//* #define LUA_USE_C89 */ /*** By default, Lua on Windows use (some) specific Windows features*/#if !defined(LUA_USE_C89) && defined(_WIN32) && !defined(_WIN32_WCE)#define LUA_USE_WINDOWS /* enable goodies for regular Windows */#endif #if defined(LUA_USE_WINDOWS)#define LUA_DL_DLL /* enable support for DLL */#define LUA_USE_C89 /* broadly, Windows is C89 */#endif #if defined(LUA_USE_LINUX)#define LUA_USE_POSIX#define LUA_USE_DLOPEN /* needs an extra library: -ldl */#define LUA_USE_READLINE /* needs some extra libraries */#endif #if defined(LUA_USE_MACOSX)#define LUA_USE_POSIX#define LUA_USE_DLOPEN /* MacOS does not need -ldl */#define LUA_USE_READLINE /* needs an extra library: -lreadline */#endif /*@@ LUA_C89_NUMBERS ensures that Lua uses the largest types available for** C89 ('long' and 'double'); Windows always has '__int64', so it does** not need to use this case.*/#if defined(LUA_USE_C89) && !defined(LUA_USE_WINDOWS)#define LUA_C89_NUMBERS#endif /*@@ LUAI_BITSINT defines the (minimum) number of bits in an 'int'.*//* avoid undefined shifts */#if ((INT_MAX >> 15) >> 15) >= 1#define LUAI_BITSINT 32#else/* 'int' always must have at least 16 bits */#define LUAI_BITSINT 16#endif /*@@ LUA_INT_INT / LUA_INT_LONG / LUA_INT_LONGLONG defines the type for** Lua integers.@@ LUA_REAL_FLOAT / LUA_REAL_DOUBLE / LUA_REAL_LONGDOUBLE defines** the type for Lua floats.** Lua should work fine with any mix of these options (if supported** by your C compiler). The usual configurations are 64-bit integers** and 'double' (the default), 32-bit integers and 'float' (for** restricted platforms), and 'long'/'double' (for C compilers not** compliant with C99, which may not have support for 'long long').*/ #if defined(LUA_32BITS) /* { *//*** 32-bit integers and 'float'*/#if LUAI_BITSINT >= 32 /* use 'int' if big enough */#define LUA_INT_INT#else /* otherwise use 'long' */#define LUA_INT_LONG#endif#define LUA_REAL_FLOAT #elif defined(LUA_C89_NUMBERS) /* }{ *//*** largest types available for C89 ('long' and 'double')*/#define LUA_INT_LONG#define LUA_REAL_DOUBLE #else /* }{ *//*** default configuration for 64-bit Lua ('long long' and 'double')*/#define LUA_INT_LONGLONG#define LUA_REAL_DOUBLE #endif /* } */ /* }================================================================== */ /*** {==================================================================** Configuration for Paths.** ===================================================================*/ /*@@ LUA_PATH_DEFAULT is the default path that Lua uses to look for** Lua libraries.@@ LUA_CPATH_DEFAULT is the default path that Lua uses to look for** C libraries.** CHANGE them if your machine has a non-conventional directory** hierarchy or if you want to install your libraries in** non-conventional directories.*/#define LUA_VDIR LUA_VERSION_MAJOR "." LUA_VERSION_MINOR#if defined(_WIN32) /* { *//*** In Windows, any exclamation mark ('!') in the path is replaced by the** path of the directory of the executable file of the current process.*/#define LUA_LDIR "!\\lua\\"#define LUA_CDIR "!\\"#define LUA_SHRDIR "!\\..\\share\\lua\\" LUA_VDIR "\\"#define LUA_PATH_DEFAULT \ LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" \ LUA_CDIR"?.lua;" LUA_CDIR"?\\init.lua;" \ LUA_SHRDIR"?.lua;" LUA_SHRDIR"?\\init.lua;" \ ".\\?.lua;" ".\\?\\init.lua"#define LUA_CPATH_DEFAULT \ LUA_CDIR"?.dll;" \ LUA_CDIR"..\\lib\\lua\\" LUA_VDIR "\\?.dll;" \ LUA_CDIR"loadall.dll;" ".\\?.dll" #else /* }{ */ #define LUA_ROOT "/usr/local/"#define LUA_LDIR LUA_ROOT "share/lua/" LUA_VDIR "/"#define LUA_CDIR LUA_ROOT "lib/lua/" LUA_VDIR "/"#define LUA_PATH_DEFAULT \ LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua;" \ "./?.lua;" "./?/init.lua"#define LUA_CPATH_DEFAULT \ LUA_CDIR"?.so;" LUA_CDIR"loadall.so;" "./?.so"#endif /* } */ /*@@ LUA_DIRSEP is the directory separator (for submodules).** CHANGE it if your machine does not use "/" as the directory separator** and is not Windows. (On Windows Lua automatically uses "\".)*/#if defined(_WIN32)#define LUA_DIRSEP "\\"#else#define LUA_DIRSEP "/"#endif /* }================================================================== */ /*** {==================================================================** Marks for exported symbols in the C code** ===================================================================*/ /*@@ LUA_API is a mark for all core API functions.@@ LUALIB_API is a mark for all auxiliary library functions.@@ LUAMOD_API is a mark for all standard library opening functions.** CHANGE them if you need to define those functions in some special way.** For instance, if you want to create one Windows DLL with the core and** the libraries, you may want to use the following definition (define** LUA_BUILD_AS_DLL to get it).*/#if defined(LUA_BUILD_AS_DLL) /* { */ #if defined(LUA_CORE) || defined(LUA_LIB) /* { */#define LUA_API __declspec(dllexport)#else /* }{ */#define LUA_API __declspec(dllimport)#endif /* } */ #else /* }{ */ #define LUA_API extern #endif /* } */ /* more often than not the libs go together with the core */#define LUALIB_API LUA_API#define LUAMOD_API LUALIB_API /*@@ LUAI_FUNC is a mark for all extern functions that are not to be** exported to outside modules.@@ LUAI_DDEF and LUAI_DDEC are marks for all extern (const) variables** that are not to be exported to outside modules (LUAI_DDEF for** definitions and LUAI_DDEC for declarations).** CHANGE them if you need to mark them in some special way. Elf/gcc** (versions 3.2 and later) mark them as "hidden" to optimize access** when Lua is compiled as a shared library. Not all elf targets support** this attribute. Unfortunately, gcc does not offer a way to check** whether the target offers that support, and those without support** give a warning about it. To avoid these warnings, change to the** default definition.*/#if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \ defined(__ELF__) /* { */#define LUAI_FUNC __attribute__((visibility("hidden"))) extern#else /* }{ */#define LUAI_FUNC extern#endif /* } */ #define LUAI_DDEC LUAI_FUNC#define LUAI_DDEF /* empty */ /* }================================================================== */ /*** {==================================================================** Compatibility with previous versions** ===================================================================*/ /*@@ LUA_COMPAT_5_2 controls other macros for compatibility with Lua 5.2.@@ LUA_COMPAT_5_1 controls other macros for compatibility with Lua 5.1.** You can define it to get all options, or change specific options** to fit your specific needs.*/#if defined(LUA_COMPAT_5_2) /* { */ /*@@ LUA_COMPAT_MATHLIB controls the presence of several deprecated** functions in the mathematical library.*/#define LUA_COMPAT_MATHLIB /*@@ LUA_COMPAT_BITLIB controls the presence of library 'bit32'.*/#define LUA_COMPAT_BITLIB /*@@ LUA_COMPAT_IPAIRS controls the effectiveness of the __ipairs metamethod.*/#define LUA_COMPAT_IPAIRS /*@@ LUA_COMPAT_APIINTCASTS controls the presence of macros for** manipulating other integer types (lua_pushunsigned, lua_tounsigned,** luaL_checkint, luaL_checklong, etc.)*/#define LUA_COMPAT_APIINTCASTS /*@@ LUA_COMPAT_FLOATSTRING makes Lua format integral floats without a@@ a float mark ('.0').** This macro is not on by default even in compatibility mode,** because this is not really an incompatibility.*//* #define LUA_COMPAT_FLOATSTRING */ #endif /* } */ #if defined(LUA_COMPAT_5_1) /* { */ /*@@ LUA_COMPAT_UNPACK controls the presence of global 'unpack'.** You can replace it with 'table.unpack'.*/#define LUA_COMPAT_UNPACK /*@@ LUA_COMPAT_LOADERS controls the presence of table 'package.loaders'.** You can replace it with 'package.searchers'.*/#define LUA_COMPAT_LOADERS /*@@ macro 'lua_cpcall' emulates deprecated function lua_cpcall.** You can call your C function directly (with light C functions).*/#define lua_cpcall(L,f,u) \ (lua_pushcfunction(L, (f)), \ lua_pushlightuserdata(L,(u)), \ lua_pcall(L,1,0,0)) /*@@ LUA_COMPAT_LOG10 defines the function 'log10' in the math library.** You can rewrite 'log10(x)' as 'log(x, 10)'.*/#define LUA_COMPAT_LOG10 /*@@ LUA_COMPAT_LOADSTRING defines the function 'loadstring' in the base** library. You can rewrite 'loadstring(s)' as 'load(s)'.*/#define LUA_COMPAT_LOADSTRING /*@@ LUA_COMPAT_MAXN defines the function 'maxn' in the table library.*/#define LUA_COMPAT_MAXN /*@@ The following macros supply trivial compatibility for some** changes in the API. The macros themselves document how to** change your code to avoid using them.*/#define lua_strlen(L,i) lua_rawlen(L, (i)) #define lua_objlen(L,i) lua_rawlen(L, (i)) #define lua_equal(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPEQ)#define lua_lessthan(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPLT) /*@@ LUA_COMPAT_MODULE controls compatibility with previous** module functions 'module' (Lua) and 'luaL_register' (C).*/#define LUA_COMPAT_MODULE #endif /* } */ /* }================================================================== */ /*** {==================================================================** Configuration for Numbers.** Change these definitions if no predefined LUA_REAL_* / LUA_INT_*** satisfy your needs.** ===================================================================*/ /*@@ LUA_NUMBER is the floating-point type used by Lua.**@@ LUAI_UACNUMBER is the result of an 'usual argument conversion'@@ over a floating number.**@@ LUA_NUMBER_FRMLEN is the length modifier for writing floats.@@ LUA_NUMBER_FMT is the format for writing floats.@@ lua_number2str converts a float to a string.**@@ l_mathop allows the addition of an 'l' or 'f' to all math operations.**@@ lua_str2number converts a decimal numeric string to a number.*/ #if defined(LUA_REAL_FLOAT) /* { single float */ #define LUA_NUMBER float #define LUAI_UACNUMBER double #define LUA_NUMBER_FRMLEN ""#define LUA_NUMBER_FMT "%.7g" #define l_mathop(op) op##f #define lua_str2number(s,p) strtof((s), (p)) #elif defined(LUA_REAL_LONGDOUBLE) /* }{ long double */ #define LUA_NUMBER long double #define LUAI_UACNUMBER long double #define LUA_NUMBER_FRMLEN "L"#define LUA_NUMBER_FMT "%.19Lg" #define l_mathop(op) op##l #define lua_str2number(s,p) strtold((s), (p)) #elif defined(LUA_REAL_DOUBLE) /* }{ double */ #define LUA_NUMBER double #define LUAI_UACNUMBER double #define LUA_NUMBER_FRMLEN ""#define LUA_NUMBER_FMT "%.14g" #define l_mathop(op) op #define lua_str2number(s,p) strtod((s), (p)) #else /* }{ */ #error "numeric real type not defined" #endif /* } */ #define l_floor(x) (l_mathop(floor)(x)) #define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n)) /*@@ lua_numbertointeger converts a float number to an integer, or** returns 0 if float is not within the range of a lua_Integer.** (The range comparisons are tricky because of rounding. The tests** here assume a two-complement representation, where MININTEGER always** has an exact representation as a float; MAXINTEGER may not have one,** and therefore its conversion to float may have an ill-defined value.)*/#define lua_numbertointeger(n,p) \ ((n) >= (LUA_NUMBER)(LUA_MININTEGER) && \ (n) < -(LUA_NUMBER)(LUA_MININTEGER) && \ (*(p) = (LUA_INTEGER)(n), 1)) /*@@ The luai_num* macros define the primitive operations over numbers.** They should work for any size of floating numbers.*/ /* the following operations need the math library */#if defined(lobject_c) || defined(lvm_c)#include <math.h> /* floor division (defined as 'floor(a/b)') */#define luai_numidiv(L,a,b) ((void)L, l_mathop(floor)(luai_numdiv(L,a,b))) /*** module: defined as 'a - floor(a/b)*b'; the previous definition gives** NaN when 'b' is huge, but the result should be 'a'. 'fmod' gives the** result of 'a - trunc(a/b)*b', and therefore must be corrected when** 'trunc(a/b) ~= floor(a/b)'. That happens when the division has a** non-integer negative result, which is equivalent to the test below*/#define luai_nummod(L,a,b,m) \ { (m) = l_mathop(fmod)(a,b); if ((m)*(b) < 0) (m) += (b); } /* exponentiation */#define luai_numpow(L,a,b) ((void)L, l_mathop(pow)(a,b)) #endif /* these are quite standard operations */#if defined(LUA_CORE)#define luai_numadd(L,a,b) ((a)+(b))#define luai_numsub(L,a,b) ((a)-(b))#define luai_nummul(L,a,b) ((a)*(b))Lines 1–500 of 735. Load more
/* ** $Id: luaconf.h,v 1.238 2014/12/29 13:27:55 roberto Exp $ ** Configuration file for Lua ** See Copyright Notice in lua.h */ #ifndef luaconf_h #define luaconf_h #include <limits.h> #include <stddef.h> /* ** =================================================================== ** Search for "@@" to find all configurable definitions. ** =================================================================== */ /* ** {==================================================================== ** System Configuration: macros to adapt (if needed) Lua to some ** particular platform, for instance compiling it with 32-bit numbers or ** restricting it to C89. ** ===================================================================== */ /* @@ LUA_32BITS enables Lua with 32-bit integers and 32-bit floats. You ** can also define LUA_32BITS in the make file, but changing here you ** ensure that all software connected to Lua will be compiled with the ** same configuration. */ /* #define LUA_32BITS */ /* @@ LUA_USE_C89 controls the use of non-ISO-C89 features. ** Define it if you want Lua to avoid the use of a few C99 features ** or Windows-specific features on Windows. */ /* #define LUA_USE_C89 */ /* ** By default, Lua on Windows use (some) specific Windows features */ #if !defined(LUA_USE_C89) && defined(_WIN32) && !defined(_WIN32_WCE) #define LUA_USE_WINDOWS /* enable goodies for regular Windows */ #endif #if defined(LUA_USE_WINDOWS) #define LUA_DL_DLL /* enable support for DLL */ #define LUA_USE_C89 /* broadly, Windows is C89 */ #endif #if defined(LUA_USE_LINUX) #define LUA_USE_POSIX #define LUA_USE_DLOPEN /* needs an extra library: -ldl */ #define LUA_USE_READLINE /* needs some extra libraries */ #endif #if defined(LUA_USE_MACOSX) #define LUA_USE_POSIX #define LUA_USE_DLOPEN /* MacOS does not need -ldl */ #define LUA_USE_READLINE /* needs an extra library: -lreadline */ #endif /* @@ LUA_C89_NUMBERS ensures that Lua uses the largest types available for ** C89 ('long' and 'double'); Windows always has '__int64', so it does ** not need to use this case. */ #if defined(LUA_USE_C89) && !defined(LUA_USE_WINDOWS) #define LUA_C89_NUMBERS #endif /* @@ LUAI_BITSINT defines the (minimum) number of bits in an 'int'. */ /* avoid undefined shifts */ #if ((INT_MAX >> 15) >> 15) >= 1 #define LUAI_BITSINT 32 #else /* 'int' always must have at least 16 bits */ #define LUAI_BITSINT 16 #endif /* @@ LUA_INT_INT / LUA_INT_LONG / LUA_INT_LONGLONG defines the type for ** Lua integers. @@ LUA_REAL_FLOAT / LUA_REAL_DOUBLE / LUA_REAL_LONGDOUBLE defines ** the type for Lua floats. ** Lua should work fine with any mix of these options (if supported ** by your C compiler). The usual configurations are 64-bit integers ** and 'double' (the default), 32-bit integers and 'float' (for ** restricted platforms), and 'long'/'double' (for C compilers not ** compliant with C99, which may not have support for 'long long'). */ #if defined(LUA_32BITS) /* { */ /* ** 32-bit integers and 'float' */ #if LUAI_BITSINT >= 32 /* use 'int' if big enough */ #define LUA_INT_INT #else /* otherwise use 'long' */ #define LUA_INT_LONG #endif #define LUA_REAL_FLOAT #elif defined(LUA_C89_NUMBERS) /* }{ */ /* ** largest types available for C89 ('long' and 'double') */ #define LUA_INT_LONG #define LUA_REAL_DOUBLE #else /* }{ */ /* ** default configuration for 64-bit Lua ('long long' and 'double') */ #define LUA_INT_LONGLONG #define LUA_REAL_DOUBLE #endif /* } */ /* }================================================================== */ /* ** {================================================================== ** Configuration for Paths. ** =================================================================== */ /* @@ LUA_PATH_DEFAULT is the default path that Lua uses to look for ** Lua libraries. @@ LUA_CPATH_DEFAULT is the default path that Lua uses to look for ** C libraries. ** CHANGE them if your machine has a non-conventional directory ** hierarchy or if you want to install your libraries in ** non-conventional directories. */ #define LUA_VDIR LUA_VERSION_MAJOR "." LUA_VERSION_MINOR #if defined(_WIN32) /* { */ /* ** In Windows, any exclamation mark ('!') in the path is replaced by the ** path of the directory of the executable file of the current process. */ #define LUA_LDIR "!\\lua\\" #define LUA_CDIR "!\\" #define LUA_SHRDIR "!\\..\\share\\lua\\" LUA_VDIR "\\" #define LUA_PATH_DEFAULT \ LUA_LDIR"?.lua;" LUA_LDIR"?\\init.lua;" \ LUA_CDIR"?.lua;" LUA_CDIR"?\\init.lua;" \ LUA_SHRDIR"?.lua;" LUA_SHRDIR"?\\init.lua;" \ ".\\?.lua;" ".\\?\\init.lua" #define LUA_CPATH_DEFAULT \ LUA_CDIR"?.dll;" \ LUA_CDIR"..\\lib\\lua\\" LUA_VDIR "\\?.dll;" \ LUA_CDIR"loadall.dll;" ".\\?.dll" #else /* }{ */ #define LUA_ROOT "/usr/local/" #define LUA_LDIR LUA_ROOT "share/lua/" LUA_VDIR "/" #define LUA_CDIR LUA_ROOT "lib/lua/" LUA_VDIR "/" #define LUA_PATH_DEFAULT \ LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua;" \ "./?.lua;" "./?/init.lua" #define LUA_CPATH_DEFAULT \ LUA_CDIR"?.so;" LUA_CDIR"loadall.so;" "./?.so" #endif /* } */ /* @@ LUA_DIRSEP is the directory separator (for submodules). ** CHANGE it if your machine does not use "/" as the directory separator ** and is not Windows. (On Windows Lua automatically uses "\".) */ #if defined(_WIN32) #define LUA_DIRSEP "\\" #else #define LUA_DIRSEP "/" #endif /* }================================================================== */ /* ** {================================================================== ** Marks for exported symbols in the C code ** =================================================================== */ /* @@ LUA_API is a mark for all core API functions. @@ LUALIB_API is a mark for all auxiliary library functions. @@ LUAMOD_API is a mark for all standard library opening functions. ** CHANGE them if you need to define those functions in some special way. ** For instance, if you want to create one Windows DLL with the core and ** the libraries, you may want to use the following definition (define ** LUA_BUILD_AS_DLL to get it). */ #if defined(LUA_BUILD_AS_DLL) /* { */ #if defined(LUA_CORE) || defined(LUA_LIB) /* { */ #define LUA_API __declspec(dllexport) #else /* }{ */ #define LUA_API __declspec(dllimport) #endif /* } */ #else /* }{ */ #define LUA_API extern #endif /* } */ /* more often than not the libs go together with the core */ #define LUALIB_API LUA_API #define LUAMOD_API LUALIB_API /* @@ LUAI_FUNC is a mark for all extern functions that are not to be ** exported to outside modules. @@ LUAI_DDEF and LUAI_DDEC are marks for all extern (const) variables ** that are not to be exported to outside modules (LUAI_DDEF for ** definitions and LUAI_DDEC for declarations). ** CHANGE them if you need to mark them in some special way. Elf/gcc ** (versions 3.2 and later) mark them as "hidden" to optimize access ** when Lua is compiled as a shared library. Not all elf targets support ** this attribute. Unfortunately, gcc does not offer a way to check ** whether the target offers that support, and those without support ** give a warning about it. To avoid these warnings, change to the ** default definition. */ #if defined(__GNUC__) && ((__GNUC__*100 + __GNUC_MINOR__) >= 302) && \ defined(__ELF__) /* { */ #define LUAI_FUNC __attribute__((visibility("hidden"))) extern #else /* }{ */ #define LUAI_FUNC extern #endif /* } */ #define LUAI_DDEC LUAI_FUNC #define LUAI_DDEF /* empty */ /* }================================================================== */ /* ** {================================================================== ** Compatibility with previous versions ** =================================================================== */ /* @@ LUA_COMPAT_5_2 controls other macros for compatibility with Lua 5.2. @@ LUA_COMPAT_5_1 controls other macros for compatibility with Lua 5.1. ** You can define it to get all options, or change specific options ** to fit your specific needs. */ #if defined(LUA_COMPAT_5_2) /* { */ /* @@ LUA_COMPAT_MATHLIB controls the presence of several deprecated ** functions in the mathematical library. */ #define LUA_COMPAT_MATHLIB /* @@ LUA_COMPAT_BITLIB controls the presence of library 'bit32'. */ #define LUA_COMPAT_BITLIB /* @@ LUA_COMPAT_IPAIRS controls the effectiveness of the __ipairs metamethod. */ #define LUA_COMPAT_IPAIRS /* @@ LUA_COMPAT_APIINTCASTS controls the presence of macros for ** manipulating other integer types (lua_pushunsigned, lua_tounsigned, ** luaL_checkint, luaL_checklong, etc.) */ #define LUA_COMPAT_APIINTCASTS /* @@ LUA_COMPAT_FLOATSTRING makes Lua format integral floats without a @@ a float mark ('.0'). ** This macro is not on by default even in compatibility mode, ** because this is not really an incompatibility. */ /* #define LUA_COMPAT_FLOATSTRING */ #endif /* } */ #if defined(LUA_COMPAT_5_1) /* { */ /* @@ LUA_COMPAT_UNPACK controls the presence of global 'unpack'. ** You can replace it with 'table.unpack'. */ #define LUA_COMPAT_UNPACK /* @@ LUA_COMPAT_LOADERS controls the presence of table 'package.loaders'. ** You can replace it with 'package.searchers'. */ #define LUA_COMPAT_LOADERS /* @@ macro 'lua_cpcall' emulates deprecated function lua_cpcall. ** You can call your C function directly (with light C functions). */ #define lua_cpcall(L,f,u) \ (lua_pushcfunction(L, (f)), \ lua_pushlightuserdata(L,(u)), \ lua_pcall(L,1,0,0)) /* @@ LUA_COMPAT_LOG10 defines the function 'log10' in the math library. ** You can rewrite 'log10(x)' as 'log(x, 10)'. */ #define LUA_COMPAT_LOG10 /* @@ LUA_COMPAT_LOADSTRING defines the function 'loadstring' in the base ** library. You can rewrite 'loadstring(s)' as 'load(s)'. */ #define LUA_COMPAT_LOADSTRING /* @@ LUA_COMPAT_MAXN defines the function 'maxn' in the table library. */ #define LUA_COMPAT_MAXN /* @@ The following macros supply trivial compatibility for some ** changes in the API. The macros themselves document how to ** change your code to avoid using them. */ #define lua_strlen(L,i) lua_rawlen(L, (i)) #define lua_objlen(L,i) lua_rawlen(L, (i)) #define lua_equal(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPEQ) #define lua_lessthan(L,idx1,idx2) lua_compare(L,(idx1),(idx2),LUA_OPLT) /* @@ LUA_COMPAT_MODULE controls compatibility with previous ** module functions 'module' (Lua) and 'luaL_register' (C). */ #define LUA_COMPAT_MODULE #endif /* } */ /* }================================================================== */ /* ** {================================================================== ** Configuration for Numbers. ** Change these definitions if no predefined LUA_REAL_* / LUA_INT_* ** satisfy your needs. ** =================================================================== */ /* @@ LUA_NUMBER is the floating-point type used by Lua. ** @@ LUAI_UACNUMBER is the result of an 'usual argument conversion' @@ over a floating number. ** @@ LUA_NUMBER_FRMLEN is the length modifier for writing floats. @@ LUA_NUMBER_FMT is the format for writing floats. @@ lua_number2str converts a float to a string. ** @@ l_mathop allows the addition of an 'l' or 'f' to all math operations. ** @@ lua_str2number converts a decimal numeric string to a number. */ #if defined(LUA_REAL_FLOAT) /* { single float */ #define LUA_NUMBER float #define LUAI_UACNUMBER double #define LUA_NUMBER_FRMLEN "" #define LUA_NUMBER_FMT "%.7g" #define l_mathop(op) op##f #define lua_str2number(s,p) strtof((s), (p)) #elif defined(LUA_REAL_LONGDOUBLE) /* }{ long double */ #define LUA_NUMBER long double #define LUAI_UACNUMBER long double #define LUA_NUMBER_FRMLEN "L" #define LUA_NUMBER_FMT "%.19Lg" #define l_mathop(op) op##l #define lua_str2number(s,p) strtold((s), (p)) #elif defined(LUA_REAL_DOUBLE) /* }{ double */ #define LUA_NUMBER double #define LUAI_UACNUMBER double #define LUA_NUMBER_FRMLEN "" #define LUA_NUMBER_FMT "%.14g" #define l_mathop(op) op #define lua_str2number(s,p) strtod((s), (p)) #else /* }{ */ #error "numeric real type not defined" #endif /* } */ #define l_floor(x) (l_mathop(floor)(x)) #define lua_number2str(s,n) sprintf((s), LUA_NUMBER_FMT, (n)) /* @@ lua_numbertointeger converts a float number to an integer, or ** returns 0 if float is not within the range of a lua_Integer. ** (The range comparisons are tricky because of rounding. The tests ** here assume a two-complement representation, where MININTEGER always ** has an exact representation as a float; MAXINTEGER may not have one, ** and therefore its conversion to float may have an ill-defined value.) */ #define lua_numbertointeger(n,p) \ ((n) >= (LUA_NUMBER)(LUA_MININTEGER) && \ (n) < -(LUA_NUMBER)(LUA_MININTEGER) && \ (*(p) = (LUA_INTEGER)(n), 1)) /* @@ The luai_num* macros define the primitive operations over numbers. ** They should work for any size of floating numbers. */ /* the following operations need the math library */ #if defined(lobject_c) || defined(lvm_c) #include <math.h> /* floor division (defined as 'floor(a/b)') */ #define luai_numidiv(L,a,b) ((void)L, l_mathop(floor)(luai_numdiv(L,a,b))) /* ** module: defined as 'a - floor(a/b)*b'; the previous definition gives ** NaN when 'b' is huge, but the result should be 'a'. 'fmod' gives the ** result of 'a - trunc(a/b)*b', and therefore must be corrected when ** 'trunc(a/b) ~= floor(a/b)'. That happens when the division has a ** non-integer negative result, which is equivalent to the test below */ #define luai_nummod(L,a,b,m) \ { (m) = l_mathop(fmod)(a,b); if ((m)*(b) < 0) (m) += (b); } /* exponentiation */ #define luai_numpow(L,a,b) ((void)L, l_mathop(pow)(a,b)) #endif /* these are quite standard operations */ #if defined(LUA_CORE) #define luai_numadd(L,a,b) ((a)+(b)) #define luai_numsub(L,a,b) ((a)-(b)) #define luai_nummul(L,a,b) ((a)*(b))