changeset 46199:ca604a52d267

(Fbuffer_local_value): Store current value into its binding so we get the up-to-date value for the binding that is loaded.
author Richard M. Stallman <rms@gnu.org>
date Sun, 07 Jul 2002 10:17:26 +0000
parents 9b8d032820a2
children b2d574ba36c5
files src/buffer.c
diffstat 1 files changed, 20 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/buffer.c	Sun Jul 07 10:07:32 2002 +0000
+++ b/src/buffer.c	Sun Jul 07 10:17:26 2002 +0000
@@ -854,7 +854,26 @@
 	result = Fdefault_value (symbol);
     }
   else
-    result = XCDR (result);
+    {
+      Lisp_Object valcontents;
+      Lisp_Object current_alist_element;
+
+      /* What binding is loaded right now?  */
+      valcontents = SYMBOL_VALUE (symbol);
+      current_alist_element
+	= XCAR (XBUFFER_LOCAL_VALUE (valcontents)->cdr);
+
+      /* The value of the currently loaded binding is not
+	 stored in it, but rather in the realvalue slot.
+	 Store that value into the binding it belongs to
+	 in case that is the one we are about to use.  */
+
+      Fsetcdr (current_alist_element,
+	       do_symval_forwarding (XBUFFER_LOCAL_VALUE (valcontents)->realvalue));
+
+      /* Now get the (perhaps updated) value out of the binding.  */
+      result = XCDR (result);
+    }
 
   if (EQ (result, Qunbound))
     return Fsignal (Qvoid_variable, Fcons (symbol, Qnil));