diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-02-17 23:11:49 -0800 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2013-02-17 23:11:49 -0800 |
| commit | 66a7b04b251aa33d557f9515f8cac16560266c3c (patch) | |
| tree | 5b9f1336456543bb5533ac108d7599b9d49cbc96 /src | |
| parent | 9b06a4506ed2ae222b19cafd184c66521b720581 (diff) | |
| parent | bc44d06c7374d5b925d8936227e6976622365a3e (diff) | |
| download | mruby-66a7b04b251aa33d557f9515f8cac16560266c3c.tar.gz mruby-66a7b04b251aa33d557f9515f8cac16560266c3c.zip | |
Merge pull request #845 from masuidrive/hook_fetch
Added a hook at VM code fetch.
Diffstat (limited to 'src')
| -rw-r--r-- | src/vm.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -480,13 +480,19 @@ argnum_error(mrb_state *mrb, int num) mrb->exc = (struct RObject*)mrb_object(exc); } +#ifdef ENABLE_DEBUG +#define HOOK_MRB_VM_FETCH_CODE(mrb, irep, pc, regs) ((mrb)->hook_vm_fetch_code ? (mrb)->hook_vm_fetch_code((mrb), (irep), (pc), (regs)) : NULL) +#else +#define HOOK_MRB_VM_FETCH_CODE(mrb, irep, pc, regs) +#endif + #ifdef __GNUC__ #define DIRECT_THREADED #endif #ifndef DIRECT_THREADED -#define INIT_DISPATCH for (;;) { i = *pc; switch (GET_OPCODE(i)) { +#define INIT_DISPATCH for (;;) { i = *pc; HOOK_MRB_VM_FETCH_CODE(mrb, irep, pc, regs); switch (GET_OPCODE(i)) { #define CASE(op) case op: #define NEXT pc++; break #define JUMP break @@ -496,8 +502,8 @@ argnum_error(mrb_state *mrb, int num) #define INIT_DISPATCH JUMP; return mrb_nil_value(); #define CASE(op) L_ ## op: -#define NEXT i=*++pc; goto *optable[GET_OPCODE(i)] -#define JUMP i=*pc; goto *optable[GET_OPCODE(i)] +#define NEXT i=*++pc; HOOK_MRB_VM_FETCH_CODE(mrb, irep, pc, regs); goto *optable[GET_OPCODE(i)] +#define JUMP i=*pc; HOOK_MRB_VM_FETCH_CODE(mrb, irep, pc, regs); goto *optable[GET_OPCODE(i)] #define END_DISPATCH |
