Mercurial > emacs
changeset 86338:cc3ad12e2f26
(set_internal): Set the value in the `cons-cell' (for
Buffer_Local_values) not only for frame-local variables.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Thu, 22 Nov 2007 19:48:57 +0000 |
parents | 161416156d88 |
children | 6f4793ab0756 |
files | src/ChangeLog src/data.c |
diffstat | 2 files changed, 11 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- 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 <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>
--- 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; }