diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2021-08-29 07:29:09 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2021-08-29 07:29:09 -0700 |
commit | 13da0e5ed3d3d4be6d1f9cc9d786ff4e0f2edd68 (patch) | |
tree | 7ae339fc0501087c3c3c4c5c45c3d0c592afb995 /inst.nsi | |
parent | 9f142b398f53ab7844a0fdfc5b562e8bbccfebe2 (diff) | |
download | txr-13da0e5ed3d3d4be6d1f9cc9d786ff4e0f2edd68.tar.gz txr-13da0e5ed3d3d4be6d1f9cc9d786ff4e0f2edd68.tar.bz2 txr-13da0e5ed3d3d4be6d1f9cc9d786ff4e0f2edd68.zip |
seq_iter: fix gc issues.
* lib.h (struct seq_iter_ops): New operation, mark.
(seq_iter_ops_init): Default the mark operation to
seq_iter_mark_op.
(seq_iter_ops_init_nomark): New macro.
* lib.c (seq_iter_mark_op): New static function.
(si_range_cnum_ops, si_range_chr_ops, si_rev_range_cnum_ops,
si_rev_range_chr_ops, si_chr_ops): Initialize with
seq_iter_ops_init_nomark so that the iterator has no mark
operation. All other iterator types have the above new static
function as their mark op.
(seq_iter_mark): Simplified: if the iterator has a mark op,
call it.
(seq_next, iter_step): If the iterator has a mark op, that
means that the seq_get operation is likely replacing one heap
object with another, and so mut(iter) must be called to inform
the garbage collector of the assignment.
Diffstat (limited to 'inst.nsi')
0 files changed, 0 insertions, 0 deletions