zombiezen.com/go/lua@v0.0.0-20231013005828-290725fb9140/internal/lua54/ltm.h (about)

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