1*088332b5SXin Li /* 2*088332b5SXin Li ** $Id: ltm.h $ 3*088332b5SXin Li ** Tag methods 4*088332b5SXin Li ** See Copyright Notice in lua.h 5*088332b5SXin Li */ 6*088332b5SXin Li 7*088332b5SXin Li #ifndef ltm_h 8*088332b5SXin Li #define ltm_h 9*088332b5SXin Li 10*088332b5SXin Li 11*088332b5SXin Li #include "lobject.h" 12*088332b5SXin Li 13*088332b5SXin Li 14*088332b5SXin Li /* 15*088332b5SXin Li * WARNING: if you change the order of this enumeration, 16*088332b5SXin Li * grep "ORDER TM" and "ORDER OP" 17*088332b5SXin Li */ 18*088332b5SXin Li typedef enum { 19*088332b5SXin Li TM_INDEX, 20*088332b5SXin Li TM_NEWINDEX, 21*088332b5SXin Li TM_GC, 22*088332b5SXin Li TM_MODE, 23*088332b5SXin Li TM_LEN, 24*088332b5SXin Li TM_EQ, /* last tag method with fast access */ 25*088332b5SXin Li TM_ADD, 26*088332b5SXin Li TM_SUB, 27*088332b5SXin Li TM_MUL, 28*088332b5SXin Li TM_MOD, 29*088332b5SXin Li TM_POW, 30*088332b5SXin Li TM_DIV, 31*088332b5SXin Li TM_IDIV, 32*088332b5SXin Li TM_BAND, 33*088332b5SXin Li TM_BOR, 34*088332b5SXin Li TM_BXOR, 35*088332b5SXin Li TM_SHL, 36*088332b5SXin Li TM_SHR, 37*088332b5SXin Li TM_UNM, 38*088332b5SXin Li TM_BNOT, 39*088332b5SXin Li TM_LT, 40*088332b5SXin Li TM_LE, 41*088332b5SXin Li TM_CONCAT, 42*088332b5SXin Li TM_CALL, 43*088332b5SXin Li TM_CLOSE, 44*088332b5SXin Li TM_N /* number of elements in the enum */ 45*088332b5SXin Li } TMS; 46*088332b5SXin Li 47*088332b5SXin Li 48*088332b5SXin Li /* 49*088332b5SXin Li ** Mask with 1 in all fast-access methods. A 1 in any of these bits 50*088332b5SXin Li ** in the flag of a (meta)table means the metatable does not have the 51*088332b5SXin Li ** corresponding metamethod field. (Bit 7 of the flag is used for 52*088332b5SXin Li ** 'isrealasize'.) 53*088332b5SXin Li */ 54*088332b5SXin Li #define maskflags (~(~0u << (TM_EQ + 1))) 55*088332b5SXin Li 56*088332b5SXin Li 57*088332b5SXin Li /* 58*088332b5SXin Li ** Test whether there is no tagmethod. 59*088332b5SXin Li ** (Because tagmethods use raw accesses, the result may be an "empty" nil.) 60*088332b5SXin Li */ 61*088332b5SXin Li #define notm(tm) ttisnil(tm) 62*088332b5SXin Li 63*088332b5SXin Li 64*088332b5SXin Li #define gfasttm(g,et,e) ((et) == NULL ? NULL : \ 65*088332b5SXin Li ((et)->flags & (1u<<(e))) ? NULL : luaT_gettm(et, e, (g)->tmname[e])) 66*088332b5SXin Li 67*088332b5SXin Li #define fasttm(l,et,e) gfasttm(G(l), et, e) 68*088332b5SXin Li 69*088332b5SXin Li #define ttypename(x) luaT_typenames_[(x) + 1] 70*088332b5SXin Li 71*088332b5SXin Li LUAI_DDEC(const char *const luaT_typenames_[LUA_TOTALTYPES];) 72*088332b5SXin Li 73*088332b5SXin Li 74*088332b5SXin Li LUAI_FUNC const char *luaT_objtypename (lua_State *L, const TValue *o); 75*088332b5SXin Li 76*088332b5SXin Li LUAI_FUNC const TValue *luaT_gettm (Table *events, TMS event, TString *ename); 77*088332b5SXin Li LUAI_FUNC const TValue *luaT_gettmbyobj (lua_State *L, const TValue *o, 78*088332b5SXin Li TMS event); 79*088332b5SXin Li LUAI_FUNC void luaT_init (lua_State *L); 80*088332b5SXin Li 81*088332b5SXin Li LUAI_FUNC void luaT_callTM (lua_State *L, const TValue *f, const TValue *p1, 82*088332b5SXin Li const TValue *p2, const TValue *p3); 83*088332b5SXin Li LUAI_FUNC void luaT_callTMres (lua_State *L, const TValue *f, 84*088332b5SXin Li const TValue *p1, const TValue *p2, StkId p3); 85*088332b5SXin Li LUAI_FUNC void luaT_trybinTM (lua_State *L, const TValue *p1, const TValue *p2, 86*088332b5SXin Li StkId res, TMS event); 87*088332b5SXin Li LUAI_FUNC void luaT_tryconcatTM (lua_State *L); 88*088332b5SXin Li LUAI_FUNC void luaT_trybinassocTM (lua_State *L, const TValue *p1, 89*088332b5SXin Li const TValue *p2, int inv, StkId res, TMS event); 90*088332b5SXin Li LUAI_FUNC void luaT_trybiniTM (lua_State *L, const TValue *p1, lua_Integer i2, 91*088332b5SXin Li int inv, StkId res, TMS event); 92*088332b5SXin Li LUAI_FUNC int luaT_callorderTM (lua_State *L, const TValue *p1, 93*088332b5SXin Li const TValue *p2, TMS event); 94*088332b5SXin Li LUAI_FUNC int luaT_callorderiTM (lua_State *L, const TValue *p1, int v2, 95*088332b5SXin Li int inv, int isfloat, TMS event); 96*088332b5SXin Li 97*088332b5SXin Li LUAI_FUNC void luaT_adjustvarargs (lua_State *L, int nfixparams, 98*088332b5SXin Li struct CallInfo *ci, const Proto *p); 99*088332b5SXin Li LUAI_FUNC void luaT_getvarargs (lua_State *L, struct CallInfo *ci, 100*088332b5SXin Li StkId where, int wanted); 101*088332b5SXin Li 102*088332b5SXin Li 103*088332b5SXin Li #endif 104