?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

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