* libguile/vm-engine.c: Call scm_wrong_num_args in the wrong-num-args
case, to be more like the interpreter.
* libguile/vm-engine.h (ASSERT): New macro.
* libguile/vm-i-system.c (apply, goto/apply): Assert that nargs >= 2,
because the compiler should always feed us correct instructions.
(call/cc): If no values are returned to the continuation, signal
no_values instead of wrong_num_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:
* 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; \
POP (ls);
nargs = FETCH ();
- if (nargs < 2)
- goto vm_error_wrong_num_args;
+ ASSERT (nargs >= 2);
len = scm_ilength (ls);
if (len < 0)
POP (ls);
nargs = FETCH ();
- if (nargs < 2)
- goto vm_error_wrong_num_args;
+ ASSERT (nargs >= 2);
len = scm_ilength (ls);
if (len < 0)
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;