diff options
Diffstat (limited to 'lauxlib.c')
-rw-r--r-- | lauxlib.c | 27 |
1 files changed, 26 insertions, 1 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lauxlib.c,v 1.163 2006/09/25 15:35:00 roberto Exp roberto $ | 2 | ** $Id: lauxlib.c,v 1.164 2006/10/16 14:38:38 roberto Exp roberto $ |
3 | ** Auxiliary functions for building Lua libraries | 3 | ** Auxiliary functions for building Lua libraries |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -230,6 +230,31 @@ LUALIB_API int luaL_callmeta (lua_State *L, int obj, const char *event) { | |||
230 | } | 230 | } |
231 | 231 | ||
232 | 232 | ||
233 | LUALIB_API const char *luaL_tostring (lua_State *L, int idx) { | ||
234 | if (!luaL_callmeta(L, idx, "__tostring")) { /* no metafield? */ | ||
235 | switch (lua_type(L, idx)) { | ||
236 | case LUA_TNUMBER: | ||
237 | lua_pushstring(L, lua_tostring(L, idx)); | ||
238 | break; | ||
239 | case LUA_TSTRING: | ||
240 | lua_pushvalue(L, idx); | ||
241 | break; | ||
242 | case LUA_TBOOLEAN: | ||
243 | lua_pushstring(L, (lua_toboolean(L, idx) ? "true" : "false")); | ||
244 | break; | ||
245 | case LUA_TNIL: | ||
246 | lua_pushliteral(L, "nil"); | ||
247 | break; | ||
248 | default: | ||
249 | lua_pushfstring(L, "%s: %p", luaL_typename(L, idx), | ||
250 | lua_topointer(L, idx)); | ||
251 | break; | ||
252 | } | ||
253 | } | ||
254 | return lua_tostring(L, -1); | ||
255 | } | ||
256 | |||
257 | |||
233 | LUALIB_API void luaL_register (lua_State *L, const char *libname, | 258 | LUALIB_API void luaL_register (lua_State *L, const char *libname, |
234 | const luaL_Reg *l) { | 259 | const luaL_Reg *l) { |
235 | luaI_openlib(L, libname, l, 0); | 260 | luaI_openlib(L, libname, l, 0); |