浏览代码

new functions `lua_tointeger' and lua_pushinteger'

Roberto Ierusalimschy 22 年之前
父节点
当前提交
f04fe526cd
共有 11 个文件被更改,包括 160 次插入120 次删除
  1. 28 1
      lapi.c
  2. 21 6
      lauxlib.c
  3. 9 18
      lauxlib.h
  4. 7 7
      lbaselib.c
  5. 5 5
      ldblib.c
  6. 12 12
      liolib.c
  7. 4 4
      lmathlib.c
  8. 17 17
      lstrlib.c
  9. 3 3
      ltablib.c
  10. 43 46
      ltests.c
  11. 11 1
      lua.h

+ 28 - 1
lapi.c

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: lapi.c,v 1.243 2003/08/25 20:00:50 roberto Exp roberto $
+** $Id: lapi.c,v 1.244 2003/08/27 21:01:44 roberto Exp roberto $
 ** Lua API
 ** Lua API
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -27,6 +27,12 @@
 #include "lvm.h"
 #include "lvm.h"
 
 
 
 
+/* function to convert a lua_Number to lua_Integer (with any rounding method) */
+#ifndef lua_number2integer
+#define lua_number2integer(i,n)     ((i)=(lua_Integer)(n))
+#endif
+
+
 const char lua_ident[] =
 const char lua_ident[] =
   "$Lua: " LUA_VERSION " " LUA_COPYRIGHT " $\n"
   "$Lua: " LUA_VERSION " " LUA_COPYRIGHT " $\n"
   "$Authors: " LUA_AUTHORS " $\n"
   "$Authors: " LUA_AUTHORS " $\n"
@@ -289,6 +295,19 @@ LUA_API lua_Number lua_tonumber (lua_State *L, int idx) {
 }
 }
 
 
 
 
+LUA_API lua_Integer lua_tointeger (lua_State *L, int idx) {
+  TObject n;
+  const TObject *o = luaA_index(L, idx);
+  if (tonumber(o, &n)) {
+    lua_Integer res;
+    lua_number2integer(res, nvalue(o));
+    return res;
+  }
+  else
+    return 0;
+}
+
+
 LUA_API int lua_toboolean (lua_State *L, int idx) {
 LUA_API int lua_toboolean (lua_State *L, int idx) {
   const TObject *o = luaA_index(L, idx);
   const TObject *o = luaA_index(L, idx);
   return !l_isfalse(o);
   return !l_isfalse(o);
@@ -382,6 +401,14 @@ LUA_API void lua_pushnumber (lua_State *L, lua_Number n) {
 }
 }
 
 
 
 
+LUA_API void lua_pushinteger (lua_State *L, lua_Integer n) {
+  lua_lock(L);
+  setnvalue(L->top, cast(lua_Number, n));
+  api_incr_top(L);
+  lua_unlock(L);
+}
+
+
 LUA_API void lua_pushlstring (lua_State *L, const char *s, size_t len) {
 LUA_API void lua_pushlstring (lua_State *L, const char *s, size_t len) {
   lua_lock(L);
   lua_lock(L);
   luaC_checkGC(L);
   luaC_checkGC(L);

+ 21 - 6
lauxlib.c

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: lauxlib.c,v 1.103 2003/10/01 16:50:53 roberto Exp roberto $
+** $Id: lauxlib.c,v 1.104 2003/10/02 20:31:17 roberto Exp roberto $
 ** Auxiliary functions for building Lua libraries
 ** Auxiliary functions for building Lua libraries
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -197,6 +197,21 @@ LUALIB_API lua_Number luaL_optnumber (lua_State *L, int narg, lua_Number def) {
 }
 }
 
 
 
 
+LUALIB_API lua_Integer luaL_checkinteger (lua_State *L, int narg) {
+  lua_Integer d = lua_tointeger(L, narg);
+  if (d == 0 && !lua_isnumber(L, narg))  /* avoid extra test when d is not 0 */
+    tag_error(L, narg, LUA_TNUMBER);
+  return d;
+}
+
+
+LUALIB_API lua_Integer luaL_optinteger (lua_State *L, int narg,
+                                        lua_Integer def) {
+  if (lua_isnoneornil(L, narg)) return def;
+  else return luaL_checkinteger(L, narg);
+}
+
+
 LUALIB_API int luaL_getmetafield (lua_State *L, int obj, const char *event) {
 LUALIB_API int luaL_getmetafield (lua_State *L, int obj, const char *event) {
   if (!lua_getmetatable(L, obj))  /* no metatable? */
   if (!lua_getmetatable(L, obj))  /* no metatable? */
     return 0;
     return 0;
@@ -257,7 +272,7 @@ LUALIB_API void luaL_openlib (lua_State *L, const char *libname,
 */
 */
 
 
 static int checkint (lua_State *L, int topop) {
 static int checkint (lua_State *L, int topop) {
-  int n = (int)lua_tonumber(L, -1);
+  int n = (int)lua_tointeger(L, -1);
   if (n == 0 && !lua_isnumber(L, -1)) n = -1;
   if (n == 0 && !lua_isnumber(L, -1)) n = -1;
   lua_pop(L, topop);
   lua_pop(L, topop);
   return n;
   return n;
@@ -286,13 +301,13 @@ void luaL_setn (lua_State *L, int t, int n) {
   lua_rawget(L, t);
   lua_rawget(L, t);
   if (checkint(L, 1) >= 0) {  /* is there a numeric field `n'? */
   if (checkint(L, 1) >= 0) {  /* is there a numeric field `n'? */
     lua_pushliteral(L, "n");  /* use it */
     lua_pushliteral(L, "n");  /* use it */
-    lua_pushnumber(L, (lua_Number)n);
+    lua_pushinteger(L, n);
     lua_rawset(L, t);
     lua_rawset(L, t);
   }
   }
   else {  /* use `sizes' */
   else {  /* use `sizes' */
     getsizes(L);
     getsizes(L);
     lua_pushvalue(L, t);
     lua_pushvalue(L, t);
-    lua_pushnumber(L, (lua_Number)n);
+    lua_pushinteger(L, n);
     lua_rawset(L, -3);  /* sizes[t] = n */
     lua_rawset(L, -3);  /* sizes[t] = n */
     lua_pop(L, 1);  /* remove `sizes' */
     lua_pop(L, 1);  /* remove `sizes' */
   }
   }
@@ -425,7 +440,7 @@ LUALIB_API int luaL_ref (lua_State *L, int t) {
     return LUA_REFNIL;  /* `nil' has a unique fixed reference */
     return LUA_REFNIL;  /* `nil' has a unique fixed reference */
   }
   }
   lua_rawgeti(L, t, FREELIST_REF);  /* get first free element */
   lua_rawgeti(L, t, FREELIST_REF);  /* get first free element */
