From 15d48576ea737d51e579f101a870e37f62b81f22 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Thu, 26 Oct 1995 12:21:56 -0200 Subject: functions now may be declared with any "var" as a name; therefore they do not have a "baptism" name. Changes in debug API to acomodate that. --- table.c | 52 +++++++++++++++++++++------------------------------- 1 file changed, 21 insertions(+), 31 deletions(-) (limited to 'table.c') diff --git a/table.c b/table.c index 6de417a6..7f736d7a 100644 --- a/table.c +++ b/table.c @@ -3,9 +3,9 @@ ** Module to control static tables */ -char *rcs_table="$Id: table.c,v 2.35 1995/10/17 11:58:41 roberto Exp roberto $"; +char *rcs_table="$Id: table.c,v 2.36 1995/10/23 13:53:48 roberto Exp roberto $"; -#include +/*#include */ #include "mem.h" #include "opcode.h" @@ -15,6 +15,7 @@ char *rcs_table="$Id: table.c,v 2.35 1995/10/17 11:58:41 roberto Exp roberto $"; #include "inout.h" #include "lua.h" #include "fallback.h" +#include "luadebug.h" #define BUFFER_BLOCK 256 @@ -254,39 +255,28 @@ static void getglobal (void) } -static lua_CFunction cfunc = NULL; +static Object *functofind; static int checkfunc (Object *o) { - return ((o->tag == LUA_T_CMARK || o->tag == LUA_T_CFUNCTION) && - o->value.f == cfunc); + if (o->tag == LUA_T_FUNCTION) + return + ((functofind->tag == LUA_T_FUNCTION || functofind->tag == LUA_T_MARK) + && (functofind->value.tf == o->value.tf)); + if (o->tag == LUA_T_CFUNCTION) + return + ((functofind->tag == LUA_T_CFUNCTION || functofind->tag == LUA_T_CMARK) + && (functofind->value.f == o->value.f)); + return 0; } -void luaI_funcInfo (struct Object *func, char **filename, char **funcname, - char **objname, int *linedefined) -{ - if (func->tag == LUA_T_MARK || func->tag == LUA_T_FUNCTION) - { - TFunc *f = func->value.tf; - *filename = f->fileName; - *funcname = f->name1; - *objname = f->name2; - *linedefined = f->lineDefined; - } - else if (func->tag == LUA_T_CMARK || func->tag == LUA_T_CFUNCTION) - { - /* temporario: */ - cfunc = func->value.f; - *filename = "(C)"; - *linedefined = 0; - *funcname = lua_travsymbol(checkfunc); - if (*funcname) - *objname = 0; - else - { - *funcname = luaI_travfallbacks(checkfunc); - *objname = "(FB)"; - } - } +char *getobjname (lua_Object o, char **name) +{ /* try to find a name for given function */ + functofind = luaI_Address(o); + if ((*name = lua_travsymbol(checkfunc)) != NULL) + return "global"; + else if ((*name = luaI_travfallbacks(checkfunc)) != NULL) + return "fallback"; + else return ""; } -- cgit v1.2.3-55-g6feb