ljx

FORK: LuaJIT with native 5.2 and 5.3 support
git clone https://git.neptards.moe/neptards/ljx.git
Log | Files | Refs | README

lj_vmevent.h (1571B)


      1 /*
      2 ** VM event handling.
      3 ** Copyright (C) 2005-2016 Mike Pall. See Copyright Notice in luajit.h
      4 */
      5 
      6 #ifndef _LJ_VMEVENT_H
      7 #define _LJ_VMEVENT_H
      8 
      9 #include "lj_obj.h"
     10 
     11 /* Registry key for VM event handler table. */
     12 #define LJ_VMEVENTS_REGKEY	"_VMEVENTS"
     13 #define LJ_VMEVENTS_HSIZE	4
     14 
     15 #define VMEVENT_MASK(ev)	((uint8_t)1 << ((int)(ev) & 7))
     16 #define VMEVENT_HASH(ev)	((int)(ev) & ~7)
     17 #define VMEVENT_HASHIDX(h)	((int)(h) << 3)
     18 #define VMEVENT_NOCACHE		255
     19 
     20 #define VMEVENT_DEF(name, hash) \
     21   LJ_VMEVENT_##name##_, \
     22   LJ_VMEVENT_##name = ((LJ_VMEVENT_##name##_) & 7)|((hash) << 3)
     23 
     24 /* VM event IDs. */
     25 typedef enum {
     26   VMEVENT_DEF(BC,	0x00003883),
     27   VMEVENT_DEF(TRACE,	0xb2d91467),
     28   VMEVENT_DEF(RECORD,	0x9284bf4f),
     29   VMEVENT_DEF(TEXIT,	0xb29df2b0),
     30   LJ_VMEVENT__MAX
     31 } VMEvent;
     32 
     33 #ifdef LUAJIT_DISABLE_VMEVENT
     34 #define lj_vmevent_send(L, ev, args)		UNUSED(L)
     35 #define lj_vmevent_send_(L, ev, args, post)	UNUSED(L)
     36 #else
     37 #define lj_vmevent_send(L, ev, args) \
     38   if (G(L)->vmevmask & VMEVENT_MASK(LJ_VMEVENT_##ev)) { \
     39     ptrdiff_t argbase = lj_vmevent_prepare(L, LJ_VMEVENT_##ev); \
     40     if (argbase) { \
     41       args \
     42       lj_vmevent_call(L, argbase); \
     43     } \
     44   }
     45 #define lj_vmevent_send_(L, ev, args, post) \
     46   if (G(L)->vmevmask & VMEVENT_MASK(LJ_VMEVENT_##ev)) { \
     47     ptrdiff_t argbase = lj_vmevent_prepare(L, LJ_VMEVENT_##ev); \
     48     if (argbase) { \
     49       args \
     50       lj_vmevent_call(L, argbase); \
     51       post \
     52     } \
     53   }
     54 
     55 LJ_FUNC ptrdiff_t lj_vmevent_prepare(lua_State *L, VMEvent ev);
     56 LJ_FUNC void lj_vmevent_call(lua_State *L, ptrdiff_t argbase);
     57 #endif
     58 
     59 #endif