aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhilipp Janda <siffiejoe@gmx.net>2018-01-13 19:57:19 +0100
committerPhilipp Janda <siffiejoe@gmx.net>2018-01-13 19:57:19 +0100
commit340f2f4777e8ad427a364c9c1ef562d40c60cb1d (patch)
tree1be2cc11bf9d2d59e5973faa466563a649bdc5e4
parent30077d241b788b644fb923b4c2da628cdd2c3423 (diff)
downloadlua-compat-5.3-340f2f4777e8ad427a364c9c1ef562d40c60cb1d.tar.gz
lua-compat-5.3-340f2f4777e8ad427a364c9c1ef562d40c60cb1d.tar.bz2
lua-compat-5.3-340f2f4777e8ad427a364c9c1ef562d40c60cb1d.zip
lua_tointeger(x) rejects non-ints for Lua 5.1.
-rw-r--r--c-api/compat-5.3.c15
-rw-r--r--c-api/compat-5.3.h2
-rwxr-xr-xtests/test.lua5
-rw-r--r--tests/testmod.c3
4 files changed, 20 insertions, 5 deletions
diff --git a/c-api/compat-5.3.c b/c-api/compat-5.3.c
index b82c654..ebaf03f 100644
--- a/c-api/compat-5.3.c
+++ b/c-api/compat-5.3.c
@@ -205,11 +205,18 @@ COMPAT53_API void lua_rawsetp (lua_State *L, int i, const void *p) {
205 205
206 206
207COMPAT53_API lua_Integer lua_tointegerx (lua_State *L, int i, int *isnum) { 207COMPAT53_API lua_Integer lua_tointegerx (lua_State *L, int i, int *isnum) {
208 lua_Integer n = lua_tointeger(L, i); 208 int ok = 0;
209 if (isnum != NULL) { 209 lua_Number n = lua_tonumberx(L, i, &ok);
210 *isnum = (n != 0 || lua_isnumber(L, i)); 210 lua_Integer j = (lua_tointeger)(L, i); /* native lua_tointeger */
211 if (isnum == NULL)
212 isnum = &ok;
213 if (ok && n == j) {
214 *isnum = 1;
215 return j;
216 } else {
217 *isnum = 0;
218 return 0;
211 } 219 }
212 return n;
213} 220}
214 221
215 222
diff --git a/c-api/compat-5.3.h b/c-api/compat-5.3.h
index 755c23e..6b6e35c 100644
--- a/c-api/compat-5.3.h
+++ b/c-api/compat-5.3.h
@@ -165,6 +165,8 @@ COMPAT53_API void lua_rawsetp(lua_State *L, int i, const void *p);
165 165
166#define lua_rawlen(L, i) lua_objlen((L), (i)) 166#define lua_rawlen(L, i) lua_objlen((L), (i))
167 167
168#define lua_tointeger(L, i) lua_tointegerx((L), (i), NULL)
169
168#define lua_tointegerx COMPAT53_CONCAT(COMPAT53_PREFIX, _tointegerx) 170#define lua_tointegerx COMPAT53_CONCAT(COMPAT53_PREFIX, _tointegerx)
169COMPAT53_API lua_Integer lua_tointegerx (lua_State *L, int i, int *isnum); 171COMPAT53_API lua_Integer lua_tointegerx (lua_State *L, int i, int *isnum);
170 172
diff --git a/tests/test.lua b/tests/test.lua
index 2f6c7f6..c2c0abf 100755
--- a/tests/test.lua
+++ b/tests/test.lua
@@ -705,6 +705,11 @@ print("tonumber", mod.tonumber("error"))
705 705
706___'' 706___''
707print("tointeger", mod.tointeger(12)) 707print("tointeger", mod.tointeger(12))
708print("tointeger", mod.tointeger(-12))
709print("tointeger", mod.tointeger(12.1))
710print("tointeger", mod.tointeger(12.9))
711print("tointeger", mod.tointeger(-12.1))
712print("tointeger", mod.tointeger(-12.9))
708print("tointeger", mod.tointeger("12")) 713print("tointeger", mod.tointeger("12"))
709print("tointeger", mod.tointeger("0")) 714print("tointeger", mod.tointeger("0"))
710print("tointeger", mod.tointeger(math.pi)) 715print("tointeger", mod.tointeger(math.pi))
diff --git a/tests/testmod.c b/tests/testmod.c
index 9232682..cd56e76 100644
--- a/tests/testmod.c
+++ b/tests/testmod.c
@@ -152,7 +152,8 @@ static int test_tointeger (lua_State *L) {
152 lua_pushnil(L); 152 lua_pushnil(L);
153 else 153 else
154 lua_pushinteger(L, n); 154 lua_pushinteger(L, n);
155 return 1; 155 lua_pushinteger(L, lua_tointeger(L, 1));
156 return 2;
156} 157}
157 158
158static int test_len (lua_State *L) { 159static int test_len (lua_State *L) {