diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2021-07-20 22:59:14 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2021-07-20 22:59:14 -0700 |
commit | 5e6dca52d383e649bc6e39de26ffa2474a2b9814 (patch) | |
tree | 9d458631cebb4bf60649178a66775779d63eb22b | |
parent | 6503c5f041f2b2791635b2bbcc7e0c9e323aeb84 (diff) | |
download | txr-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.c | 7 |
1 files changed, 3 insertions, 4 deletions
@@ -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 |