From ab964ad7c64d0ff355b061ec045a27126b34aa29 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Sat, 12 Apr 2014 11:51:53 -0300 Subject: new macro LUA_MAXUNSIGNED + support for 'short' integers (for tests only) --- luaconf.h | 48 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 36 insertions(+), 12 deletions(-) diff --git a/luaconf.h b/luaconf.h index 68a02fc4..de12366e 100644 --- a/luaconf.h +++ b/luaconf.h @@ -1,5 +1,5 @@ /* -** $Id: luaconf.h,v 1.195 2014/04/09 17:05:11 roberto Exp roberto $ +** $Id: luaconf.h,v 1.196 2014/04/11 19:53:45 roberto Exp roberto $ ** Configuration file for Lua ** See Copyright Notice in lua.h */ @@ -536,9 +536,32 @@ @@ LUA_INTEGER_FMT is the format for writing integers. @@ LUA_MAXINTEGER is the maximum value for a LUA_INTEGER. @@ LUA_MININTEGER is the minimum value for a LUA_INTEGER. +@@ LUA_MAXUNSIGNED is the maximum value for a LUA_UNSIGNED. @@ lua_integer2str converts an integer to a string. */ + +/* The following definitions are good for most cases here */ + +#define LUA_INTEGER_SCAN "%" LUA_INTEGER_FRMLEN "d" +#define LUA_INTEGER_FMT "%" LUA_INTEGER_FRMLEN "d" +#define lua_integer2str(s,n) sprintf((s), LUA_INTEGER_FMT, (n)) + +#define LUA_MAXUNSIGNED (~(LUA_UNSIGNED)0) +#define LUA_MAXINTEGER ((LUA_INTEGER)(LUA_MAXUNSIGNED >> 1)) +#define LUA_MININTEGER ((LUA_INTEGER)~(LUA_MAXUNSIGNED >> 1)) + +#define LUAI_UACINT LUA_INTEGER + +/* +** use LUAI_UACINT here to avoid problems with promotions (which can change +** an unsigned back to a signed type) +*/ +#define LUA_UNSIGNED unsigned LUAI_UACINT + + +/* now the variable definitions */ + #if defined(LUA_INT_INT) /* { int */ #define LUA_INTEGER int @@ -559,23 +582,24 @@ #define LUA_INTEGER_FRMLEN "ll" #endif -#else /* }{ */ +#elif defined(LUA_INT_SHORT) /* }{ short int; for tests */ -#error "numeric integer type not defined" +#define LUA_INTEGER short int +#define LUA_INTEGER_FRMLEN "" -#endif /* } */ +#undef LUA_MAXUNSIGNED +#undef LUAI_UACINT +#undef LUA_INTEGER_SCAN +#define LUA_MAXUNSIGNED 0xffffu +#define LUAI_UACINT int +#define LUA_INTEGER_SCAN "%hd" -#define LUA_INTEGER_SCAN "%" LUA_INTEGER_FRMLEN "d" -#define LUA_INTEGER_FMT "%" LUA_INTEGER_FRMLEN "d" -#define lua_integer2str(s,n) sprintf((s), LUA_INTEGER_FMT, (n)) - -#define LUA_UNSIGNED unsigned LUA_INTEGER +#else /* }{ */ -#define LUA_MAXINTEGER ((LUA_INTEGER)(~(LUA_UNSIGNED)0 >> 1)) -#define LUA_MININTEGER ((LUA_INTEGER)~(~(LUA_UNSIGNED)0 >> 1)) +#error "numeric integer type not defined" -#define LUAI_UACINT LUA_INTEGER +#endif /* } */ /* }================================================================== */ -- cgit v1.2.3-55-g6feb