aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/alloc.c26
1 files changed, 11 insertions, 15 deletions
diff --git a/src/alloc.c b/src/alloc.c
index 45a950c4f81..cda8ba1ad46 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -6962,20 +6962,6 @@ mark_face_cache (struct face_cache *c)
6962 } 6962 }
6963} 6963}
6964 6964
6965NO_INLINE /* To reduce stack depth in mark_object. */
6966static void
6967mark_localized_symbol (struct Lisp_Symbol *ptr)
6968{
6969 struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (ptr);
6970 Lisp_Object where = blv->where;
6971 /* If the value is set up for a killed buffer restore its global binding. */
6972 if ((BUFFERP (where) && !BUFFER_LIVE_P (XBUFFER (where))))
6973 swap_in_global_binding (ptr);
6974 mark_object (blv->where);
6975 mark_object (blv->valcell);
6976 mark_object (blv->defcell);
6977}
6978
6979/* Remove killed buffers or items whose car is a killed buffer from 6965/* Remove killed buffers or items whose car is a killed buffer from
6980 LIST, and mark other items. Return changed LIST, which is marked. */ 6966 LIST, and mark other items. Return changed LIST, which is marked. */
6981 6967
@@ -7377,7 +7363,17 @@ process_mark_stack (ptrdiff_t base_sp)
7377 break; 7363 break;
7378 } 7364 }
7379 case SYMBOL_LOCALIZED: 7365 case SYMBOL_LOCALIZED:
7380 mark_localized_symbol (ptr); 7366 {
7367 struct Lisp_Buffer_Local_Value *blv = SYMBOL_BLV (ptr);
7368 Lisp_Object where = blv->where;
7369 /* If the value is set up for a killed buffer,
7370 restore its global binding. */
7371 if (BUFFERP (where) && !BUFFER_LIVE_P (XBUFFER (where)))
7372 swap_in_global_binding (ptr);
7373 mark_stack_push_value (blv->where);
7374 mark_stack_push_value (blv->valcell);
7375 mark_stack_push_value (blv->defcell);
7376 }
7381 break; 7377 break;
7382 case SYMBOL_FORWARDED: 7378 case SYMBOL_FORWARDED:
7383 /* If the value is forwarded to a buffer or keyboard field, 7379 /* If the value is forwarded to a buffer or keyboard field,