diff options
author | Peter Bex <peter@more-magic.net> | 2025-08-06 14:20:38 +0200 |
---|---|---|
committer | Peter Bex <peter@more-magic.net> | 2025-08-18 13:39:32 +0200 |
commit | a34b5dacb2b96ef0f534bef3ec130839544ab0c8 (patch) | |
tree | d61e3a03199b0f52473db7aa01d02de0b35002f6 /slsets.scm | |
parent | 098c6ba98e7cca7b0810d9283e2afd4a9ac5519b (diff) | |
download | slset-a34b5dacb2b96ef0f534bef3ec130839544ab0c8.tar.gz |
Make sure lset-adjoin removes markings on the adjoined elements
Add a test to ensure this won't happen again.
Diffstat (limited to 'slsets.scm')
-rw-r--r-- | slsets.scm | 17 |
1 files changed, 11 insertions, 6 deletions
@@ -78,12 +78,17 @@ (define (slset-adjoin lst . els) (with-marked-list lst (lambda (m) - (let lp ((lst lst) - (els els)) - (cond ((null? els) lst) - ((marked? (car els) m) (lp lst (cdr els))) - (else (mark! (car els) m) - (lp (cons (car els) lst) (cdr els)))))))) + (dynamic-wind + void + (lambda () + (let lp ((lst lst) + (els els)) + (cond ((null? els) lst) + ((marked? (car els) m) (lp lst (cdr els))) + (else (mark! (car els) m) + (lp (cons (car els) lst) (cdr els)))))) + (lambda () + (unmark-list! els m)))))) (define (slset-difference lst . lsts) (let lp ((lsts lsts) |