From ad8dd2aceaab8ed36b3600eabf5547224f35db99 Mon Sep 17 00:00:00 2001 From: Peter Bex Date: Wed, 6 Aug 2025 14:20:38 +0200 Subject: Make sure lset-adjoin removes markings on the adjoined elements Add a test to ensure this won't happen again. --- slsets.scm | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'slsets.scm') diff --git a/slsets.scm b/slsets.scm index 92d7356..4b83cf4 100644 --- a/slsets.scm +++ b/slsets.scm @@ -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) -- cgit v1.2.3