diff options
author | Andy Wingo <wingo@pobox.com> | 2024-08-15 12:18:02 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2024-08-15 12:18:02 +0200 |
commit | d0790d766bedf08fb65231eff53f6c8044eb94f1 (patch) | |
tree | 9e9a070ad2745de08f1312836995366f6e14f3f4 /module/language/cps | |
parent | 7aa4cfa9ded582952e16235d8aa634ada22febf2 (diff) | |
download | guile-d0790d766bedf08fb65231eff53f6c8044eb94f1.tar.gz |
Fix intset-fold-right on transient intsets
* module/language/cps/intset.scm (make-intset-folder): intset-fold-right
on a transient intset would dispatch to left fold after making the
persistent set. Sadness!
Diffstat (limited to 'module/language/cps')
-rw-r--r-- | module/language/cps/intset.scm | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/module/language/cps/intset.scm b/module/language/cps/intset.scm index 54def5cb5..0fe90fe9f 100644 --- a/module/language/cps/intset.scm +++ b/module/language/cps/intset.scm @@ -1,5 +1,5 @@ ;;; Functional name maps -;;; Copyright (C) 2014, 2015, 2017 Free Software Foundation, Inc. +;;; Copyright (C) 2014, 2015, 2017, 2024 Free Software Foundation, Inc. ;;; ;;; This library is free software: you can redistribute it and/or modify ;;; it under the terms of the GNU Lesser General Public License as @@ -454,13 +454,14 @@ (lp (if forward? (1+ i) (1- i)) seed ...))) (lp (if forward? (1+ i) (1- i)) seed ...))) (values seed ...))))))) - (match set - (($ <intset> min shift root) - (cond - ((not root) (values seed ...)) - (else (visit-branch root shift min seed ...)))) - (($ <transient-intset>) - (intset-fold f (persistent-intset set) seed ...))))) + (let fold ((set set)) + (match set + (($ <intset> min shift root) + (cond + ((not root) (values seed ...)) + (else (visit-branch root shift min seed ...)))) + (($ <transient-intset>) + (fold (persistent-intset set))))))) (define intset-fold (case-lambda |