2 ** Metamethod handling.
3 ** Copyright (C) 2005-2012 Mike Pall. See Copyright Notice in luajit.h
11 /* Metamethod handling */
12 LJ_FUNC
void lj_meta_init(lua_State
*L
);
13 LJ_FUNC cTValue
*lj_meta_cache(GCtab
*mt
, MMS mm
, GCstr
*name
);
14 LJ_FUNC cTValue
*lj_meta_lookup(lua_State
*L
, cTValue
*o
, MMS mm
);
16 LJ_FUNC
int lj_meta_tailcall(lua_State
*L
, cTValue
*tv
);
19 #define lj_meta_fastg(g, mt, mm) \
20 ((mt) == NULL ? NULL : ((mt)->nomm & (1u<<(mm))) ? NULL : \
21 lj_meta_cache(mt, mm, mmname_str(g, mm)))
22 #define lj_meta_fast(L, mt, mm) lj_meta_fastg(G(L), mt, mm)
24 /* C helpers for some instructions, called from assembler VM. */
25 LJ_FUNCA cTValue
*lj_meta_tget(lua_State
*L
, cTValue
*o
, cTValue
*k
);
26 LJ_FUNCA TValue
*lj_meta_tset(lua_State
*L
, cTValue
*o
, cTValue
*k
);
27 LJ_FUNCA TValue
*lj_meta_arith(lua_State
*L
, TValue
*ra
, cTValue
*rb
,
28 cTValue
*rc
, BCReg op
);
29 LJ_FUNCA TValue
*lj_meta_cat(lua_State
*L
, TValue
*top
, int left
);
30 LJ_FUNCA TValue
* LJ_FASTCALL
lj_meta_len(lua_State
*L
, cTValue
*o
);
31 LJ_FUNCA TValue
*lj_meta_equal(lua_State
*L
, GCobj
*o1
, GCobj
*o2
, int ne
);
32 LJ_FUNCA TValue
* LJ_FASTCALL
lj_meta_equal_cd(lua_State
*L
, BCIns ins
);
33 LJ_FUNCA TValue
*lj_meta_comp(lua_State
*L
, cTValue
*o1
, cTValue
*o2
, int op
);
34 LJ_FUNCA
void lj_meta_call(lua_State
*L
, TValue
*func
, TValue
*top
);
35 LJ_FUNCA
void LJ_FASTCALL
lj_meta_for(lua_State
*L
, TValue
*o
);