From 2df454b95b67029e28bbe041885001ce4a14adfd Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Wed, 22 Jul 2015 16:59:47 +0200 Subject: [PATCH] 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. --- module/language/cps/intset.scm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/module/language/cps/intset.scm b/module/language/cps/intset.scm index 8c7a23bf3..bb35a23d3 100644 --- a/module/language/cps/intset.scm +++ b/module/language/cps/intset.scm @@ -102,7 +102,6 @@ (root transient-intset-root set-transient-intset-root!) (edit transient-intset-edit set-transient-intset-edit!)) -(define (new-leaf) 0) (define-inlinable (clone-leaf-and-set leaf i val) (if val (if leaf @@ -573,10 +572,10 @@ (else (make-intset a-min a-shift root))))))))) (define (intset-intersect a b) - (define tmp (new-leaf)) ;; Intersect leaves. (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. (define (intersect-branches/fresh shift a b i fresh) (let lp ((i 0))