aboutsummaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/eval.c b/src/eval.c
index 8d8b9b14d42..41085cdef5c 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -2899,16 +2899,31 @@ specbind (symbol, value)
2899 || BUFFER_OBJFWDP (XSYMBOL (symbol)->value)) 2899 || BUFFER_OBJFWDP (XSYMBOL (symbol)->value))
2900 { 2900 {
2901 Lisp_Object current_buffer, binding_buffer; 2901 Lisp_Object current_buffer, binding_buffer;
2902
2902 /* For a local variable, record both the symbol and which 2903 /* For a local variable, record both the symbol and which
2903 buffer's value we are saving. */ 2904 buffer's value we are saving. */
2904 current_buffer = Fcurrent_buffer (); 2905 current_buffer = Fcurrent_buffer ();
2905 binding_buffer = current_buffer; 2906 binding_buffer = current_buffer;
2907
2906 /* If the variable is not local in this buffer, 2908 /* If the variable is not local in this buffer,
2907 we are saving the global value, so restore that. */ 2909 we are saving the global value, so restore that. */
2908 if (NILP (Flocal_variable_p (symbol, binding_buffer))) 2910 if (NILP (Flocal_variable_p (symbol, binding_buffer)))
2909 binding_buffer = Qnil; 2911 binding_buffer = Qnil;
2910 specpdl_ptr->symbol 2912 specpdl_ptr->symbol
2911 = Fcons (symbol, Fcons (binding_buffer, current_buffer)); 2913 = Fcons (symbol, Fcons (binding_buffer, current_buffer));
2914
2915 /* If SYMBOL is a per-buffer variable which doesn't have a
2916 buffer-local value here, make the `let' change the global
2917 value by changing the value of SYMBOL in all buffers not
2918 having their own value. This is consistent with what
2919 happens with other buffer-local variables. */
2920 if (NILP (binding_buffer)
2921 && BUFFER_OBJFWDP (XSYMBOL (symbol)->value))
2922 {
2923 ++specpdl_ptr;
2924 Fset_default (symbol, value);
2925 return;
2926 }
2912 } 2927 }
2913 else 2928 else
2914 specpdl_ptr->symbol = symbol; 2929 specpdl_ptr->symbol = symbol;