/* ** $Id: ltm.c,v 1.1 2001/11/29 22:14:34 rieru Exp rieru $ ** Tag methods ** See Copyright Notice in lua.h */ #include #include #include "lua.h" #include "lobject.h" #include "lstate.h" #include "lstring.h" #include "ltable.h" #include "ltm.h" const char *const luaT_typenames[] = { "userdata", "nil", "number", "string", "table", "function" }; void luaT_init (lua_State *L) { static const char *const luaT_eventname[] = { /* ORDER TM */ "gettable", "settable", "index", "gc", "add", "sub", "mul", "div", "pow", "unm", "lt", "concat", "call" }; int i; for (i=0; itmname[i] = luaS_new(L, luaT_eventname[i]); G(L)->tmname[i]->tsv.marked = FIXMARK; /* never collect these names */ } } const TObject *luaT_gettm (Table *events, TMS event, TString *ename) { const TObject *tm = luaH_getstr(events, ename); if (ttype(tm) == LUA_TNIL) { /* no tag method? */ events->flags |= (1<eventtable, event); case LUA_TUSERDATA: return fasttm(L, uvalue(o)->uv.eventtable, event); default: return NULL; } }