diff options
Diffstat (limited to 'libguile/vm-engine.c')
-rw-r--r-- | libguile/vm-engine.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c index 90cf697f8..7a98a8a62 100644 --- a/libguile/vm-engine.c +++ b/libguile/vm-engine.c @@ -23,12 +23,14 @@ #define VM_USE_CLOCK 0 /* Bogoclock */ #define VM_CHECK_EXTERNAL 1 /* Check external link */ #define VM_CHECK_OBJECT 1 /* Check object table */ +#define VM_CHECK_CLOSURE 1 /* Check closure vars */ #define VM_PUSH_DEBUG_FRAMES 0 /* Push frames onto the evaluator debug stack */ #elif (VM_ENGINE == SCM_VM_DEBUG_ENGINE) #define VM_USE_HOOKS 1 #define VM_USE_CLOCK 1 #define VM_CHECK_EXTERNAL 1 #define VM_CHECK_OBJECT 1 +#define VM_CHECK_CLOSURE 1 #define VM_PUSH_DEBUG_FRAMES 1 #else #error unknown debug engine VM_ENGINE @@ -47,7 +49,9 @@ VM_NAME (struct scm_vm *vp, SCM program, SCM *argv, int nargs) /* Cache variables */ struct scm_objcode *bp = NULL; /* program base pointer */ - SCM external = SCM_EOL; /* external environment */ + SCM external = SCM_EOL; /* external environment REMOVEME */ + SCM *closure = NULL; /* closure variables */ + size_t closure_count = 0; /* length of CLOSURE */ SCM *objects = NULL; /* constant objects */ size_t object_count = 0; /* length of OBJECTS */ SCM *stack_base = vp->stack_base; /* stack base address */ @@ -240,6 +244,13 @@ VM_NAME (struct scm_vm *vp, SCM program, SCM *argv, int nargs) goto vm_error; #endif +#if VM_CHECK_CLOSURE + vm_error_closure: + err_msg = scm_from_locale_string ("VM: Invalid closure variable access"); + finish_args = SCM_EOL; + goto vm_error; +#endif + vm_error: SYNC_ALL (); |