bug-guile
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#13838: [PATCH] Fix duplicate removal of with-fluids


From: David Kastrup
Subject: bug#13838: [PATCH] Fix duplicate removal of with-fluids
Date: Thu, 28 Feb 2013 10:40:16 +0100

The following code displayed #f:

(define a (make-fluid))
(define b (make-fluid))
(with-fluids ((a 3) (a 1) (b 2))
             (display (fluid-ref b)))

In general, removing any duplicate that is not right at the end of the
(remaining) list will exhibit this problem.  The fluids and vals
arguments are modified in situ; the previous code only modified vals.
---
 libguile/fluids.c |    2 ++
 1 file changed, 2 insertions(+)

diff --git a/libguile/fluids.c b/libguile/fluids.c
index f1c09cb..bd59e26 100644
--- a/libguile/fluids.c
+++ b/libguile/fluids.c
@@ -326,6 +326,8 @@ scm_i_make_with_fluids (size_t n, SCM *fluids, SCM *vals)
           {
             vals[i] = vals[j]; /* later bindings win */
             n--;
+            fluids[j] = fluids[n];
+            vals[j] = vals[n];
             break;
           }
   }
-- 
1.7.10.4






reply via email to

[Prev in Thread] Current Thread [Next in Thread]