summaryrefslogtreecommitdiff
path: root/libguile/vm.c
diff options
context:
space:
mode:
Diffstat (limited to 'libguile/vm.c')
-rw-r--r--libguile/vm.c42
1 files changed, 13 insertions, 29 deletions
diff --git a/libguile/vm.c b/libguile/vm.c
index c59c91b8f..a7355e4a5 100644
--- a/libguile/vm.c
+++ b/libguile/vm.c
@@ -198,11 +198,6 @@ scm_i_capture_current_stack (void)
0);
}
-static void invoke_apply_hook (scm_thread *thread);
-static void invoke_return_hook (scm_thread *thread);
-static void invoke_next_hook (scm_thread *thread);
-static void invoke_abort_hook (scm_thread *thread);
-
/* Return the first integer greater than or equal to LEN such that
LEN % ALIGN == 0. Return LEN if ALIGN is zero. */
#define ROUND_UP(len, align) \
@@ -260,26 +255,19 @@ invoke_hook (scm_thread *thread, int hook_num)
vp->trace_level = saved_trace_level;
}
-static void
-invoke_apply_hook (scm_thread *thread)
-{
- return invoke_hook (thread, SCM_VM_APPLY_HOOK);
-}
-static void
-invoke_return_hook (scm_thread *thread)
-{
- return invoke_hook (thread, SCM_VM_RETURN_HOOK);
-}
-static void
-invoke_next_hook (scm_thread *thread)
-{
- return invoke_hook (thread, SCM_VM_NEXT_HOOK);
-}
-static void
-invoke_abort_hook (scm_thread *thread)
-{
- return invoke_hook (thread, SCM_VM_ABORT_HOOK);
-}
+#define DEFINE_INVOKE_HOOK(H, h) \
+ static void \
+ invoke_##h##_hook (scm_thread *thread) SCM_NOINLINE; \
+ static void \
+ invoke_##h##_hook (scm_thread *thread) \
+ { \
+ return invoke_hook (thread, SCM_VM_##H##_HOOK); \
+ }
+
+DEFINE_INVOKE_HOOK(APPLY, apply)
+DEFINE_INVOKE_HOOK(RETURN, return)
+DEFINE_INVOKE_HOOK(NEXT, next)
+DEFINE_INVOKE_HOOK(ABORT, abort)
/*
@@ -1820,10 +1808,6 @@ scm_bootstrap_vm (void)
scm_vm_intrinsics.abort_to_prompt = abort_to_prompt;
scm_vm_intrinsics.get_callee_vcode = get_callee_vcode;
scm_vm_intrinsics.unpack_values_object = unpack_values_object;
- scm_vm_intrinsics.invoke_apply_hook = invoke_apply_hook;
- scm_vm_intrinsics.invoke_return_hook = invoke_return_hook;
- scm_vm_intrinsics.invoke_next_hook = invoke_next_hook;
- scm_vm_intrinsics.invoke_abort_hook = invoke_abort_hook;
scm_vm_intrinsics.foreign_call = foreign_call;
sym_keyword_argument_error = scm_from_latin1_symbol ("keyword-argument-error");