summaryrefslogtreecommitdiff
path: root/src/vm_engine.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/vm_engine.h')
-rw-r--r--src/vm_engine.h30
1 files changed, 19 insertions, 11 deletions
diff --git a/src/vm_engine.h b/src/vm_engine.h
index 3c7ef7b02..ac12caabe 100644
--- a/src/vm_engine.h
+++ b/src/vm_engine.h
@@ -48,6 +48,7 @@
#define VM_USE_HOOKS 1 /* Various hooks */
#define VM_USE_CLOCK 1 /* Bogoclock */
#define VM_CHECK_EXTERNAL 1 /* Check external link */
+#define VM_CHECK_OBJECT 1 /* Check object table */
/*
@@ -133,17 +134,16 @@
/* Get a local copy of the program's "object table" (i.e. the vector of
external bindings that are referenced by the program), initialized by
`load-program'. */
-#define CACHE_PROGRAM() \
-{ \
- size_t _vsize; \
- ssize_t _vincr; \
- scm_t_array_handle _vhandle; \
- \
- bp = SCM_PROGRAM_DATA (program); \
- /* Was: objects = SCM_VELTS (bp->objs); */ \
- objects = scm_vector_elements (bp->objs, &_vhandle, \
- &_vsize, &_vincr); \
- scm_array_handle_release (&_vhandle); \
+#define CACHE_PROGRAM() \
+{ \
+ ssize_t _vincr; \
+ scm_t_array_handle _vhandle; \
+ \
+ bp = SCM_PROGRAM_DATA (program); \
+ /* Was: objects = SCM_VELTS (bp->objs); */ \
+ objects = scm_vector_elements (bp->objs, &_vhandle, \
+ &object_count, &_vincr); \
+ scm_array_handle_release (&_vhandle); \
}
#define SYNC_BEFORE_GC() \
@@ -169,6 +169,14 @@
#define CHECK_EXTERNAL(e)
#endif
+/* Accesses to a program's object table. */
+#if VM_CHECK_OBJECT
+#define CHECK_OBJECT(_num) \
+ do { if ((_num) >= object_count) goto vm_error_object; } while (0)
+#else
+#define CHECK_OBJECT(_num)
+#endif
+
/*
* Hooks