diff options
author | Mike Pall <mike> | 2010-02-15 17:36:29 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2010-02-15 17:36:29 +0100 |
commit | 3452bfcf8cb2dc67819485c7b011e5c6a59310f8 (patch) | |
tree | ef9296179854170d517ed02bdfc51f2003ceedf0 /src/lj_trace.c | |
parent | b838cd8dca67c8ea251faf71408a9d4c45fd0daf (diff) | |
download | luajit-3452bfcf8cb2dc67819485c7b011e5c6a59310f8.tar.gz luajit-3452bfcf8cb2dc67819485c7b011e5c6a59310f8.tar.bz2 luajit-3452bfcf8cb2dc67819485c7b011e5c6a59310f8.zip |
Add generic function handling for debug modules.
Don't call record vmevent for non-Lua functions.
Diffstat (limited to '')
-rw-r--r-- | src/lj_trace.c | 25 |
1 files changed, 13 insertions, 12 deletions
diff --git a/src/lj_trace.c b/src/lj_trace.c index b5946346..7b366d54 100644 --- a/src/lj_trace.c +++ b/src/lj_trace.c | |||
@@ -475,17 +475,18 @@ static TValue *trace_state(lua_State *L, lua_CFunction dummy, void *ud) | |||
475 | 475 | ||
476 | case LJ_TRACE_RECORD: | 476 | case LJ_TRACE_RECORD: |
477 | setvmstate(J2G(J), RECORD); | 477 | setvmstate(J2G(J), RECORD); |
478 | lj_vmevent_send(L, RECORD, | 478 | if (J->pt) |
479 | setintV(L->top++, J->curtrace); | 479 | lj_vmevent_send(L, RECORD, |
480 | setfuncV(L, L->top++, J->fn); | 480 | setintV(L->top++, J->curtrace); |
481 | setintV(L->top++, proto_bcpos(J->pt, J->pc)); | 481 | setfuncV(L, L->top++, J->fn); |
482 | setintV(L->top++, J->framedepth); | 482 | setintV(L->top++, proto_bcpos(J->pt, J->pc)); |
483 | if (bcmode_mm(bc_op(*J->pc)) == MM_call) { | 483 | setintV(L->top++, J->framedepth); |
484 | cTValue *o = &L->base[bc_a(*J->pc)]; | 484 | if (bcmode_mm(bc_op(*J->pc)) == MM_call) { |
485 | if (bc_op(*J->pc) == BC_ITERC) o -= 3; | 485 | cTValue *o = &L->base[bc_a(*J->pc)]; |
486 | copyTV(L, L->top++, o); | 486 | if (bc_op(*J->pc) == BC_ITERC) o -= 3; |
487 | } | 487 | copyTV(L, L->top++, o); |
488 | ); | 488 | } |
489 | ); | ||
489 | lj_record_ins(J); | 490 | lj_record_ins(J); |
490 | break; | 491 | break; |
491 | 492 | ||
@@ -537,7 +538,7 @@ void lj_trace_ins(jit_State *J, const BCIns *pc) | |||
537 | /* Note: J->L must already be set. pc is the true bytecode PC here. */ | 538 | /* Note: J->L must already be set. pc is the true bytecode PC here. */ |
538 | J->pc = pc; | 539 | J->pc = pc; |
539 | J->fn = curr_func(J->L); | 540 | J->fn = curr_func(J->L); |
540 | J->pt = funcproto(J->fn); | 541 | J->pt = isluafunc(J->fn) ? funcproto(J->fn) : NULL; |
541 | while (lj_vm_cpcall(J->L, NULL, (void *)J, trace_state) != 0) | 542 | while (lj_vm_cpcall(J->L, NULL, (void *)J, trace_state) != 0) |
542 | J->state = LJ_TRACE_ERR; | 543 | J->state = LJ_TRACE_ERR; |
543 | } | 544 | } |