diff options
Diffstat (limited to 'src/vm_engine.c')
-rw-r--r-- | src/vm_engine.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/vm_engine.c b/src/vm_engine.c index 3a18067cb..8c93c1de0 100644 --- a/src/vm_engine.c +++ b/src/vm_engine.c @@ -58,6 +58,7 @@ vm_run (SCM vm, SCM program, SCM args) struct scm_program *bp = NULL; /* program base pointer */ SCM external = SCM_EOL; /* external environment */ SCM *objects = NULL; /* constant objects */ + size_t object_count; /* length of OBJECTS */ SCM *stack_base = vp->stack_base; /* stack base address */ SCM *stack_limit = vp->stack_limit; /* stack limit address */ @@ -138,8 +139,10 @@ vm_run (SCM vm, SCM program, SCM args) goto vm_error; vm_error_wrong_type_apply: - err_msg = scm_from_locale_string ("VM: Wrong type to apply: ~S"); - err_args = SCM_LIST1 (program); + err_msg = scm_from_locale_string ("VM: Wrong type to apply: ~S " + "[IP offset: ~a]"); + err_args = SCM_LIST2 (program, + SCM_I_MAKINUM (ip - bp->base)); goto vm_error; vm_error_stack_overflow: @@ -166,6 +169,13 @@ vm_run (SCM vm, SCM program, SCM args) goto vm_error; #endif +#if VM_CHECK_OBJECT + vm_error_object: + err_msg = scm_from_locale_string ("VM: Invalid object table access"); + err_args = SCM_EOL; + goto vm_error; +#endif + vm_error: SYNC_ALL (); vp->last_frame = vm_heapify_frames (vm); |