From 0f082bd3f7ad4854333728c6d0f71ef7df1fbec3 Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Fri, 8 May 2015 14:09:40 +0200 Subject: [PATCH] Fix intmap-add! transient bug * module/language/cps/intmap.scm (intmap-add!): Fix a bug creating a transient branch out of a persistent branch. --- module/language/cps/intmap.scm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/module/language/cps/intmap.scm b/module/language/cps/intmap.scm index 146b55039..9081f3362 100644 --- a/module/language/cps/intmap.scm +++ b/module/language/cps/intmap.scm @@ -174,7 +174,10 @@ (#f (let ((v (new-branch edit))) (vector-set! root idx v) v)) - (v (writable-branch v edit))))) + (v (let ((v* (writable-branch v edit))) + (unless (eq? v v*) + (vector-set! root idx v*)) + v*))))) (define (adjoin! i shift root) (let* ((shift (- shift *branch-bits*)) (idx (logand (ash i (- shift)) *branch-mask*)))