diff options
Diffstat (limited to 'libguile/weak-set.c')
-rw-r--r-- | libguile/weak-set.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/libguile/weak-set.c b/libguile/weak-set.c index 8cf1b8286..06fec2d6b 100644 --- a/libguile/weak-set.c +++ b/libguile/weak-set.c @@ -419,9 +419,12 @@ resize_set (scm_t_weak_set *set) new_entries[new_k].hash = copy.hash; new_entries[new_k].key = copy.key; - if (SCM_HEAP_OBJECT_P (SCM_PACK (copy.key))) + if (SCM_THOB_P (SCM_PACK (copy.key))) SCM_I_REGISTER_DISAPPEARING_LINK ((void **) &new_entries[new_k].key, (void *) new_entries[new_k].key); + else if (scm_is_pair (SCM_PACK (copy.key))) + SCM_I_REGISTER_DISAPPEARING_LINK ((void **) &new_entries[new_k].key, + (void *) (new_entries[new_k].key - scm_pair_tag)); } } @@ -580,9 +583,12 @@ weak_set_add_x (scm_t_weak_set *set, unsigned long hash, entries[k].hash = hash; entries[k].key = SCM_UNPACK (obj); - if (SCM_HEAP_OBJECT_P (obj)) + if (SCM_THOB_P (obj)) SCM_I_REGISTER_DISAPPEARING_LINK ((void **) &entries[k].key, (void *) SCM2PTR (obj)); + else if (scm_is_pair (obj)) + SCM_I_REGISTER_DISAPPEARING_LINK ((void **) &entries[k].key, + (void *) SCM2PTR (SCM_REMOVE_PAIR_TAG (obj))); return obj; } |