From 569c11e30659c45af971a5e02df008cb238fcaa5 Mon Sep 17 00:00:00 2001 From: Stefan Monnier Date: Thu, 22 Nov 2007 19:48:57 +0000 Subject: [PATCH] (set_internal): Set the value in the `cons-cell' (for Buffer_Local_values) not only for frame-local variables. --- src/ChangeLog | 7 ++++++- src/data.c | 24 +++++------------------- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/src/ChangeLog b/src/ChangeLog index 01eb385d032..d6a4d2a7151 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -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 --git a/src/data.c b/src/data.c index faf3bc8df9b..787e81c9aed 100644 --- a/src/data.c +++ b/src/data.c @@ -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; } -- 2.39.2