new format "%I" in 'lua_pushfstring' for lua_Integer

This commit is contained in:
Roberto Ierusalimschy 2013-04-25 10:53:13 -03:00
parent 01b6fe0cbf
commit 9c43d6a24e
2 changed files with 20 additions and 3 deletions

View File

@ -1,5 +1,5 @@
/* /*
** $Id: lauxlib.c,v 1.247 2012/10/19 15:55:01 roberto Exp roberto $ ** $Id: lauxlib.c,v 1.248 2013/03/21 13:54:57 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
*/ */
@ -737,7 +737,17 @@ LUALIB_API int luaL_len (lua_State *L, int idx) {
LUALIB_API const char *luaL_tolstring (lua_State *L, int idx, size_t *len) { LUALIB_API const char *luaL_tolstring (lua_State *L, int idx, size_t *len) {
if (!luaL_callmeta(L, idx, "__tostring")) { /* no metafield? */ if (!luaL_callmeta(L, idx, "__tostring")) { /* no metafield? */
switch (lua_type(L, idx)) { switch (lua_type(L, idx)) {
case LUA_TNUMBER: case LUA_TNUMBER: {
if (lua_isinteger(L, idx)) {
lua_Integer n = lua_tointeger(L, idx);
lua_pushfstring(L, "%I", n);
}
else {
lua_Number n = lua_tonumber(L, idx);
lua_pushfstring(L, "%f", n);
}
break;
}
case LUA_TSTRING: case LUA_TSTRING:
lua_pushvalue(L, idx); lua_pushvalue(L, idx);
break; break;

View File

@ -1,5 +1,5 @@
/* /*
** $Id: lobject.c,v 2.58 2013/02/20 14:08:56 roberto Exp roberto $ ** $Id: lobject.c,v 2.59 2013/04/16 18:46:28 roberto Exp roberto $
** Some generic functions over Lua objects ** Some generic functions over Lua objects
** See Copyright Notice in lua.h ** See Copyright Notice in lua.h
*/ */
@ -219,6 +219,13 @@ const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) {
setnvalue(L->top++, cast_num(va_arg(argp, int))); setnvalue(L->top++, cast_num(va_arg(argp, int)));
break; break;
} }
case 'I': {
char buff[LUA_MAXINTEGER2STR];
lua_Integer i = cast(lua_Integer, va_arg(argp, lua_Integer));
int l = lua_integer2str(buff, i);
pushstr(L, buff, l);
break;
}
case 'f': { case 'f': {
setnvalue(L->top++, cast_num(va_arg(argp, l_uacNumber))); setnvalue(L->top++, cast_num(va_arg(argp, l_uacNumber)));
break; break;