summaryrefslogtreecommitdiff
path: root/libguile/gc-mark.c
diff options
context:
space:
mode:
Diffstat (limited to 'libguile/gc-mark.c')
-rw-r--r--libguile/gc-mark.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/libguile/gc-mark.c b/libguile/gc-mark.c
index 84714507b..ccbcdcc2f 100644
--- a/libguile/gc-mark.c
+++ b/libguile/gc-mark.c
@@ -40,6 +40,7 @@ extern unsigned long * __libc_ia64_register_backing_store_base;
#include "libguile/smob.h"
#include "libguile/unif.h"
#include "libguile/async.h"
+#include "libguile/programs.h"
#include "libguile/ports.h"
#include "libguile/root.h"
#include "libguile/strings.h"
@@ -285,6 +286,13 @@ scm_gc_mark_dependencies (SCM p)
scm_gc_mark (SCM_CLOSCAR (ptr));
ptr = SCM_ENV (ptr);
goto gc_mark_nimp;
+ case scm_tc7_program:
+ if (SCM_PROGRAM_FREE_VARIABLES (ptr) != SCM_BOOL_F)
+ scm_gc_mark (SCM_PROGRAM_FREE_VARIABLES (ptr));
+ if (SCM_PROGRAM_OBJTABLE (ptr) != SCM_BOOL_F)
+ scm_gc_mark (SCM_PROGRAM_OBJTABLE (ptr));
+ ptr = SCM_PROGRAM_OBJCODE (ptr);
+ goto gc_mark_nimp;
case scm_tc7_vector:
i = SCM_SIMPLE_VECTOR_LENGTH (ptr);
if (i == 0)