summaryrefslogtreecommitdiff
path: root/libguile/vm-engine.c
diff options
context:
space:
mode:
Diffstat (limited to 'libguile/vm-engine.c')
-rw-r--r--libguile/vm-engine.c13
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 ();