summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2013-06-14 15:34:49 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2013-06-14 15:34:49 -0300
commit138e69cc55fb3e808206c3532b26063baa19d93b (patch)
tree42a25cab4a56fb0adbbcd8e51cf7b76c0e013592
parent53210d7e5b55494824a86d63e7f5f6f7ea1d8c17 (diff)
downloadlua-github-138e69cc55fb3e808206c3532b26063baa19d93b.tar.gz
correct error message for floating-point values out of (integer) range
-rw-r--r--lauxlib.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/lauxlib.c b/lauxlib.c
index 7cb6821e..17fc962c 100644
--- a/lauxlib.c
+++ b/lauxlib.c
@@ -1,5 +1,5 @@
/*
-** $Id: lauxlib.c,v 1.250 2013/06/04 19:36:42 roberto Exp roberto $
+** $Id: lauxlib.c,v 1.251 2013/06/14 18:12:53 roberto Exp roberto $
** Auxiliary functions for building Lua libraries
** See Copyright Notice in lua.h
*/
@@ -386,11 +386,22 @@ LUALIB_API lua_Number luaL_optnumber (lua_State *L, int narg, lua_Number def) {
}
+static void interror (lua_State *L, int narg) {
+ if (lua_type(L, narg) == LUA_TNUMBER) {
+ assert(!lua_isinteger(L, narg));
+ luaL_argerror(L, narg, "float value out of range");
+ }
+ else
+ tag_error(L, narg, LUA_TNUMBER);
+}
+
+
LUALIB_API lua_Integer luaL_checkinteger (lua_State *L, int narg) {
int isnum;
lua_Integer d = lua_tointegerx(L, narg, &isnum);
- if (!isnum)
- tag_error(L, narg, LUA_TNUMBER);
+ if (!isnum) {
+ interror(L, narg);
+ }
return d;
}
@@ -399,7 +410,7 @@ LUALIB_API lua_Unsigned luaL_checkunsigned (lua_State *L, int narg) {
int isnum;
lua_Unsigned d = lua_tounsignedx(L, narg, &isnum);
if (!isnum)
- tag_error(L, narg, LUA_TNUMBER);
+ interror(L, narg);
return d;
}