/* ** Tag methods ** See Copyright Notice in lua.h */ #ifndef GRIM_LTM_H #define GRIM_LTM_H #include "engines/grim/lua/lobject.h" #include "engines/grim/lua/lstate.h" namespace Grim { /* * WARNING: if you change the order of this enumeration, * grep "ORDER IM" */ typedef enum { IM_GETTABLE = 0, IM_SETTABLE, IM_INDEX, IM_GETGLOBAL, IM_SETGLOBAL, IM_ADD, IM_SUB, IM_MUL, IM_DIV, IM_POW, IM_UNM, IM_LT, IM_LE, IM_GT, IM_GE, IM_CONCAT, IM_GC, IM_FUNCTION } eIMS; typedef int32 IMS; #define IM_N 18 struct IM { TObject int_method[IM_N]; }; #define luaT_getim(tag, event) (&IMtable[-(tag)].int_method[event]) #define luaT_getimbyObj(o, e) (luaT_getim(luaT_efectivetag(o), (e))) extern const char *luaT_eventname[]; void luaT_init(); void luaT_realtag(int32 tag); int32 luaT_efectivetag(TObject *o); void luaT_settagmethod(int32 t, const char *event, TObject *func); TObject *luaT_gettagmethod(int32 t, const char *event); const char *luaT_travtagmethods(int32 (*fn)(TObject *)); void luaT_setfallback(); // only if LUA_COMPAT2_5 } // end of namespace Grim #endif