summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libguile/vm-engine.c5
-rw-r--r--libguile/vm-engine.h9
-rw-r--r--libguile/vm-i-system.c8
3 files changed, 15 insertions, 7 deletions
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;