-  ref = (int)lua_tonumber(L, -1);  /* ref = t[FREELIST_REF] */
+  ref = (int)lua_tointeger(L, -1);  /* ref = t[FREELIST_REF] */
   lua_pop(L, 1);  /* remove it from stack */
   lua_pop(L, 1);  /* remove it from stack */
   if (ref != 0) {  /* any free element? */
   if (ref != 0) {  /* any free element? */
     lua_rawgeti(L, t, ref);  /* remove it from list */
     lua_rawgeti(L, t, ref);  /* remove it from list */
@@ -448,7 +463,7 @@ LUALIB_API void luaL_unref (lua_State *L, int t, int ref) {
     t = abs_index(L, t);
     t = abs_index(L, t);
     lua_rawgeti(L, t, FREELIST_REF);
     lua_rawgeti(L, t, FREELIST_REF);
     lua_rawseti(L, t, ref);  /* t[ref] = t[FREELIST_REF] */
     lua_rawseti(L, t, ref);  /* t[ref] = t[FREELIST_REF] */
-    lua_pushnumber(L, (lua_Number)ref);
+    lua_pushinteger(L, ref);
     lua_rawseti(L, t, FREELIST_REF);  /* t[FREELIST_REF] = ref */
     lua_rawseti(L, t, FREELIST_REF);  /* t[FREELIST_REF] = ref */
   }
   }
 }
 }

+ 9 - 18
lauxlib.h

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: lauxlib.h,v 1.60 2003/04/03 13:35:34 roberto Exp roberto $
+** $Id: lauxlib.h,v 1.61 2003/10/02 20:31:17 roberto Exp roberto $
 ** Auxiliary functions for building Lua libraries
 ** Auxiliary functions for building Lua libraries
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -39,6 +39,10 @@ LUALIB_API const char *luaL_optlstring (lua_State *L, int numArg,
 LUALIB_API lua_Number luaL_checknumber (lua_State *L, int numArg);
 LUALIB_API lua_Number luaL_checknumber (lua_State *L, int numArg);
 LUALIB_API lua_Number luaL_optnumber (lua_State *L, int nArg, lua_Number def);
 LUALIB_API lua_Number luaL_optnumber (lua_State *L, int nArg, lua_Number def);
 
 
+LUALIB_API lua_Integer luaL_checkinteger (lua_State *L, int numArg);
+LUALIB_API lua_Integer luaL_optinteger (lua_State *L, int nArg,
+                                        lua_Integer def);
+
 LUALIB_API void luaL_checkstack (lua_State *L, int sz, const char *msg);
 LUALIB_API void luaL_checkstack (lua_State *L, int sz, const char *msg);
 LUALIB_API void luaL_checktype (lua_State *L, int narg, int t);
 LUALIB_API void luaL_checktype (lua_State *L, int narg, int t);
 LUALIB_API void luaL_checkany (lua_State *L, int narg);
 LUALIB_API void luaL_checkany (lua_State *L, int narg);
@@ -76,10 +80,10 @@ LUALIB_API lua_State *(luaL_newstate) (void);
                                                luaL_argerror(L, numarg,extramsg)
                                                luaL_argerror(L, numarg,extramsg)
 #define luaL_checkstring(L,n)	(luaL_checklstring(L, (n), NULL))
 #define luaL_checkstring(L,n)	(luaL_checklstring(L, (n), NULL))
 #define luaL_optstring(L,n,d)	(luaL_optlstring(L, (n), (d), NULL))
 #define luaL_optstring(L,n,d)	(luaL_optlstring(L, (n), (d), NULL))
-#define luaL_checkint(L,n)	((int)luaL_checknumber(L, n))
-#define luaL_checklong(L,n)	((long)luaL_checknumber(L, n))
-#define luaL_optint(L,n,d)	((int)luaL_optnumber(L, n,(lua_Number)(d)))
-#define luaL_optlong(L,n,d)	((long)luaL_optnumber(L, n,(lua_Number)(d)))
+#define luaL_checkint(L,n)	((int)luaL_checkinteger(L, n))
+#define luaL_optint(L,n,d)	((int)luaL_optinteger(L, n,d))
+#define luaL_checklong(L,n)	((long)luaL_checkinteger(L, n))
+#define luaL_optlong(L,n,d)	((long)luaL_optinteger(L, n,d))
 
 
 
 
 /*
 /*
@@ -129,19 +133,6 @@ LUALIB_API int   lua_dobuffer (lua_State *L, const char *buff, size_t sz,
                                const char *n);
                                const char *n);
 
 
 
 
-#define luaL_check_lstr 	luaL_checklstring
-#define luaL_opt_lstr 	luaL_optlstring 
-#define luaL_check_number 	luaL_checknumber 
-#define luaL_opt_number	luaL_optnumber
-#define luaL_arg_check	luaL_argcheck
-#define luaL_check_string	luaL_checkstring
-#define luaL_opt_string	luaL_optstring
-#define luaL_check_int	luaL_checkint
-#define luaL_check_long	luaL_checklong
-#define luaL_opt_int	luaL_optint
-#define luaL_opt_long	luaL_optlong
-
-
 #endif
 #endif
 
 
 
 

+ 7 - 7
lbaselib.c

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: lbaselib.c,v 1.132 2003/08/25 19:49:47 roberto Exp roberto $
+** $Id: lbaselib.c,v 1.133 2003/08/27 21:02:08 roberto Exp roberto $
 ** Basic library
 ** Basic library
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -187,8 +187,8 @@ static int luaB_rawset (lua_State *L) {
 
 
 
 
 static int luaB_gcinfo (lua_State *L) {
 static int luaB_gcinfo (lua_State *L) {
-  lua_pushnumber(L, (lua_Number)lua_getgccount(L));
-  lua_pushnumber(L, (lua_Number)lua_getgcthreshold(L));
+  lua_pushinteger(L, lua_getgccount(L));
+  lua_pushinteger(L, lua_getgcthreshold(L));
   return 2;
   return 2;
 }
 }
 
 
@@ -229,19 +229,19 @@ static int luaB_pairs (lua_State *L) {
 
 
 
 
 static int luaB_ipairs (lua_State *L) {
 static int luaB_ipairs (lua_State *L) {
-  lua_Number i = lua_tonumber(L, 2);
+  int i = (int)lua_tointeger(L, 2);
   luaL_checktype(L, 1, LUA_TTABLE);
   luaL_checktype(L, 1, LUA_TTABLE);
   if (i == 0 && lua_isnone(L, 2)) {  /* `for' start? */
   if (i == 0 && lua_isnone(L, 2)) {  /* `for' start? */
     lua_pushliteral(L, "ipairs");
     lua_pushliteral(L, "ipairs");
     lua_rawget(L, LUA_GLOBALSINDEX);  /* return generator, */
     lua_rawget(L, LUA_GLOBALSINDEX);  /* return generator, */
     lua_pushvalue(L, 1);  /* state, */
     lua_pushvalue(L, 1);  /* state, */
-    lua_pushnumber(L, 0);  /* and initial value */
+    lua_pushinteger(L, 0);  /* and initial value */
     return 3;
     return 3;
   }
   }
   else {  /* `for' step */
   else {  /* `for' step */
     i++;  /* next value */
     i++;  /* next value */
-    lua_pushnumber(L, i);
-    lua_rawgeti(L, 1, (int)i);
+    lua_pushinteger(L, i);
+    lua_rawgeti(L, 1, i);
     return (lua_isnil(L, -1)) ? 0 : 2;
     return (lua_isnil(L, -1)) ? 0 : 2;
   }
   }
 }
 }

