diff --git a/Plugins/Android/libs/armeabi-v7a/libtolua.so b/Plugins/Android/libs/armeabi-v7a/libtolua.so
index 3542e4a6..4d954e3d 100644
Binary files a/Plugins/Android/libs/armeabi-v7a/libtolua.so and b/Plugins/Android/libs/armeabi-v7a/libtolua.so differ
diff --git a/Plugins/Android/libs/x86/libtolua.so b/Plugins/Android/libs/x86/libtolua.so
index 502db93e..1aa95bb0 100644
Binary files a/Plugins/Android/libs/x86/libtolua.so and b/Plugins/Android/libs/x86/libtolua.so differ
diff --git a/Plugins/iOS/libtolua.a b/Plugins/iOS/libtolua.a
index 17772907..6cac6cbd 100644
Binary files a/Plugins/iOS/libtolua.a and b/Plugins/iOS/libtolua.a differ
diff --git a/Plugins/tolua.bundle/Contents/Info.plist b/Plugins/tolua.bundle/Contents/Info.plist
index 9980e57a..d87fb49a 100644
--- a/Plugins/tolua.bundle/Contents/Info.plist
+++ b/Plugins/tolua.bundle/Contents/Info.plist
@@ -59,6 +59,6 @@
DTXcodeBuild
8E2002
NSHumanReadableCopyright
- Copyright © 2013 topameng. All rights reserved.
+ Copyright © 2014 topameng. All rights reserved.
diff --git a/Plugins/tolua.bundle/Contents/MacOS/tolua b/Plugins/tolua.bundle/Contents/MacOS/tolua
index 0ef23e0f..e577af2a 100644
Binary files a/Plugins/tolua.bundle/Contents/MacOS/tolua and b/Plugins/tolua.bundle/Contents/MacOS/tolua differ
diff --git a/Plugins/x86/tolua.dll b/Plugins/x86/tolua.dll
index d22d4696..87fec5ca 100644
Binary files a/Plugins/x86/tolua.dll and b/Plugins/x86/tolua.dll differ
diff --git a/Plugins/x86_64/tolua.dll b/Plugins/x86_64/tolua.dll
index 14f77839..8c888e90 100644
Binary files a/Plugins/x86_64/tolua.dll and b/Plugins/x86_64/tolua.dll differ
diff --git a/int64.c b/int64.c
index 3fcf308f..551beefc 100644
--- a/int64.c
+++ b/int64.c
@@ -91,17 +91,17 @@ LUALIB_API bool tolua_isint64(lua_State* L, int pos)
LUALIB_API void tolua_pushint64(lua_State* L, int64_t n)
{
- if (toluaflags & FLAG_INT64)
+ /*if (toluaflags & FLAG_INT64)
{
lua_pushinteger(L, (lua_Integer)n);
}
else
- {
+ {*/
int64_t* p = (int64_t*)lua_newuserdata(L, sizeof(int64_t));
*p = n;
lua_getref(L, LUA_RIDX_INT64);
lua_setmetatable(L, -2);
- }
+ //}
}
//转换一个字符串为 int64
@@ -211,6 +211,12 @@ static int _int64div(lua_State* L)
{
int64_t lhs = tolua_checkint64(L, 1);
int64_t rhs = tolua_checkint64(L, 2);
+
+ if (rhs == 0)
+ {
+ return luaL_error(L, "div by zero");
+ }
+
tolua_pushint64(L, lhs / rhs);
return 1;
}
@@ -272,7 +278,7 @@ static int _int64eq(lua_State* L)
static int _int64equals(lua_State* L)
{
int64_t lhs = tolua_checkint64(L, 1);
- int64_t rhs = tolua_checkint64(L, 2);
+ int64_t rhs = tolua_toint64(L, 2);
lua_pushboolean(L, lhs == rhs);
return 1;
}
diff --git a/tolua.h b/tolua.h
index bcdad6f4..4934a98b 100644
--- a/tolua.h
+++ b/tolua.h
@@ -39,7 +39,6 @@
#define TOLUA_NOPEER LUA_REGISTRYINDEX
#define FLAG_INDEX_ERROR 1
#define FLAG_INT64 2
-#define FLAG_UINT64 4
#define MAX_ITEM 512
@@ -47,6 +46,7 @@
void tolua_openint64(lua_State* L);
int tolua_newint64(lua_State* L);
+void tolua_pushint64(lua_State* L, int64_t n);
void tolua_openuint64(lua_State* L);
int tolua_newuint64(lua_State* L);
diff --git a/uint64.c b/uint64.c
index b500758d..2a4c440d 100644
--- a/uint64.c
+++ b/uint64.c
@@ -91,17 +91,10 @@ LUALIB_API bool tolua_isuint64(lua_State *L, int pos)
LUALIB_API void tolua_pushuint64(lua_State *L, uint64_t n)
{
- if (toluaflags & FLAG_UINT64)
- {
- lua_pushinteger(L, (lua_Integer)n);
- }
- else
- {
- uint64_t* p = (uint64_t*)lua_newuserdata(L, sizeof(uint64_t));
- *p = n;
- lua_getref(L, LUA_RIDX_UINT64);
- lua_setmetatable(L, -2);
- }
+ uint64_t* p = (uint64_t*)lua_newuserdata(L, sizeof(uint64_t));
+ *p = n;
+ lua_getref(L, LUA_RIDX_UINT64);
+ lua_setmetatable(L, -2);
}
//转换一个字符串为 uint64
@@ -194,7 +187,15 @@ static int _uint64sub(lua_State *L)
{
uint64_t lhs = tolua_checkuint64(L, 1);
uint64_t rhs = tolua_checkuint64(L, 2);
- tolua_pushuint64(L, lhs - rhs);
+
+ if (lhs > rhs)
+ {
+ tolua_pushuint64(L, lhs - rhs);
+ }
+ else
+ {
+ tolua_pushint64(L, lhs - rhs);
+ }
return 1;
}
@@ -210,6 +211,12 @@ static int _uint64div(lua_State *L)
{
uint64_t lhs = tolua_checkuint64(L, 1);
uint64_t rhs = tolua_checkuint64(L, 2);
+
+ if (rhs == 0)
+ {
+ return luaL_error(L, "div by zero");
+ }
+
tolua_pushuint64(L, lhs / rhs);
return 1;
}
@@ -271,7 +278,7 @@ static int _uint64eq(lua_State *L)
static int _uint64equals(lua_State *L)
{
uint64_t lhs = tolua_checkuint64(L, 1);
- uint64_t rhs = tolua_checkuint64(L, 2);
+ uint64_t rhs = tolua_touint64(L, 2);
lua_pushboolean(L, lhs == rhs);
return 1;
}
diff --git a/window/x86/libluajit.a b/window/x86/libluajit.a
index e09ddadd..f441b5be 100644
Binary files a/window/x86/libluajit.a and b/window/x86/libluajit.a differ
diff --git a/window/x86_64/libluajit.a b/window/x86_64/libluajit.a
index 614299ab..0e9b2cef 100644
Binary files a/window/x86_64/libluajit.a and b/window/x86_64/libluajit.a differ