浏览代码

correct error message for floating-point values out of (integer) range

Roberto Ierusalimschy 12 年之前
父节点
当前提交
138e69cc55
共有 1 个文件被更改,包括 15 次插入4 次删除
  1. 15 4
      lauxlib.c

+ 15 - 4
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;
 }