diff options
author | Andy Wingo <wingo@oblong.net> | 2009-03-17 16:36:20 +0100 |
---|---|---|
committer | Andy Wingo <wingo@oblong.net> | 2009-03-17 16:36:20 +0100 |
commit | 325226dad9ab6f0488500e7381a5d1c07dc9ae91 (patch) | |
tree | 6b8d024a8e6106b1c49947e244d193ba0c17b6cd | |
parent | ccb6d6903d8fd638e7d4b9183a15bee770cff2ca (diff) | |
download | guile-325226dad9ab6f0488500e7381a5d1c07dc9ae91.tar.gz |
fix marking of double-cell subrs
* libguile/gc-mark.c (scm_gc_mark_dependencies): Mark the name, generic,
and properties of subrs.
-rw-r--r-- | libguile/gc-mark.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/libguile/gc-mark.c b/libguile/gc-mark.c index e73f6e10e..ab629f262 100644 --- a/libguile/gc-mark.c +++ b/libguile/gc-mark.c @@ -337,7 +337,13 @@ scm_gc_mark_dependencies (SCM p) ptr = SCM_CELL_OBJECT_1 (ptr); goto gc_mark_loop; case scm_tcs_subrs: - break; + if (SCM_CELL_WORD_2 (ptr) && *(SCM*)SCM_CELL_WORD_2 (ptr)) + /* the generic associated with this primitive */ + scm_gc_mark (*(SCM*)SCM_CELL_WORD_2 (ptr)); + if (SCM_NIMP (((SCM*)SCM_CELL_WORD_3 (ptr))[1])) + scm_gc_mark (((SCM*)SCM_CELL_WORD_3 (ptr))[1]); /* props */ + ptr = ((SCM*)SCM_CELL_WORD_3 (ptr))[0]; /* name */ + goto gc_mark_loop; case scm_tc7_port: i = SCM_PTOBNUM (ptr); #if (SCM_DEBUG_CELL_ACCESSES == 1) |