+ 5 - 5
ldblib.c

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: ldblib.c,v 1.80 2003/04/03 13:35:34 roberto Exp roberto $
+** $Id: ldblib.c,v 1.81 2003/07/07 13:37:08 roberto Exp roberto $
 ** Interface from Lua to its debug API
 ** Interface from Lua to its debug API
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -27,7 +27,7 @@ static void settabss (lua_State *L, const char *i, const char *v) {
 
 
 static void settabsi (lua_State *L, const char *i, int v) {
 static void settabsi (lua_State *L, const char *i, int v) {
   lua_pushstring(L, i);
   lua_pushstring(L, i);
-  lua_pushnumber(L, (lua_Number)v);
+  lua_pushinteger(L, v);
   lua_rawset(L, -3);
   lua_rawset(L, -3);
 }
 }
 
 
@@ -50,7 +50,7 @@ static int getinfo (lua_State *L) {
   lua_State *L1 = getthread(L, &arg);
   lua_State *L1 = getthread(L, &arg);
   const char *options = luaL_optstring(L, arg+2, "flnSu");
   const char *options = luaL_optstring(L, arg+2, "flnSu");
   if (lua_isnumber(L, arg+1)) {
   if (lua_isnumber(L, arg+1)) {
-    if (!lua_getstack(L1, (int)(lua_tonumber(L, arg+1)), &ar)) {
+    if (!lua_getstack(L1, (int)lua_tointeger(L, arg+1), &ar)) {
       lua_pushnil(L);  /* level out of range */
       lua_pushnil(L);  /* level out of range */
       return 1;
       return 1;
     }
     }
@@ -171,7 +171,7 @@ static void hookf (lua_State *L, lua_Debug *ar) {
   if (lua_isfunction(L, -1)) {
   if (lua_isfunction(L, -1)) {
     lua_pushstring(L, hooknames[(int)ar->event]);
     lua_pushstring(L, hooknames[(int)ar->event]);
     if (ar->currentline >= 0)
     if (ar->currentline >= 0)
-      lua_pushnumber(L, (lua_Number)ar->currentline);
+      lua_pushinteger(L, ar->currentline);
     else lua_pushnil(L);
     else lua_pushnil(L);
     lua_assert(lua_getinfo(L, "lS", ar));
     lua_assert(lua_getinfo(L, "lS", ar));
     lua_call(L, 2, 0);
     lua_call(L, 2, 0);
@@ -251,7 +251,7 @@ static int gethook (lua_State *L) {
     lua_xmove(L1, L, 1);
     lua_xmove(L1, L, 1);
   }
   }
   lua_pushstring(L, unmakemask(mask, buff));
   lua_pushstring(L, unmakemask(mask, buff));
-  lua_pushnumber(L, (lua_Number)lua_gethookcount(L1));
+  lua_pushinteger(L, lua_gethookcount(L1));
   return 3;
   return 3;
 }
 }
 
 

+ 12 - 12
liolib.c

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: liolib.c,v 2.45 2003/07/09 12:08:43 roberto Exp roberto $
+** $Id: liolib.c,v 2.46 2003/08/25 19:49:47 roberto Exp roberto $
 ** Standard I/O (and system) library
 ** Standard I/O (and system) library
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -76,7 +76,7 @@ static int pushresult (lua_State *L, int i, const char *filename) {
       lua_pushfstring(L, "%s: %s", filename, strerror(errno));
       lua_pushfstring(L, "%s: %s", filename, strerror(errno));
     else
     else
       lua_pushfstring(L, "%s", strerror(errno));
       lua_pushfstring(L, "%s", strerror(errno));
-    lua_pushnumber(L, errno);
+    lua_pushinteger(L, errno);
     return 3;
     return 3;
   }
   }
 }
 }
@@ -346,7 +346,7 @@ static int g_read (lua_State *L, FILE *f, int first) {
     success = 1;
     success = 1;
     for (n = first; nargs-- && success; n++) {
     for (n = first; nargs-- && success; n++) {
       if (lua_type(L, n) == LUA_TNUMBER) {
       if (lua_type(L, n) == LUA_TNUMBER) {
-        size_t l = (size_t)lua_tonumber(L, n);
+        size_t l = (size_t)lua_tointeger(L, n);
         success = (l == 0) ? test_eof(L, f) : read_chars(L, f, l);
         success = (l == 0) ? test_eof(L, f) : read_chars(L, f, l);
       }
       }
       else {
       else {
@@ -441,13 +441,13 @@ static int f_seek (lua_State *L) {
   static const char *const modenames[] = {"set", "cur", "end", NULL};
   static const char *const modenames[] = {"set", "cur", "end", NULL};
   FILE *f = tofile(L, 1);
   FILE *f = tofile(L, 1);
   int op = luaL_findstring(luaL_optstring(L, 2, "cur"), modenames);
   int op = luaL_findstring(luaL_optstring(L, 2, "cur"), modenames);
-  long offset = luaL_optlong(L, 3, 0);
+  lua_Integer offset = luaL_optinteger(L, 3, 0);
   luaL_argcheck(L, op != -1, 2, "invalid mode");
   luaL_argcheck(L, op != -1, 2, "invalid mode");
   op = fseek(f, offset, mode[op]);
   op = fseek(f, offset, mode[op]);
   if (op)
   if (op)
     return pushresult(L, 0, NULL);  /* error */
     return pushresult(L, 0, NULL);  /* error */
   else {
   else {
-    lua_pushnumber(L, ftell(f));
+    lua_pushinteger(L, ftell(f));
     return 1;
     return 1;
   }
   }
 }
 }
@@ -528,7 +528,7 @@ static void createmeta (lua_State *L) {
 */
 */
 
 
 static int io_execute (lua_State *L) {
 static int io_execute (lua_State *L) {
-  lua_pushnumber(L, system(luaL_checkstring(L, 1)));
+  lua_pushinteger(L, system(luaL_checkstring(L, 1)));
   return 1;
   return 1;
 }
 }
 
 
@@ -582,7 +582,7 @@ static int io_clock (lua_State *L) {
 
 
 static void setfield (lua_State *L, const char *key, int value) {
 static void setfield (lua_State *L, const char *key, int value) {
   lua_pushstring(L, key);
   lua_pushstring(L, key);
-  lua_pushnumber(L, value);
+  lua_pushinteger(L, value);
   lua_rawset(L, -3);
   lua_rawset(L, -3);
 }
 }
 
 
@@ -607,9 +607,9 @@ static int getfield (lua_State *L, const char *key, int d) {
   lua_pushstring(L, key);
   lua_pushstring(L, key);
   lua_gettable(L, -2);
   lua_gettable(L, -2);
   if (lua_isnumber(L, -1))
   if (lua_isnumber(L, -1))
-    res = (int)(lua_tonumber(L, -1));
+    res = (int)lua_tointeger(L, -1);
   else {
   else {
-    if (d == -2)
+    if (d < 0)
       return luaL_error(L, "field `%s' missing in date table", key);
       return luaL_error(L, "field `%s' missing in date table", key);
     res = d;
     res = d;
   }
   }
@@ -665,9 +665,9 @@ static int io_time (lua_State *L) {
     ts.tm_sec = getfield(L, "sec", 0);
     ts.tm_sec = getfield(L, "sec", 0);
     ts.tm_min = getfield(L, "min", 0);
     ts.tm_min = getfield(L, "min", 0);
     ts.tm_hour = getfield(L, "hour", 12);
     ts.tm_hour = getfield(L, "hour", 12);
-    ts.tm_mday = getfield(L, "day", -2);
-    ts.tm_mon = getfield(L, "month", -2) - 1;
-    ts.tm_year = getfield(L, "year", -2) - 1900;
+    ts.tm_mday = getfield(L, "day", -1);
+    ts.tm_mon = getfield(L, "month", -1) - 1;
+    ts.tm_year = getfield(L, "year", -1) - 1900;
     ts.tm_isdst = getboolfield(L, "isdst");
     ts.tm_isdst = getboolfield(L, "isdst");
     t = mktime(&ts);
     t = mktime(&ts);
     if (t == (time_t)(-1))
     if (t == (time_t)(-1))

+ 4 - 4
lmathlib.c

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: lmathlib.c,v 1.55 2003/03/11 12:24:34 roberto Exp roberto $
+** $Id: lmathlib.c,v 1.56 2003/03/11 12:30:37 roberto Exp roberto $
 ** Standard mathematical library
 ** Standard mathematical library
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -128,7 +128,7 @@ static int math_rad (lua_State *L) {
 static int math_frexp (lua_State *L) {
 static int math_frexp (lua_State *L) {
   int e;
   int e;
   lua_pushnumber(L, frexp(luaL_checknumber(L, 1), &e));
   lua_pushnumber(L, frexp(luaL_checknumber(L, 1), &e));
-  lua_pushnumber(L, e);
+  lua_pushinteger(L, e);
   return 2;
   return 2;
 }
 }
 
 
@@ -179,14 +179,14 @@ static int math_random (lua_State *L) {
     case 1: {  /* only upper limit */
     case 1: {  /* only upper limit */
       int u = luaL_checkint(L, 1);
       int u = luaL_checkint(L, 1);
       luaL_argcheck(L, 1<=u, 1, "interval is empty");
       luaL_argcheck(L, 1<=u, 1, "interval is empty");
-      lua_pushnumber(L, (int)floor(r*u)+1);  /* int between 1 and `u' */
+      lua_pushnumber(L, floor(r*u)+1);  /* int between 1 and `u' */
       break;
       break;
     }
     }
     case 2: {  /* lower and upper limits */
     case 2: {  /* lower and upper limits */
       int l = luaL_checkint(L, 1);
       int l = luaL_checkint(L, 1);
       int u = luaL_checkint(L, 2);
       int u = luaL_checkint(L, 2);
       luaL_argcheck(L, l<=u, 2, "interval is empty");
       luaL_argcheck(L, l<=u, 2, "interval is empty");
-      lua_pushnumber(L, (int)floor(r*(u-l+1))+l);  /* int between `l' and `u' */
+      lua_pushnumber(L, floor(r*(u-l+1))+l);  /* int between `l' and `u' */
       break;
       break;
     }
     }
     default: return luaL_error(L, "wrong number of arguments");
     default: return luaL_error(L, "wrong number of arguments");

+ 17 - 17
lstrlib.c

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: lstrlib.c,v 1.98 2003/04/03 13:35:34 roberto Exp roberto $
+** $Id: lstrlib.c,v 1.99 2003/05/14 14:35:54 roberto Exp roberto $
 ** Standard library for string operations and pattern-matching
 ** Standard library for string operations and pattern-matching
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -25,13 +25,13 @@
 #endif
 #endif
 
 
 
 
-typedef long sint32;	/* a signed version for size_t */
+typedef lua_Integer sint32;	/* a signed version for size_t */
 
 
 
 
 static int str_len (lua_State *L) {
 static int str_len (lua_State *L) {
   size_t l;
   size_t l;
   luaL_checklstring(L, 1, &l);
   luaL_checklstring(L, 1, &l);
-  lua_pushnumber(L, (lua_Number)l);
+  lua_pushinteger(L, l);
   return 1;
   return 1;
 }
 }
 
 
@@ -45,8 +45,8 @@ static sint32 posrelat (sint32 pos, size_t len) {
 static int str_sub (lua_State *L) {
 static int str_sub (lua_State *L) {
   size_t l;
   size_t l;
   const char *s = luaL_checklstring(L, 1, &l);
   const char *s = luaL_checklstring(L, 1, &l);
-  sint32 start = posrelat(luaL_checklong(L, 2), l);
-  sint32 end = posrelat(luaL_optlong(L, 3, -1), l);
+  sint32 start = posrelat(luaL_checkinteger(L, 2), l);
+  sint32 end = posrelat(luaL_optinteger(L, 3, -1), l);
   if (start < 1) start = 1;
   if (start < 1) start = 1;
   if (end > (sint32)l) end = (sint32)l;
   if (end > (sint32)l) end = (sint32)l;
   if (start <= end)
   if (start <= end)
@@ -108,10 +108,10 @@ static int str_rep (lua_State *L) {
 static int str_byte (lua_State *L) {
 static int str_byte (lua_State *L) {
   size_t l;
   size_t l;
   const char *s = luaL_checklstring(L, 1, &l);
   const char *s = luaL_checklstring(L, 1, &l);
-  sint32 pos = posrelat(luaL_optlong(L, 2, 1), l);
+  sint32 pos = posrelat(luaL_optinteger(L, 2, 1), l);
   if (pos <= 0 || (size_t)(pos) > l)  /* index out of range? */
   if (pos <= 0 || (size_t)(pos) > l)  /* index out of range? */
     return 0;  /* no answer */
     return 0;  /* no answer */
-  lua_pushnumber(L, uchar(s[pos-1]));
+  lua_pushinteger(L, uchar(s[pos-1]));
   return 1;
   return 1;
 }
 }
 
 
@@ -463,7 +463,7 @@ static void push_onecapture (MatchState *ms, int i) {
   int l = ms->capture[i].len;
   int l = ms->capture[i].len;
   if (l == CAP_UNFINISHED) luaL_error(ms->L, "unfinished capture");
   if (l == CAP_UNFINISHED) luaL_error(ms->L, "unfinished capture");
   if (l == CAP_POSITION)
   if (l == CAP_POSITION)
-    lua_pushnumber(ms->L, (lua_Number)(ms->capture[i].init - ms->src_init + 1));
+    lua_pushinteger(ms->L, ms->capture[i].init - ms->src_init + 1);
   else
   else
     lua_pushlstring(ms->L, ms->capture[i].init, l);
     lua_pushlstring(ms->L, ms->capture[i].init, l);
 }
 }
@@ -488,7 +488,7 @@ static int str_find (lua_State *L) {
   size_t l1, l2;
   size_t l1, l2;
   const char *s = luaL_checklstring(L, 1, &l1);
   const char *s = luaL_checklstring(L, 1, &l1);
   const char *p = luaL_checklstring(L, 2, &l2);
   const char *p = luaL_checklstring(L, 2, &l2);
-  sint32 init = posrelat(luaL_optlong(L, 3, 1), l1) - 1;
+  sint32 init = posrelat(luaL_optinteger(L, 3, 1), l1) - 1;
   if (init < 0) init = 0;
   if (init < 0) init = 0;
   else if ((size_t)(init) > l1) init = (sint32)l1;
   else if ((size_t)(init) > l1) init = (sint32)l1;
   if (lua_toboolean(L, 4) ||  /* explicit request? */
   if (lua_toboolean(L, 4) ||  /* explicit request? */
@@ -496,8 +496,8 @@ static int str_find (lua_State *L) {
     /* do a plain search */
     /* do a plain search */
     const char *s2 = lmemfind(s+init, l1-init, p, l2);
     const char *s2 = lmemfind(s+init, l1-init, p, l2);
     if (s2) {
     if (s2) {
-      lua_pushnumber(L, (lua_Number)(s2-s+1));
-      lua_pushnumber(L, (lua_Number)(s2-s+l2));
+      lua_pushinteger(L, s2-s+1);
+      lua_pushinteger(L, s2-s+l2);
       return 2;
       return 2;
     }
     }
   }
   }
@@ -512,8 +512,8 @@ static int str_find (lua_State *L) {
       const char *res;
       const char *res;
       ms.level = 0;
       ms.level = 0;
       if ((res=match(&ms, s1, p)) != NULL) {
       if ((res=match(&ms, s1, p)) != NULL) {
-        lua_pushnumber(L, (lua_Number)(s1-s+1));  /* start */
-        lua_pushnumber(L, (lua_Number)(res-s));   /* end */
+        lua_pushinteger(L, s1-s+1);  /* start */
+        lua_pushinteger(L, res-s);   /* end */
         return push_captures(&ms, NULL, 0) + 2;
         return push_captures(&ms, NULL, 0) + 2;
       }
       }
     } while (s1++<ms.src_end && !anchor);
     } while (s1++<ms.src_end && !anchor);
@@ -532,7 +532,7 @@ static int gfind_aux (lua_State *L) {
   ms.L = L;
   ms.L = L;
   ms.src_init = s;
   ms.src_init = s;
   ms.src_end = s+ls;
   ms.src_end = s+ls;
-  for (src = s + (size_t)lua_tonumber(L, lua_upvalueindex(3));
+  for (src = s + (size_t)lua_tointeger(L, lua_upvalueindex(3));
        src <= ms.src_end;
        src <= ms.src_end;
        src++) {
        src++) {
     const char *e;
     const char *e;
@@ -540,7 +540,7 @@ static int gfind_aux (lua_State *L) {
     if ((e = match(&ms, src, p)) != NULL) {
     if ((e = match(&ms, src, p)) != NULL) {
       int newstart = e-s;
       int newstart = e-s;
       if (e == src) newstart++;  /* empty match? go at least one position */
       if (e == src) newstart++;  /* empty match? go at least one position */
-      lua_pushnumber(L, (lua_Number)newstart);
+      lua_pushinteger(L, newstart);
       lua_replace(L, lua_upvalueindex(3));
       lua_replace(L, lua_upvalueindex(3));
       return push_captures(&ms, src, e);
       return push_captures(&ms, src, e);
     }
     }
@@ -553,7 +553,7 @@ static int gfind (lua_State *L) {
   luaL_checkstring(L, 1);
   luaL_checkstring(L, 1);
   luaL_checkstring(L, 2);
   luaL_checkstring(L, 2);
   lua_settop(L, 2);
   lua_settop(L, 2);
-  lua_pushnumber(L, 0);
+  lua_pushinteger(L, 0);
   lua_pushcclosure(L, gfind_aux, 3);
   lua_pushcclosure(L, gfind_aux, 3);
   return 1;
   return 1;
 }
 }
@@ -627,7 +627,7 @@ static int str_gsub (lua_State *L) {
   }
   }
   luaL_addlstring(&b, src, ms.src_end-src);
   luaL_addlstring(&b, src, ms.src_end-src);
   luaL_pushresult(&b);
   luaL_pushresult(&b);
-  lua_pushnumber(L, (lua_Number)n);  /* number of substitutions */
+  lua_pushinteger(L, n);  /* number of substitutions */
   return 2;
   return 2;
 }
 }
 
 

+ 3 - 3
ltablib.c

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: ltablib.c,v 1.20 2003/03/11 12:24:34 roberto Exp roberto $
+** $Id: ltablib.c,v 1.21 2003/04/03 13:35:34 roberto Exp roberto $
 ** Library for Table Manipulation
 ** Library for Table Manipulation
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -24,7 +24,7 @@ static int luaB_foreachi (lua_State *L) {
   luaL_checktype(L, 2, LUA_TFUNCTION);
   luaL_checktype(L, 2, LUA_TFUNCTION);
   for (i=1; i<=n; i++) {
   for (i=1; i<=n; i++) {
     lua_pushvalue(L, 2);  /* function */
     lua_pushvalue(L, 2);  /* function */
-    lua_pushnumber(L, (lua_Number)i);  /* 1st argument */
+    lua_pushinteger(L, i);  /* 1st argument */
     lua_rawgeti(L, 1, i);  /* 2nd argument */
     lua_rawgeti(L, 1, i);  /* 2nd argument */
     lua_call(L, 2, 1);
     lua_call(L, 2, 1);
     if (!lua_isnil(L, -1))
     if (!lua_isnil(L, -1))
@@ -54,7 +54,7 @@ static int luaB_foreach (lua_State *L) {
 
 
 
 
 static int luaB_getn (lua_State *L) {
 static int luaB_getn (lua_State *L) {
-  lua_pushnumber(L, (lua_Number)aux_getn(L, 1));
+  lua_pushinteger(L, aux_getn(L, 1));
   return 1;
   return 1;
 }
 }
 
 

+ 43 - 46
ltests.c

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: ltests.c,v 1.163 2003/07/29 19:26:34 roberto Exp roberto $
+** $Id: ltests.c,v 1.164 2003/10/02 20:31:17 roberto Exp roberto $
 ** Internal Module for Debugging of the Lua Implementation
 ** Internal Module for Debugging of the Lua Implementation
 ** See Copyright Notice in lua.h
 ** See Copyright Notice in lua.h
 */
 */
@@ -36,9 +36,6 @@
 #ifdef LUA_DEBUG
 #ifdef LUA_DEBUG
 
 
 
 
-#define lua_pushintegral(L,i)	lua_pushnumber(L, cast(lua_Number, (i)))
-
-
 static lua_State *lua_state = NULL;
 static lua_State *lua_state = NULL;
 
 
 int islocked = 0;
 int islocked = 0;
@@ -49,7 +46,7 @@ int islocked = 0;
 
 
 static void setnameval (lua_State *L, const char *name, int val) {
 static void setnameval (lua_State *L, const char *name, int val) {
   lua_pushstring(L, name);
   lua_pushstring(L, name);
-  lua_pushintegral(L, val);
+  lua_pushinteger(L, val);
   lua_settable(L, -3);
   lua_settable(L, -3);
 }
 }
 
 
@@ -196,7 +193,7 @@ static int listcode (lua_State *L) {
   setnameval(L, "numparams", p->numparams);
   setnameval(L, "numparams", p->numparams);
   for (pc=0; pc<p->sizecode; pc++) {
   for (pc=0; pc<p->sizecode; pc++) {
     char buff[100];
     char buff[100];
-    lua_pushintegral(L, pc+1);
+    lua_pushinteger(L, pc+1);
     lua_pushstring(L, buildop(p, pc, buff));
     lua_pushstring(L, buildop(p, pc, buff));
     lua_settable(L, -3);
     lua_settable(L, -3);
   }
   }
@@ -212,7 +209,7 @@ static int listk (lua_State *L) {
   p = clvalue(func_at(L, 1))->l.p;
   p = clvalue(func_at(L, 1))->l.p;
   lua_newtable(L);
   lua_newtable(L);
   for (i=0; i<p->sizek; i++) {
   for (i=0; i<p->sizek; i++) {
-    lua_pushintegral(L, i+1);
+    lua_pushinteger(L, i+1);
     luaA_pushobject(L, p->k+i);
     luaA_pushobject(L, p->k+i);
     lua_settable(L, -3);
     lua_settable(L, -3);
   }
   }
@@ -257,9 +254,9 @@ static int setgcthreshold (lua_State *L) {
 
 
 static int mem_query (lua_State *L) {
 static int mem_query (lua_State *L) {
   if (lua_isnone(L, 1)) {
   if (lua_isnone(L, 1)) {
-    lua_pushintegral(L, memcontrol.total);
-    lua_pushintegral(L, memcontrol.numblocks);
-    lua_pushintegral(L, memcontrol.maxmem);
+    lua_pushinteger(L, memcontrol.total);
+    lua_pushinteger(L, memcontrol.numblocks);
+    lua_pushinteger(L, memcontrol.maxmem);
     return 3;
     return 3;
   }
   }
   else {
   else {
@@ -272,14 +269,14 @@ static int mem_query (lua_State *L) {
 static int hash_query (lua_State *L) {
 static int hash_query (lua_State *L) {
   if (lua_isnone(L, 2)) {
   if (lua_isnone(L, 2)) {
     luaL_argcheck(L, lua_type(L, 1) == LUA_TSTRING, 1, "string expected");
     luaL_argcheck(L, lua_type(L, 1) == LUA_TSTRING, 1, "string expected");
-    lua_pushintegral(L, tsvalue(func_at(L, 1))->tsv.hash);
+    lua_pushinteger(L, tsvalue(func_at(L, 1))->tsv.hash);
   }
   }
   else {
   else {
     TObject *o = func_at(L, 1);
     TObject *o = func_at(L, 1);
     Table *t;
     Table *t;
     luaL_checktype(L, 2, LUA_TTABLE);
     luaL_checktype(L, 2, LUA_TTABLE);
     t = hvalue(func_at(L, 2));
     t = hvalue(func_at(L, 2));
-    lua_pushintegral(L, luaH_mainposition(t, o) - t->node);
+    lua_pushinteger(L, luaH_mainposition(t, o) - t->node);
   }
   }
   return 1;
   return 1;
 }
 }
@@ -287,11 +284,11 @@ static int hash_query (lua_State *L) {
 
 
 static int stacklevel (lua_State *L) {
 static int stacklevel (lua_State *L) {
   unsigned long a = 0;
   unsigned long a = 0;
-  lua_pushintegral(L, (int)(L->top - L->stack));
-  lua_pushintegral(L, (int)(L->stack_last - L->stack));
-  lua_pushintegral(L, (int)(L->ci - L->base_ci));
-  lua_pushintegral(L, (int)(L->end_ci - L->base_ci));
-  lua_pushintegral(L, (unsigned long)&a);
+  lua_pushinteger(L, (L->top - L->stack));
+  lua_pushinteger(L, (L->stack_last - L->stack));
+  lua_pushinteger(L, (L->ci - L->base_ci));
+  lua_pushinteger(L, (L->end_ci - L->base_ci));
+  lua_pushinteger(L, (unsigned long)&a);
   return 5;
   return 5;
 }
 }
 
 
@@ -302,12 +299,12 @@ static int table_query (lua_State *L) {
   luaL_checktype(L, 1, LUA_TTABLE);
   luaL_checktype(L, 1, LUA_TTABLE);
   t = hvalue(func_at(L, 1));
   t = hvalue(func_at(L, 1));
   if (i == -1) {
   if (i == -1) {
-    lua_pushintegral(L, t->sizearray);
-    lua_pushintegral(L, sizenode(t));
-    lua_pushintegral(L, t->firstfree - t->node);
+    lua_pushinteger(L, t->sizearray);
+    lua_pushinteger(L, sizenode(t));
+    lua_pushinteger(L, t->firstfree - t->node);
   }
   }
   else if (i < t->sizearray) {
   else if (i < t->sizearray) {
-    lua_pushintegral(L, i);
+    lua_pushinteger(L, i);
     luaA_pushobject(L, &t->array[i]);
     luaA_pushobject(L, &t->array[i]);
     lua_pushnil(L); 
     lua_pushnil(L); 
   }
   }
@@ -321,7 +318,7 @@ static int table_query (lua_State *L) {
       lua_pushliteral(L, "<undef>");
       lua_pushliteral(L, "<undef>");
     luaA_pushobject(L, gval(gnode(t, i)));
     luaA_pushobject(L, gval(gnode(t, i)));
     if (t->node[i].next)
     if (t->node[i].next)
-      lua_pushintegral(L, t->node[i].next - t->node);
+      lua_pushinteger(L, t->node[i].next - t->node);
     else
     else
       lua_pushnil(L);
       lua_pushnil(L);
   }
   }
@@ -333,8 +330,8 @@ static int string_query (lua_State *L) {
   stringtable *tb = &G(L)->strt;
   stringtable *tb = &G(L)->strt;
   int s = luaL_optint(L, 2, 0) - 1;
   int s = luaL_optint(L, 2, 0) - 1;
   if (s==-1) {
   if (s==-1) {
-    lua_pushintegral(L ,tb->nuse);
-    lua_pushintegral(L ,tb->size);
+    lua_pushinteger(L ,tb->nuse);
+    lua_pushinteger(L ,tb->size);
     return 2;
     return 2;
   }
   }
   else if (s < tb->size) {
   else if (s < tb->size) {
@@ -356,7 +353,7 @@ static int tref (lua_State *L) {
   int lock = luaL_optint(L, 2, 1);
   int lock = luaL_optint(L, 2, 1);
   luaL_checkany(L, 1);
   luaL_checkany(L, 1);
   lua_pushvalue(L, 1);
   lua_pushvalue(L, 1);
-  lua_pushintegral(L, lua_ref(L, lock));
+  lua_pushinteger(L, lua_ref(L, lock));
   assert(lua_gettop(L) == level+1);  /* +1 for result */
   assert(lua_gettop(L) == level+1);  /* +1 for result */
   return 1;
   return 1;
 }
 }
@@ -422,7 +419,7 @@ static int pushuserdata (lua_State *L) {
 
 
 
 
 static int udataval (lua_State *L) {
 static int udataval (lua_State *L) {
-  lua_pushintegral(L, cast(int, lua_touserdata(L, 1)));
+  lua_pushinteger(L, cast(long, lua_touserdata(L, 1)));
   return 1;
   return 1;
 }
 }
 
 
@@ -434,7 +431,7 @@ static int doonnewstack (lua_State *L) {
   int status = luaL_loadbuffer(L1, s, l, s);
   int status = luaL_loadbuffer(L1, s, l, s);
   if (status == 0)
   if (status == 0)
     status = lua_pcall(L1, 0, 0, 0);
     status = lua_pcall(L1, 0, 0, 0);
-  lua_pushintegral(L, status);
+  lua_pushinteger(L, status);
   return 1;
   return 1;
 }
 }
 
 
@@ -455,7 +452,7 @@ static int newstate (lua_State *L) {
   lua_State *L1 = lua_open();
   lua_State *L1 = lua_open();
   if (L1) {
   if (L1) {
     lua_userstateopen(L1);  /* init lock */
     lua_userstateopen(L1);  /* init lock */
-    lua_pushintegral(L, (unsigned long)L1);
+    lua_pushinteger(L, (unsigned long)L1);
   }
   }
   else
   else
     lua_pushnil(L);
     lua_pushnil(L);
@@ -498,7 +495,7 @@ static int doremote (lua_State *L) {
     status = lua_pcall(L1, 0, LUA_MULTRET, 0);
     status = lua_pcall(L1, 0, LUA_MULTRET, 0);
   if (status != 0) {
   if (status != 0) {
     lua_pushnil(L);
     lua_pushnil(L);
-    lua_pushintegral(L, status);
+    lua_pushinteger(L, status);
     lua_pushstring(L, lua_tostring(L1, -1));
     lua_pushstring(L, lua_tostring(L1, -1));
     return 3;
     return 3;
   }
   }
@@ -513,14 +510,14 @@ static int doremote (lua_State *L) {
 
 
 
 
 static int log2_aux (lua_State *L) {
 static int log2_aux (lua_State *L) {
-  lua_pushintegral(L, luaO_log2(luaL_checkint(L, 1)));
+  lua_pushinteger(L, luaO_log2(luaL_checkint(L, 1)));
   return 1;
   return 1;
 }
 }
 
 
 static int int2fb_aux (lua_State *L) {
 static int int2fb_aux (lua_State *L) {
   int b = luaO_int2fb(luaL_checkint(L, 1));
   int b = luaO_int2fb(luaL_checkint(L, 1));
-  lua_pushintegral(L, b);
-  lua_pushintegral(L, fb2int(b));
+  lua_pushinteger(L, b);
+  lua_pushinteger(L, fb2int(b));
   return 2;
   return 2;
 }
 }
 
 
@@ -590,31 +587,31 @@ static int testC (lua_State *L) {
     const char *inst = getname;
     const char *inst = getname;
     if EQ("") return 0;
     if EQ("") return 0;
     else if EQ("isnumber") {
     else if EQ("isnumber") {
-      lua_pushintegral(L, lua_isnumber(L, getnum));
+      lua_pushinteger(L, lua_isnumber(L, getnum));
     }
     }
     else if EQ("isstring") {
     else if EQ("isstring") {
-      lua_pushintegral(L, lua_isstring(L, getnum));
+      lua_pushinteger(L, lua_isstring(L, getnum));
     }
     }
     else if EQ("istable") {
     else if EQ("istable") {
-      lua_pushintegral(L, lua_istable(L, getnum));
+      lua_pushinteger(L, lua_istable(L, getnum));
     }
     }
     else if EQ("iscfunction") {
     else if EQ("iscfunction") {
-      lua_pushintegral(L, lua_iscfunction(L, getnum));
+      lua_pushinteger(L, lua_iscfunction(L, getnum));
     }
     }
     else if EQ("isfunction") {
     else if EQ("isfunction") {
-      lua_pushintegral(L, lua_isfunction(L, getnum));
+      lua_pushinteger(L, lua_isfunction(L, getnum));
     }
     }
     else if EQ("isuserdata") {
     else if EQ("isuserdata") {
-      lua_pushintegral(L, lua_isuserdata(L, getnum));
+      lua_pushinteger(L, lua_isuserdata(L, getnum));
     }
     }
     else if EQ("isudataval") {
     else if EQ("isudataval") {
-      lua_pushintegral(L, lua_islightuserdata(L, getnum));
+      lua_pushinteger(L, lua_islightuserdata(L, getnum));
     }
     }
     else if EQ("isnil") {
     else if EQ("isnil") {
-      lua_pushintegral(L, lua_isnil(L, getnum));
+      lua_pushinteger(L, lua_isnil(L, getnum));
     }
     }
     else if EQ("isnull") {
     else if EQ("isnull") {
-      lua_pushintegral(L, lua_isnone(L, getnum));
+      lua_pushinteger(L, lua_isnone(L, getnum));
     }
     }
     else if EQ("tonumber") {
     else if EQ("tonumber") {
       lua_pushnumber(L, lua_tonumber(L, getnum));
       lua_pushnumber(L, lua_tonumber(L, getnum));
@@ -624,7 +621,7 @@ static int testC (lua_State *L) {
       lua_pushstring(L, s);
       lua_pushstring(L, s);
     }
     }
     else if EQ("strlen") {
     else if EQ("strlen") {
-      lua_pushintegral(L, lua_strlen(L, getnum));
+      lua_pushinteger(L, lua_strlen(L, getnum));
     }
     }
     else if EQ("tocfunction") {
     else if EQ("tocfunction") {
       lua_pushcfunction(L, lua_tocfunction(L, getnum));
       lua_pushcfunction(L, lua_tocfunction(L, getnum));
@@ -633,7 +630,7 @@ static int testC (lua_State *L) {
       return getnum;
       return getnum;
     }
     }
     else if EQ("gettop") {
     else if EQ("gettop") {
-      lua_pushintegral(L, lua_gettop(L));
+      lua_pushinteger(L, lua_gettop(L));
     }
     }
     else if EQ("settop") {
     else if EQ("settop") {
       lua_settop(L, getnum);
       lua_settop(L, getnum);
@@ -642,7 +639,7 @@ static int testC (lua_State *L) {
       lua_pop(L, getnum);
       lua_pop(L, getnum);
     }
     }
     else if EQ("pushnum") {
     else if EQ("pushnum") {
-      lua_pushintegral(L, getnum);
+      lua_pushinteger(L, getnum);
     }
     }
     else if EQ("pushnil") {
     else if EQ("pushnil") {
       lua_pushnil(L);
       lua_pushnil(L);
@@ -651,7 +648,7 @@ static int testC (lua_State *L) {
       lua_pushboolean(L, getnum);
       lua_pushboolean(L, getnum);
     }
     }
     else if EQ("tobool") {
     else if EQ("tobool") {
-      lua_pushintegral(L, lua_toboolean(L, getnum));
+      lua_pushinteger(L, lua_toboolean(L, getnum));
     }
     }
     else if EQ("pushvalue") {
     else if EQ("pushvalue") {
       lua_pushvalue(L, getnum);
       lua_pushvalue(L, getnum);
@@ -718,7 +715,7 @@ static int testC (lua_State *L) {
     }
     }
     else if EQ("getn") {
     else if EQ("getn") {
       int i = getnum;
       int i = getnum;
-      lua_pushintegral(L, luaL_getn(L, i));
+      lua_pushinteger(L, luaL_getn(L, i));
     }
     }
     else if EQ("setn") {
     else if EQ("setn") {
       int i = getnum;
       int i = getnum;

+ 11 - 1
lua.h

@@ -1,5 +1,5 @@
 /*
 /*
-** $Id: lua.h,v 1.178 2003/07/07 13:30:57 roberto Exp roberto $
+** $Id: lua.h,v 1.179 2003/10/02 20:31:17 roberto Exp roberto $
 ** Lua - An Extensible Extension Language
 ** Lua - An Extensible Extension Language
 ** Tecgraf: Computer Graphics Technology Group, PUC-Rio, Brazil
 ** Tecgraf: Computer Graphics Technology Group, PUC-Rio, Brazil
 ** http://www.lua.org	mailto:[email protected]
 ** http://www.lua.org	mailto:[email protected]
@@ -98,6 +98,14 @@ typedef LUA_NUMBER lua_Number;
 #endif
 #endif
 
 
 
 
+/* type for integer functions */
+#ifndef LUA_INTEGER
+typedef long lua_Integer;
+#else
+typedef LUA_INTEGER lua_Integer;
+#endif
+
+
 /* mark for all API functions */
 /* mark for all API functions */
 #ifndef LUA_API
 #ifndef LUA_API
 #define LUA_API		extern
 #define LUA_API		extern
@@ -144,6 +152,7 @@ LUA_API int            lua_rawequal (lua_State *L, int idx1, int idx2);
 LUA_API int            lua_lessthan (lua_State *L, int idx1, int idx2);
 LUA_API int            lua_lessthan (lua_State *L, int idx1, int idx2);
 
 
 LUA_API lua_Number      lua_tonumber (lua_State *L, int idx);
 LUA_API lua_Number      lua_tonumber (lua_State *L, int idx);
+LUA_API lua_Integer     lua_tointeger (lua_State *L, int idx);
 LUA_API int             lua_toboolean (lua_State *L, int idx);
 LUA_API int             lua_toboolean (lua_State *L, int idx);
 LUA_API const char     *lua_tostring (lua_State *L, int idx);
 LUA_API const char     *lua_tostring (lua_State *L, int idx);
 LUA_API size_t          lua_strlen (lua_State *L, int idx);
 LUA_API size_t          lua_strlen (lua_State *L, int idx);
@@ -158,6 +167,7 @@ LUA_API const void     *lua_topointer (lua_State *L, int idx);
 */
 */
 LUA_API void  lua_pushnil (lua_State *L);
 LUA_API void  lua_pushnil (lua_State *L);
 LUA_API void  lua_pushnumber (lua_State *L, lua_Number n);
 LUA_API void  lua_pushnumber (lua_State *L, lua_Number n);
+LUA_API void  lua_pushinteger (lua_State *L, lua_Integer n);
 LUA_API void  lua_pushlstring (lua_State *L, const char *s, size_t l);
 LUA_API void  lua_pushlstring (lua_State *L, const char *s, size_t l);
 LUA_API void  lua_pushstring (lua_State *L, const char *s);
 LUA_API void  lua_pushstring (lua_State *L, const char *s);
 LUA_API const char *lua_pushvfstring (lua_State *L, const char *fmt,
 LUA_API const char *lua_pushvfstring (lua_State *L, const char *fmt,