From: John L. <jr...@us...> - 2009-03-24 04:15:37
|
Update of /cvsroot/wxlua/wxLua/modules/wxlua/src In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv10993/wxLua/modules/wxlua/src Modified Files: wxlstate.cpp Log Message: Fixed double -> unsigned integer using all 32 bits conversion for wxSTC_MASK_FOLDERS problem, thanks to Andre Arpin. Index: wxlstate.cpp =================================================================== RCS file: /cvsroot/wxlua/wxLua/modules/wxlua/src/wxlstate.cpp,v retrieving revision 1.178 retrieving revision 1.179 diff -C2 -d -r1.178 -r1.179 *** wxlstate.cpp 9 Dec 2008 18:19:24 -0000 1.178 --- wxlstate.cpp 24 Mar 2009 04:15:32 -0000 1.179 *************** *** 1425,1428 **** --- 1425,1444 ---- return (num != 0); } + long LUACALL wxlua_getenumtype(lua_State *L, int stack_idx) + { + int l_type = lua_type(L, stack_idx); + + if (!wxlua_iswxluatype(l_type, WXLUA_TINTEGER)) + wxlua_argerror(L, stack_idx, wxT("an 'integer enum'")); + + // we don't allow bool or round, enums must strictly be integers + double value = lua_tonumber(L, stack_idx); + long long_value = (long)value; + + if (value != long_value) + wxlua_argerror(L, stack_idx, wxT("an 'integer enum'")); + + return long_value; + } long LUACALL wxlua_getintegertype(lua_State *L, int stack_idx) { *************** *** 1439,1446 **** value = lua_tonumber(L, stack_idx); ! if (value != (long)value) wxlua_argerror(L, stack_idx, wxT("an 'integer'")); ! return (long)value; } double LUACALL wxlua_getnumbertype(lua_State *L, int stack_idx) --- 1455,1485 ---- value = lua_tonumber(L, stack_idx); ! long long_value = (long)value; ! ! if (value != long_value) wxlua_argerror(L, stack_idx, wxT("an 'integer'")); ! return long_value; ! } ! unsigned long LUACALL wxlua_getuintegertype(lua_State *L, int stack_idx) ! { ! int l_type = lua_type(L, stack_idx); ! ! if (!wxlua_iswxluatype(l_type, WXLUA_TINTEGER)) ! wxlua_argerror(L, stack_idx, wxT("an 'unsigned integer'")); ! ! double value = 0; ! // we also allow bool = 1/0 which Lua evaluates to nil in lua_tonumber ! if (l_type == LUA_TBOOLEAN) ! value = lua_toboolean(L, stack_idx) ? 1 : 0; ! else ! value = lua_tonumber(L, stack_idx); ! ! unsigned long ulong_value = (unsigned long)value; ! ! if ((value != ulong_value) || (value < 0)) ! wxlua_argerror(L, stack_idx, wxT("an 'unsigned integer'")); ! ! return ulong_value; } double LUACALL wxlua_getnumbertype(lua_State *L, int stack_idx) *************** *** 4044,4048 **** #include <limits.h> ! //#include "bit_limits.h" // wxLua: directly include the file here #define BITLIB_FLOAT_BITS 53 #define BITLIB_FLOAT_MAX 0xfffffffffffffL --- 4083,4087 ---- #include <limits.h> ! //#include "bit_limits.h" #define BITLIB_FLOAT_BITS 53 #define BITLIB_FLOAT_MAX 0xfffffffffffffL *************** *** 4059,4063 **** #ifndef SIZE_MAX ! #define SIZE_MAX ((size_t)-1) // wxLua: define this if it's not already #endif --- 4098,4102 ---- #ifndef SIZE_MAX ! #define SIZE_MAX ((size_t)-1) #endif *************** *** 4086,4090 **** ! #define BUILTIN_CAST // wxLua: this is probably good enough for us /* Define TOBIT to get a bit value */ --- 4125,4129 ---- ! #define BUILTIN_CAST /* Define TOBIT to get a bit value */ |