summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2021-07-20 22:59:14 -0700
committerKaz Kylheku <kaz@kylheku.com>2021-07-20 22:59:14 -0700
commit5e6dca52d383e649bc6e39de26ffa2474a2b9814 (patch)
tree9d458631cebb4bf60649178a66775779d63eb22b
parent6503c5f041f2b2791635b2bbcc7e0c9e323aeb84 (diff)
downloadtxr-5e6dca52d383e649bc6e39de26ffa2474a2b9814.tar.gz
txr-5e6dca52d383e649bc6e39de26ffa2474a2b9814.tar.bz2
txr-5e6dca52d383e649bc6e39de26ffa2474a2b9814.zip
hash: remove unnecessary tests in weak processing.
* hash.c (do_weak_tables): Do not test hash entries for reachability, only keys and values. This is not worth doing and possibly adds cycles.
-rw-r--r--hash.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/hash.c b/hash.c
index 3746ad44..90e48858 100644
--- a/hash.c
+++ b/hash.c
@@ -1236,7 +1236,7 @@ static void do_weak_tables(void)
for (iter = pchain; *iter; ) {
val entry = us_car(*iter);
- if (!gc_is_reachable(entry) && !gc_is_reachable(us_car(entry))) {
+ if (!gc_is_reachable(us_car(entry))) {
*iter = us_cdr(*iter);
#if CONFIG_EXTRA_DEBUGGING
if (us_car(entry) == break_obj)
@@ -1258,7 +1258,7 @@ static void do_weak_tables(void)
for (iter = pchain; *iter; ) {
val entry = us_car(*iter);
- if (!gc_is_reachable(entry) && !gc_is_reachable(us_cdr(entry))) {
+ if (!gc_is_reachable(us_cdr(entry))) {
*iter = us_cdr(*iter);
#if CONFIG_EXTRA_DEBUGGING
if (us_cdr(entry) == break_obj)
@@ -1280,8 +1280,7 @@ static void do_weak_tables(void)
for (iter = pchain; *iter; ) {
val entry = us_car(*iter);
- if (!gc_is_reachable(entry) &&
- (!gc_is_reachable(us_car(entry)) || !gc_is_reachable(us_cdr(entry))))
+ if (!gc_is_reachable(us_car(entry)) || !gc_is_reachable(us_cdr(entry)))
{
*iter = us_cdr(*iter);
#if CONFIG_EXTRA_DEBUGGING