src/lj_meta.h - luajit-2.0-src

Macros defined

Source code

  1. /*
  2. ** Metamethod handling.
  3. ** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
  4. */

  5. #ifndef _LJ_META_H
  6. #define _LJ_META_H

  7. #include "lj_obj.h"

  8. /* Metamethod handling */
  9. LJ_FUNC void lj_meta_init(lua_State *L);
  10. LJ_FUNC cTValue *lj_meta_cache(GCtab *mt, MMS mm, GCstr *name);
  11. LJ_FUNC cTValue *lj_meta_lookup(lua_State *L, cTValue *o, MMS mm);
  12. #if LJ_HASFFI
  13. LJ_FUNC int lj_meta_tailcall(lua_State *L, cTValue *tv);
  14. #endif

  15. #define lj_meta_fastg(g, mt, mm) \
  16.   ((mt) == NULL ? NULL : ((mt)->nomm & (1u<<(mm))) ? NULL : \
  17.    lj_meta_cache(mt, mm, mmname_str(g, mm)))
  18. #define lj_meta_fast(L, mt, mm)        lj_meta_fastg(G(L), mt, mm)

  19. /* C helpers for some instructions, called from assembler VM. */
  20. LJ_FUNCA cTValue *lj_meta_tget(lua_State *L, cTValue *o, cTValue *k);
  21. LJ_FUNCA TValue *lj_meta_tset(lua_State *L, cTValue *o, cTValue *k);
  22. LJ_FUNCA TValue *lj_meta_arith(lua_State *L, TValue *ra, cTValue *rb,
  23.                                cTValue *rc, BCReg op);
  24. LJ_FUNCA TValue *lj_meta_cat(lua_State *L, TValue *top, int left);
  25. LJ_FUNCA TValue * LJ_FASTCALL lj_meta_len(lua_State *L, cTValue *o);
  26. LJ_FUNCA TValue *lj_meta_equal(lua_State *L, GCobj *o1, GCobj *o2, int ne);
  27. LJ_FUNCA TValue * LJ_FASTCALL lj_meta_equal_cd(lua_State *L, BCIns ins);
  28. LJ_FUNCA TValue *lj_meta_comp(lua_State *L, cTValue *o1, cTValue *o2, int op);
  29. LJ_FUNCA void lj_meta_istype(lua_State *L, BCReg ra, BCReg tp);
  30. LJ_FUNCA void lj_meta_call(lua_State *L, TValue *func, TValue *top);
  31. LJ_FUNCA void LJ_FASTCALL lj_meta_for(lua_State *L, TValue *o);

  32. #endif