diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2013-06-14 15:34:49 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2013-06-14 15:34:49 -0300 |
commit | 138e69cc55fb3e808206c3532b26063baa19d93b (patch) | |
tree | 42a25cab4a56fb0adbbcd8e51cf7b76c0e013592 | |
parent | 53210d7e5b55494824a86d63e7f5f6f7ea1d8c17 (diff) | |
download | lua-github-138e69cc55fb3e808206c3532b26063baa19d93b.tar.gz |
correct error message for floating-point values out of (integer) range
-rw-r--r-- | lauxlib.c | 19 |
1 files changed, 15 insertions, 4 deletions
@@ -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; } |