# HG changeset patch # User Stefan Monnier # Date 1195760937 0 # Node ID cc3ad12e2f26df99fbecff001f97a0fd9d69d295 # Parent 161416156d882de51b082cf7ca103ab3d3165ad2 (set_internal): Set the value in the `cons-cell' (for Buffer_Local_values) not only for frame-local variables. diff -r 161416156d88 -r cc3ad12e2f26 src/ChangeLog --- a/src/ChangeLog Thu Nov 22 18:08:06 2007 +0000 +++ b/src/ChangeLog Thu Nov 22 19:48:57 2007 +0000 @@ -1,3 +1,8 @@ +2007-11-22 Stefan Monnier + + * 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 * data.c (Fnumber_to_string): Add cast when passing EMACS_INT @@ -13,7 +18,7 @@ 2007-11-22 Dan Nicolaescu * 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 diff -r 161416156d88 -r cc3ad12e2f26 src/data.c --- a/src/data.c Thu Nov 22 18:08:06 2007 +0000 +++ b/src/data.c Thu Nov 22 19:48:57 2007 +0000 @@ -1238,6 +1238,7 @@ || 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 @@ { /* 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 @@ 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 @@ 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; }