diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2007-02-07 15:51:21 -0200 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2007-02-07 15:51:21 -0200 |
commit | cf86576a838dbe7a11f64116bdc9b1942d233ff8 (patch) | |
tree | efa331ab508dd45e2c8b3365a6e1728f91256cc6 | |
parent | 92dc64e1216ad9559827bdcce7bb9b0cf5d7c0ef (diff) | |
download | lua-cf86576a838dbe7a11f64116bdc9b1942d233ff8.tar.gz lua-cf86576a838dbe7a11f64116bdc9b1942d233ff8.tar.bz2 lua-cf86576a838dbe7a11f64116bdc9b1942d233ff8.zip |
new function luaL_tostring
-rw-r--r-- | lauxlib.c | 27 | ||||
-rw-r--r-- | lauxlib.h | 3 | ||||
-rw-r--r-- | lbaselib.c | 22 |
3 files changed, 30 insertions, 22 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); |
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lauxlib.h,v 1.87 2005/12/29 15:32:11 roberto Exp roberto $ | 2 | ** $Id: lauxlib.h,v 1.88 2006/04/12 20:31:15 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 | */ |
@@ -45,6 +45,7 @@ LUALIB_API void (luaL_register) (lua_State *L, const char *libname, | |||
45 | const luaL_Reg *l); | 45 | const luaL_Reg *l); |
46 | LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e); | 46 | LUALIB_API int (luaL_getmetafield) (lua_State *L, int obj, const char *e); |
47 | LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e); | 47 | LUALIB_API int (luaL_callmeta) (lua_State *L, int obj, const char *e); |
48 | LUALIB_API const char *luaL_tostring (lua_State *L, int idx); | ||
48 | LUALIB_API int (luaL_typerror) (lua_State *L, int narg, const char *tname); | 49 | LUALIB_API int (luaL_typerror) (lua_State *L, int narg, const char *tname); |
49 | LUALIB_API int (luaL_argerror) (lua_State *L, int numarg, const char *extramsg); | 50 | LUALIB_API int (luaL_argerror) (lua_State *L, int numarg, const char *extramsg); |
50 | LUALIB_API const char *(luaL_checklstring) (lua_State *L, int numArg, | 51 | LUALIB_API const char *(luaL_checklstring) (lua_State *L, int numArg, |
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: lbaselib.c,v 1.194 2006/10/20 19:30:53 roberto Exp roberto $ | 2 | ** $Id: lbaselib.c,v 1.195 2006/10/24 19:46:12 roberto Exp roberto $ |
3 | ** Basic library | 3 | ** Basic library |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -396,25 +396,7 @@ static int luaB_xpcall (lua_State *L) { | |||
396 | 396 | ||
397 | static int luaB_tostring (lua_State *L) { | 397 | static int luaB_tostring (lua_State *L) { |
398 | luaL_checkany(L, 1); | 398 | luaL_checkany(L, 1); |
399 | if (luaL_callmeta(L, 1, "__tostring")) /* is there a metafield? */ | 399 | luaL_tostring(L, 1); |
400 | return 1; /* use its value */ | ||
401 | switch (lua_type(L, 1)) { | ||
402 | case LUA_TNUMBER: | ||
403 | lua_pushstring(L, lua_tostring(L, 1)); | ||
404 | break; | ||
405 | case LUA_TSTRING: | ||
406 | lua_pushvalue(L, 1); | ||
407 | break; | ||
408 | case LUA_TBOOLEAN: | ||
409 | lua_pushstring(L, (lua_toboolean(L, 1) ? "true" : "false")); | ||
410 | break; | ||
411 | case LUA_TNIL: | ||
412 | lua_pushliteral(L, "nil"); | ||
413 | break; | ||
414 | default: | ||
415 | lua_pushfstring(L, "%s: %p", luaL_typename(L, 1), lua_topointer(L, 1)); | ||
416 | break; | ||
417 | } | ||
418 | return 1; | 400 | return 1; |
419 | } | 401 | } |
420 | 402 | ||