diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c index 86b19de54..4436e7bd5 100644 --- a/libguile/vm-engine.c +++ b/libguile/vm-engine.c @@ -151,8 +151,9 @@ vm_run (SCM vm, SCM program, SCM args) goto vm_error; vm_error_wrong_num_args: - err_msg = scm_from_locale_string ("VM: Wrong number of arguments"); - err_args = SCM_EOL; + /* nargs and program are valid */ + scm_wrong_num_args (program); + /* shouldn't get here */ goto vm_error; vm_error_wrong_type_apply: diff --git a/libguile/vm-engine.h b/libguile/vm-engine.h index 936bbb48b..a7e162d96 100644 --- a/libguile/vm-engine.h +++ b/libguile/vm-engine.h @@ -127,6 +127,15 @@ * Cache/Sync */ +#define ENABLE_ASSERTIONS + +#ifdef ENABLE_ASSERTIONS +# define ASSERT(condition) if (SCM_UNLIKELY (!(condition))) abort() +#else +# define ASSERT(condition) +#endif + + #define CACHE_REGISTER() \ { \ ip = vp->ip; \ diff --git a/libguile/vm-i-system.c b/libguile/vm-i-system.c index db6d0a722..9a0e028a5 100644 --- a/libguile/vm-i-system.c +++ b/libguile/vm-i-system.c @@ -840,8 +840,7 @@ VM_DEFINE_INSTRUCTION (apply, "apply", 1, -1, 1) POP (ls); nargs = FETCH (); - if (nargs < 2) - goto vm_error_wrong_num_args; + ASSERT (nargs >= 2); len = scm_ilength (ls); if (len < 0) @@ -861,8 +860,7 @@ VM_DEFINE_INSTRUCTION (goto_apply, "goto/apply", 1, -1, 1) POP (ls); nargs = FETCH (); - if (nargs < 2) - goto vm_error_wrong_num_args; + ASSERT (nargs >= 2); len = scm_ilength (ls); if (len < 0) @@ -895,7 +893,7 @@ VM_DEFINE_INSTRUCTION (call_cc, "call/cc", 0, 1, 1) SCM values; values = scm_struct_ref (cont, SCM_INUM0); if (SCM_NULLP (values)) - goto vm_error_wrong_num_args; + goto vm_error_no_values; /* non-tail context does not accept multiple values? */ PUSH (SCM_CAR (values)); NEXT;