mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-09 21:40:33 +02:00
intset-intersect bugfix
* module/language/cps/intset.scm (intset-intersect): Remove new-leaf procedure, inlining to single call site. An empty intersection properly produces #f so that the set can be pruned.
This commit is contained in:
parent
ff2beb186e
commit
2df454b95b
1 changed files with 2 additions and 3 deletions
|
@ -102,7 +102,6 @@
|
||||||
(root transient-intset-root set-transient-intset-root!)
|
(root transient-intset-root set-transient-intset-root!)
|
||||||
(edit transient-intset-edit set-transient-intset-edit!))
|
(edit transient-intset-edit set-transient-intset-edit!))
|
||||||
|
|
||||||
(define (new-leaf) 0)
|
|
||||||
(define-inlinable (clone-leaf-and-set leaf i val)
|
(define-inlinable (clone-leaf-and-set leaf i val)
|
||||||
(if val
|
(if val
|
||||||
(if leaf
|
(if leaf
|
||||||
|
@ -573,10 +572,10 @@
|
||||||
(else (make-intset a-min a-shift root)))))))))
|
(else (make-intset a-min a-shift root)))))))))
|
||||||
|
|
||||||
(define (intset-intersect a b)
|
(define (intset-intersect a b)
|
||||||
(define tmp (new-leaf))
|
|
||||||
;; Intersect leaves.
|
;; Intersect leaves.
|
||||||
(define (intersect-leaves a b)
|
(define (intersect-leaves a b)
|
||||||
(logand a b))
|
(let ((leaf (logand a b)))
|
||||||
|
(if (eqv? leaf 0) #f leaf)))
|
||||||
;; Intersect A and B from index I; the result will be fresh.
|
;; Intersect A and B from index I; the result will be fresh.
|
||||||
(define (intersect-branches/fresh shift a b i fresh)
|
(define (intersect-branches/fresh shift a b i fresh)
|
||||||
(let lp ((i 0))
|
(let lp ((i 0))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue