summaryrefslogtreecommitdiff
path: root/libguile/weak-set.c
diff options
context:
space:
mode:
Diffstat (limited to 'libguile/weak-set.c')
-rw-r--r--libguile/weak-set.c10
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;
}