diff options
| -rw-r--r-- | src/alloc.c | 26 |
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 | ||
| 6965 | NO_INLINE /* To reduce stack depth in mark_object. */ | ||
| 6966 | static void | ||
| 6967 | mark_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, |