Commit 52940c51ec9d6acf79fa0aeb5be0f921e8a89e62

If a no-let-bound buffer-local symbol's value is modified, propagate it.
src/data.c
(26 / 1)
  
9292Lisp_Object Qinteractive_form;
9393
9494static Lisp_Object swap_in_symval_forwarding P_ ((Lisp_Object, Lisp_Object));
95static int let_shadows_buffer_binding_p (struct Lisp_Symbol *symbol);
9596
9697Lisp_Object impl_Vmost_positive_fixnum, impl_Vmost_negative_fixnum;
9798
11831183 def:
11841184 valcontents = SYMBOL_VALUE (symbol);
11851185 if (BUFFER_LOCAL_VALUEP (valcontents))
1186 BLOCAL_REALVALUE (XBUFFER_LOCAL_VALUE (valcontents)) = newval;
1186 {
1187 Lisp_Object v = BLOCAL_CDR (XBUFFER_LOCAL_VALUE (valcontents));
1188 if (! let_shadows_buffer_binding_p (XSYMBOL (symbol)))
1189 {
1190 Lisp_Object it;
1191 for (it = XBUFFER_LOCAL_VALUE (valcontents)->thread_data;
1192 !NILP (it); it = XCDR (it))
1193 {
1194 Lisp_Object head = XCDR (XCAR (it));
1195 if (EQ (BLOCAL_BUFFER (XBUFFER_LOCAL_VALUE (valcontents)),
1196 BLOCAL_BUFFER_VEC (head))
1197 && (! XBUFFER_LOCAL_VALUE (valcontents)->check_frame
1198 || EQ (selected_frame, BLOCAL_FRAME_VEC (head))))
1199 {
1200 Lisp_Object rv
1201 = XBUFFER_LOCAL_VALUE (valcontents)->realvalue;
1202 Fsetcdr (assq_no_quit (XCAR (XCAR (it)),
1203 XTHREADLOCAL (rv)->thread_alist),
1204 newval);
1205 Fsetcdr (XCAR (BLOCAL_CDR_VEC (head)), newval);
1206 }
1207 }
1208 }
1209 BLOCAL_REALVALUE (XBUFFER_LOCAL_VALUE (valcontents)) = newval;
1210 }
11871211 else if (THREADLOCALP (valcontents))
11881212 {
11891213 Lisp_Object val = indirect_variable (XSYMBOL (symbol))->value;