diff options
Diffstat (limited to 'libguile/gc-mark.c')
-rw-r--r-- | libguile/gc-mark.c | 8 |
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) |