From: Chris Hanson <org/chris-hanson/cph>
Date: Fri, 5 Nov 1999 05:37:41 +0000 (+0000)
Subject: Fix bug: UNDO-LOCAL-BINDINGS! must run the variable assignment daemons
X-Git-Tag: 20090517-FFI~4424
X-Git-Url: https://birchwood-abbey.net/git?a=commitdiff_plain;h=9bda84a9241c28d0c9dfe170ee2f43635eabc27b;p=mit-scheme.git

Fix bug: UNDO-LOCAL-BINDINGS! must run the variable assignment daemons
for the impermanent variables, and not the permanent variables.  What
it was doing was running it on a subset of the permanent variables,
due to a stupid programming error.
---

diff --git a/v7/src/edwin/buffer.scm b/v7/src/edwin/buffer.scm
index 70bcb4991..a01ef9d27 100644
--- a/v7/src/edwin/buffer.scm
+++ b/v7/src/edwin/buffer.scm
@@ -1,6 +1,6 @@
 ;;; -*-Scheme-*-
 ;;;
-;;; $Id: buffer.scm,v 1.172 1999/11/01 03:40:08 cph Exp $
+;;; $Id: buffer.scm,v 1.173 1999/11/05 05:37:41 cph Exp $
 ;;;
 ;;; Copyright (c) 1986, 1989-1999 Massachusetts Institute of Technology
 ;;;
@@ -231,12 +231,6 @@ The buffer is guaranteed to be deselected at that time."
 (define (buffer-remove! buffer key)
   (set-buffer-alist! buffer (del-assq! key (buffer-alist buffer))))
 
-(define (remove-impermanent-bindings! alist)
-  ((list-deletor!
-    (lambda (entry)
-      (not (variable-permanent-local? (car entry)))))
-   alist))
-
 (define (->buffer object)
   (cond ((buffer? object) object)
 	((and (mark? object) (mark-buffer object)))
@@ -390,12 +384,16 @@ The buffer is guaranteed to be deselected at that time."
 	    ((null? bindings))
 	  (set-variable-%value! (caar bindings)
 				(variable-default-value (caar bindings)))))
-    (set-buffer-local-bindings!
-     buffer
-     (if all? '() (remove-impermanent-bindings! bindings)))
-    (do ((bindings bindings (cdr bindings)))
-	((null? bindings))
-      (invoke-variable-assignment-daemons! buffer (caar bindings)))))
+    (call-with-values
+	(lambda ()
+	  (split-list bindings
+		      (lambda (binding)
+			(variable-permanent-local? (car binding)))))
+      (lambda (permanent impermanent)
+	(set-buffer-local-bindings! buffer (if all? '() permanent))
+	(do ((bindings impermanent (cdr bindings)))
+	    ((null? bindings))
+	  (invoke-variable-assignment-daemons! buffer (caar bindings)))))))
 
 (define (with-current-local-bindings! thunk)
   (dynamic-wind (lambda ()