]> git.eshelyaron.com Git - emacs.git/commitdiff
(set_internal): Set the value in the `cons-cell' (for
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 22 Nov 2007 19:48:57 +0000 (19:48 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 22 Nov 2007 19:48:57 +0000 (19:48 +0000)
Buffer_Local_values) not only for frame-local variables.

src/ChangeLog
src/data.c

index 01eb385d032815581ed3e784bba6f612565f95b9..d6a4d2a71511323dcbd5791b09b28e4ddba13959 100644 (file)
@@ -1,3 +1,8 @@
+2007-11-22  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * data.c (set_internal): Set the value in the `cons-cell' (for
+       Buffer_Local_values) not only for frame-local variables.
+
 2007-11-22  Andreas Schwab  <schwab@suse.de>
 
        * data.c (Fnumber_to_string): Add cast when passing EMACS_INT
@@ -13,7 +18,7 @@
 2007-11-22  Dan Nicolaescu  <dann@ics.uci.edu>
 
        * term.c: Include stdarg.h.
-       (fatal): Implement using varargs. 
+       (fatal): Implement using varargs.
        * lisp.h (fatal): Add argument types. (Restore 2005-09-30 change).
 
 2007-11-21  Stefan Monnier  <monnier@iro.umontreal.ca>
index faf3bc8df9b92f36937ceeb43c626303ef46e881..787e81c9aed514390e7fcf4bafb3b71d485d625c 100644 (file)
@@ -1238,6 +1238,7 @@ set_internal (symbol, newval, buf, bindflag)
          || buf != XBUFFER (XBUFFER_LOCAL_VALUE (valcontents)->buffer)
          || (XBUFFER_LOCAL_VALUE (valcontents)->check_frame
              && !EQ (selected_frame, XBUFFER_LOCAL_VALUE (valcontents)->frame))
+         /* Also unload a global binding (if the var is local_if_set). */
          || (EQ (XCAR (current_alist_element),
                  current_alist_element)))
        {
@@ -1257,7 +1258,7 @@ set_internal (symbol, newval, buf, bindflag)
            {
              /* This buffer still sees the default value.  */
 
-             /* If the variable is a Lisp_Some_Buffer_Local_Value,
+             /* If the variable is not local_if_set,
                 or if this is `let' rather than `set',
                 make CURRENT-ALIST-ELEMENT point to itself,
                 indicating that we're seeing the default value.
@@ -1298,6 +1299,9 @@ set_internal (symbol, newval, buf, bindflag)
          XBUFFER_LOCAL_VALUE (valcontents)->frame = selected_frame;
        }
       innercontents = XBUFFER_LOCAL_VALUE (valcontents)->realvalue;
+
+      /* Store the new value in the cons-cell.  */
+      XSETCDR (XCAR (XBUFFER_LOCAL_VALUE (valcontents)->cdr), newval);
     }
 
   /* If storing void (making the symbol void), forward only through
@@ -1307,24 +1311,6 @@ set_internal (symbol, newval, buf, bindflag)
   else
     store_symval_forwarding (symbol, innercontents, newval, buf);
 
-  /* If we just set a variable whose current binding is frame-local,
-     store the new value in the frame parameter too.  */
-
-  if (BUFFER_LOCAL_VALUEP (valcontents))
-    {
-      /* What binding is loaded right now?  */
-      current_alist_element
-       = XCAR (XBUFFER_LOCAL_VALUE (valcontents)->cdr);
-
-      /* If the current buffer is not the buffer whose binding is
-        loaded, or if there may be frame-local bindings and the frame
-        isn't the right one, or if it's a Lisp_Buffer_Local_Value and
-        the default binding is loaded, the loaded binding may be the
-        wrong one.  */
-      if (XBUFFER_LOCAL_VALUE (valcontents)->found_for_frame)
-       XSETCDR (current_alist_element, newval);
-    }
-
   return newval;
 }
 \f