no need to check "bad conversion number->int;" in luaL_checkversion,

as now Lua does not use tricks for the conversion, but there is a
need to check the sizes of number types, as they can be different
in two modules
This commit is contained in:
Roberto Ierusalimschy 2013-06-27 15:32:33 -03:00
parent 15fdbd26fe
commit 66d046833d
2 changed files with 14 additions and 16 deletions

View File

@ -1,5 +1,5 @@
/*
** $Id: lauxlib.c,v 1.253 2013/06/14 20:46:40 roberto Exp roberto $
** $Id: lauxlib.c,v 1.254 2013/06/25 14:05:26 roberto Exp roberto $
** Auxiliary functions for building Lua libraries
** See Copyright Notice in lua.h
*/
@ -860,7 +860,6 @@ LUALIB_API void luaL_openlib (lua_State *L, const char *libname,
** Returns with only the table at the stack.
*/
LUALIB_API void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup) {
luaL_checkversion(L);
luaL_checkstack(L, nup, "too many upvalues");
for (; l->name != NULL; l++) { /* fill the table with given functions */
int i;
@ -955,20 +954,15 @@ LUALIB_API lua_State *luaL_newstate (void) {
}
LUALIB_API void luaL_checkversion_ (lua_State *L, lua_Number ver) {
LUALIB_API void luaL_checkversion_ (lua_State *L, int ver, size_t sz) {
const lua_Number *v = lua_version(L);
if (v != lua_version(NULL))
luaL_error(L, "multiple Lua VMs detected");
else if (*v != ver)
luaL_error(L, "version mismatch: app. needs %f, Lua core provides %f",
luaL_error(L, "version mismatch: app. needs %d, Lua core provides %f",
ver, *v);
/* check conversions number -> integer types */
lua_pushnumber(L, -(lua_Number)0x1234);
lua_pushnumber(L, (lua_Number)0x4321);
if (lua_tointeger(L, -2) != -0x1234 ||
lua_tounsigned(L, -1) != (lua_Unsigned)0x4321)
luaL_error(L, "bad conversion number->int;"
" must recompile Lua with proper settings");
lua_pop(L, 2);
/* check numeric types */
if (sz != LUAL_NUMSIZES)
luaL_error(L, "core and library have incompatible numeric types");
}

View File

@ -1,5 +1,5 @@
/*
** $Id: lauxlib.h,v 1.120 2011/11/29 15:55:08 roberto Exp roberto $
** $Id: lauxlib.h,v 1.121 2013/06/25 14:05:26 roberto Exp roberto $
** Auxiliary functions for building Lua libraries
** See Copyright Notice in lua.h
*/
@ -26,8 +26,11 @@ typedef struct luaL_Reg {
} luaL_Reg;
LUALIB_API void (luaL_checkversion_) (lua_State *L, lua_Number ver);
#define luaL_checkversion(L) luaL_checkversion_(L, LUA_VERSION_NUM)
#define LUAL_NUMSIZES (sizeof(lua_Integer)*16 + sizeof(lua_Number))
LUALIB_API void (luaL_checkversion_) (lua_State *L, int ver, size_t sz);
#define luaL_checkversion(L) \
luaL_checkversion_(L, LUA_VERSION_NUM, LUAL_NUMSIZES)
LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e);
LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e);
@ -108,7 +111,8 @@ LUALIB_API void (luaL_requiref) (lua_State *L, const char *modname,
#define luaL_newlibtable(L,l) \
lua_createtable(L, 0, sizeof(l)/sizeof((l)[0]) - 1)
#define luaL_newlib(L,l) (luaL_newlibtable(L,l), luaL_setfuncs(L,l,0))
#define luaL_newlib(L,l) \
(luaL_checkversion(L), luaL_newlibtable(L,l), luaL_setfuncs(L,l,0))
#define luaL_argcheck(L, cond,numarg,extramsg) \
((void)((cond) || luaL_argerror(L, (numarg), (extramsg))))