diff --git a/libguile/vm-engine.h b/libguile/vm-engine.h index 51c462c43..ccc1408d9 100644 --- a/libguile/vm-engine.h +++ b/libguile/vm-engine.h @@ -195,6 +195,7 @@ */ #undef RUN_HOOK +#undef RUN_HOOK1 #if VM_USE_HOOKS #define RUN_HOOK(h) \ { \ @@ -204,8 +205,19 @@ vm_dispatch_hook (vm, h); \ } \ } +#define RUN_HOOK1(h, x) \ + { \ + if (SCM_UNLIKELY (vp->trace_level > 0)) \ + { \ + PUSH (x); \ + SYNC_REGISTER (); \ + vm_dispatch_hook (vm, h); \ + DROP(); \ + } \ + } #else #define RUN_HOOK(h) +#define RUN_HOOK1(h, x) #endif #define BOOT_HOOK() RUN_HOOK (SCM_VM_BOOT_HOOK) @@ -215,7 +227,7 @@ #define ENTER_HOOK() RUN_HOOK (SCM_VM_ENTER_HOOK) #define APPLY_HOOK() RUN_HOOK (SCM_VM_APPLY_HOOK) #define EXIT_HOOK() RUN_HOOK (SCM_VM_EXIT_HOOK) -#define RETURN_HOOK() RUN_HOOK (SCM_VM_RETURN_HOOK) +#define RETURN_HOOK(n) RUN_HOOK1 (SCM_VM_RETURN_HOOK, SCM_I_MAKINUM (n)) #define VM_HANDLE_INTERRUPTS \ SCM_ASYNC_TICK_WITH_CODE (SYNC_REGISTER ()) diff --git a/libguile/vm-i-system.c b/libguile/vm-i-system.c index 2e1dae9d0..8297c5b0e 100644 --- a/libguile/vm-i-system.c +++ b/libguile/vm-i-system.c @@ -1123,7 +1123,7 @@ VM_DEFINE_INSTRUCTION (63, return, "return", 0, 1, 1) { vm_return: EXIT_HOOK (); - RETURN_HOOK (); + RETURN_HOOK (1); VM_HANDLE_INTERRUPTS; @@ -1163,7 +1163,7 @@ VM_DEFINE_INSTRUCTION (64, return_values, "return/values", 1, -1, -1) nvalues = FETCH (); vm_return_values: EXIT_HOOK (); - RETURN_HOOK (); + RETURN_HOOK (nvalues); VM_HANDLE_INTERRUPTS;