From a19f9056f3194332b22fe9ae96cd7f24d39c7d82 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Mon, 22 Jan 1996 15:40:00 -0200 Subject: new function "tostring". --- inout.c | 51 ++++++++++++++++++++++++++++++++------------------- inout.h | 5 +++-- table.c | 22 ++++++++++++---------- 3 files changed, 47 insertions(+), 31 deletions(-) diff --git a/inout.c b/inout.c index ab827c05..d59bf274 100644 --- a/inout.c +++ b/inout.c @@ -5,7 +5,7 @@ ** Also provides some predefined lua functions. */ -char *rcs_inout="$Id: inout.c,v 2.24 1995/10/23 13:54:11 roberto Exp roberto $"; +char *rcs_inout="$Id: inout.c,v 2.25 1995/10/25 13:05:51 roberto Exp roberto $"; #include #include @@ -132,27 +132,40 @@ void lua_internaldofile (void) lua_pushnil(); } -/* -** Internal function: print object values -*/ -void lua_print (void) + +static char *tostring (lua_Object obj) { - int i=1; - lua_Object obj; - while ((obj=lua_getparam (i++)) != LUA_NOOBJECT) - { - if (lua_isnumber(obj)) printf("%g\n",lua_getnumber(obj)); - else if (lua_isstring(obj)) printf("%s\n",lua_getstring(obj)); - else if (lua_isfunction(obj)) printf("function: %p\n",(luaI_Address(obj))->value.tf); - else if (lua_iscfunction(obj)) printf("cfunction: %p\n",lua_getcfunction(obj) -); - else if (lua_isuserdata(obj)) printf("userdata: %p\n",lua_getuserdata(obj)); - else if (lua_istable(obj)) printf("table: %p\n",avalue(luaI_Address(obj))); - else if (lua_isnil(obj)) printf("nil\n"); - else printf("invalid value to print\n"); - } + static char buff[20]; + if (lua_isstring(obj)) + return lua_getstring(obj); + if (lua_isnumber(obj)) + sprintf(buff, "%g", lua_getnumber(obj)); + else if (lua_isfunction(obj)) + sprintf(buff, "function: %p", (luaI_Address(obj))->value.tf); + else if (lua_iscfunction(obj)) + sprintf(buff, "cfunction: %p", lua_getcfunction(obj)); + else if (lua_isuserdata(obj)) + sprintf(buff, "userdata: %p", lua_getuserdata(obj)); + else if (lua_istable(obj)) + sprintf(buff, "table: %p", avalue(luaI_Address(obj))); + else if (lua_isnil(obj)) + sprintf(buff, "nil"); + else buff[0] = 0; + return buff; } +void luaI_tostring (void) +{ + lua_pushstring(tostring(lua_getparam(1))); +} + +void luaI_print (void) +{ + int i = 1; + lua_Object obj; + while ((obj = lua_getparam(i++)) != LUA_NOOBJECT) + printf("%s\n", tostring(obj)); +} /* ** Internal function: return an object type. diff --git a/inout.h b/inout.h index c3139a52..e145c341 100644 --- a/inout.h +++ b/inout.h @@ -1,5 +1,5 @@ /* -** $Id: inout.h,v 1.9 1995/05/16 17:23:58 roberto Exp roberto $ +** $Id: inout.h,v 1.10 1995/10/17 11:58:41 roberto Exp roberto $ */ @@ -21,7 +21,8 @@ void lua_closestring (void); void lua_internaldofile (void); void lua_internaldostring (void); -void lua_print (void); +void luaI_tostring (void); +void luaI_print (void); void luaI_type (void); void lua_obj2number (void); void luaI_error (void); diff --git a/table.c b/table.c index 794cb864..743f1f89 100644 --- a/table.c +++ b/table.c @@ -3,7 +3,7 @@ ** Module to control static tables */ -char *rcs_table="$Id: table.c,v 2.39 1996/01/09 20:23:19 roberto Exp $"; +char *rcs_table="$Id: table.c,v 2.40 1996/01/22 14:15:13 roberto Exp roberto $"; /*#include */ @@ -44,6 +44,14 @@ static void lua_initsymbol (void) Word n; lua_maxsymbol = BUFFER_BLOCK; lua_table = newvector(lua_maxsymbol, Symbol); + n = luaI_findsymbolbyname("nextvar"); + s_tag(n) = LUA_T_CFUNCTION; s_fvalue(n) = lua_nextvar; + n = luaI_findsymbolbyname("error"); + s_tag(n) = LUA_T_CFUNCTION; s_fvalue(n) = luaI_error; + n = luaI_findsymbolbyname("tonumber"); + s_tag(n) = LUA_T_CFUNCTION; s_fvalue(n) = lua_obj2number; + n = luaI_findsymbolbyname("setfallback"); + s_tag(n) = LUA_T_CFUNCTION; s_fvalue(n) = luaI_setfallback; n = luaI_findsymbolbyname("next"); s_tag(n) = LUA_T_CFUNCTION; s_fvalue(n) = lua_next; n = luaI_findsymbolbyname("dofile"); @@ -52,20 +60,14 @@ static void lua_initsymbol (void) s_tag(n) = LUA_T_CFUNCTION; s_fvalue(n) = setglobal; n = luaI_findsymbolbyname("getglobal"); s_tag(n) = LUA_T_CFUNCTION; s_fvalue(n) = getglobal; - n = luaI_findsymbolbyname("nextvar"); - s_tag(n) = LUA_T_CFUNCTION; s_fvalue(n) = lua_nextvar; n = luaI_findsymbolbyname("type"); s_tag(n) = LUA_T_CFUNCTION; s_fvalue(n) = luaI_type; - n = luaI_findsymbolbyname("tonumber"); - s_tag(n) = LUA_T_CFUNCTION; s_fvalue(n) = lua_obj2number; + n = luaI_findsymbolbyname("tostring"); + s_tag(n) = LUA_T_CFUNCTION; s_fvalue(n) = luaI_tostring; n = luaI_findsymbolbyname("print"); - s_tag(n) = LUA_T_CFUNCTION; s_fvalue(n) = lua_print; + s_tag(n) = LUA_T_CFUNCTION; s_fvalue(n) = luaI_print; n = luaI_findsymbolbyname("dostring"); s_tag(n) = LUA_T_CFUNCTION; s_fvalue(n) = lua_internaldostring; - n = luaI_findsymbolbyname("setfallback"); - s_tag(n) = LUA_T_CFUNCTION; s_fvalue(n) = luaI_setfallback; - n = luaI_findsymbolbyname("error"); - s_tag(n) = LUA_T_CFUNCTION; s_fvalue(n) = luaI_error; } -- cgit v1.2.3-55-g6feb