diff options
Diffstat (limited to 'ChangeLog')
-rw-r--r-- | ChangeLog | 31 |
1 files changed, 31 insertions, 0 deletions
@@ -1,5 +1,36 @@ | |||
1 | 2014-10-21 Kaz Kylheku <kaz@kylheku.com> | 1 | 2014-10-21 Kaz Kylheku <kaz@kylheku.com> |
2 | 2 | ||
3 | Ensure that a hash reorganization doesn't take place | ||
4 | during a traversal, which could cause items to be visited | ||
5 | twice or skipped. | ||
6 | |||
7 | * gc.c (full_gc): Changed from static to exter (full_gc): Changed to | ||
8 | internal linkage. | ||
9 | |||
10 | * gc.h (full_gc): Declared. | ||
11 | |||
12 | * hash.c (struct hash): New member, usecount. | ||
13 | (struct hash_iter): New member, next. | ||
14 | (reachable_iters): New static variable. | ||
15 | (hash_mark): Reset the usecount of every reachable hash table. | ||
16 | (hash_iter_mark): Add every reachable iterator to reachable_iters | ||
17 | list. | ||
18 | (make_hash, make_similar_hash, copy_hash): Initialize usecount. | ||
19 | (gethash_c): Do not call hash_grow if usecount is nonzero. | ||
20 | (hash_begin): Initialize next field of hash_iter to null. | ||
21 | Increment use count on hash table. | ||
22 | (hash_next): When traversal ends, release use count, and | ||
23 | null out the hash table reference. | ||
24 | (do_weak_tables): New static function. | ||
25 | (do_iters): New static function. | ||
26 | (hash_process_weak): Weak hash processing logic moved | ||
27 | to do_weak_tables. Also calls do_iters. | ||
28 | |||
29 | * txr.1: Describe hash table traversal, and the assurances | ||
30 | and caveats about inserting and deleting items. | ||
31 | |||
32 | 2014-10-21 Kaz Kylheku <kaz@kylheku.com> | ||
33 | |||
3 | * eval.c (interp_fun): If the function doesn't have | 34 | * eval.c (interp_fun): If the function doesn't have |
4 | specials, then don't bother saving and restoring dynamic | 35 | specials, then don't bother saving and restoring dynamic |
5 | env around the argument binding and evaluation. | 36 | env around the argument binding and evaluation. |