Mercurial > emacs
comparison src/alloc.c @ 21143:ce12eac1ee45
(gc_sweep, mark_object): Handle new data structure
for struct Lisp_Buffer_Local_Value.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Thu, 12 Mar 1998 05:49:15 +0000 |
parents | 371ed7bdfd2b |
children | 50929073a0ba |
comparison
equal
deleted
inserted
replaced
21142:77b24424ae6b | 21143:ce12eac1ee45 |
---|---|
2089 case Lisp_Misc_Buffer_Local_Value: | 2089 case Lisp_Misc_Buffer_Local_Value: |
2090 case Lisp_Misc_Some_Buffer_Local_Value: | 2090 case Lisp_Misc_Some_Buffer_Local_Value: |
2091 { | 2091 { |
2092 register struct Lisp_Buffer_Local_Value *ptr | 2092 register struct Lisp_Buffer_Local_Value *ptr |
2093 = XBUFFER_LOCAL_VALUE (obj); | 2093 = XBUFFER_LOCAL_VALUE (obj); |
2094 if (XMARKBIT (ptr->car)) break; | 2094 if (XMARKBIT (ptr->realvalue)) break; |
2095 XMARK (ptr->car); | 2095 XMARK (ptr->realvalue); |
2096 /* If the cdr is nil, avoid recursion for the car. */ | 2096 /* If the cdr is nil, avoid recursion for the car. */ |
2097 if (EQ (ptr->cdr, Qnil)) | 2097 if (EQ (ptr->cdr, Qnil)) |
2098 { | 2098 { |
2099 objptr = &ptr->car; | 2099 objptr = &ptr->realvalue; |
2100 goto loop; | 2100 goto loop; |
2101 } | 2101 } |
2102 mark_object (&ptr->car); | 2102 mark_object (&ptr->realvalue); |
2103 mark_object (&ptr->buffer); | |
2104 mark_object (&ptr->frame); | |
2103 /* See comment above under Lisp_Vector for why not use ptr here. */ | 2105 /* See comment above under Lisp_Vector for why not use ptr here. */ |
2104 objptr = &XBUFFER_LOCAL_VALUE (obj)->cdr; | 2106 objptr = &XBUFFER_LOCAL_VALUE (obj)->cdr; |
2105 goto loop; | 2107 goto loop; |
2106 } | 2108 } |
2107 | 2109 |
2431 total_symbols = num_used; | 2433 total_symbols = num_used; |
2432 total_free_symbols = num_free; | 2434 total_free_symbols = num_free; |
2433 } | 2435 } |
2434 | 2436 |
2435 #ifndef standalone | 2437 #ifndef standalone |
2436 /* Put all unmarked markers on free list. | 2438 /* Put all unmarked misc's on free list. |
2437 Unchain each one first from the buffer it points into, | 2439 For a marker, first unchain it from the buffer it points into. */ |
2438 but only if it's a real marker. */ | |
2439 { | 2440 { |
2440 register struct marker_block *mblk; | 2441 register struct marker_block *mblk; |
2441 struct marker_block **mprev = &marker_block; | 2442 struct marker_block **mprev = &marker_block; |
2442 register int lim = marker_block_index; | 2443 register int lim = marker_block_index; |
2443 register int num_free = 0, num_used = 0; | 2444 register int num_free = 0, num_used = 0; |
2458 case Lisp_Misc_Marker: | 2459 case Lisp_Misc_Marker: |
2459 markword = &mblk->markers[i].u_marker.chain; | 2460 markword = &mblk->markers[i].u_marker.chain; |
2460 break; | 2461 break; |
2461 case Lisp_Misc_Buffer_Local_Value: | 2462 case Lisp_Misc_Buffer_Local_Value: |
2462 case Lisp_Misc_Some_Buffer_Local_Value: | 2463 case Lisp_Misc_Some_Buffer_Local_Value: |
2463 markword = &mblk->markers[i].u_buffer_local_value.car; | 2464 markword = &mblk->markers[i].u_buffer_local_value.realvalue; |
2464 break; | 2465 break; |
2465 case Lisp_Misc_Overlay: | 2466 case Lisp_Misc_Overlay: |
2466 markword = &mblk->markers[i].u_overlay.plist; | 2467 markword = &mblk->markers[i].u_overlay.plist; |
2467 break; | 2468 break; |
2468 case Lisp_Misc_Free: | 2469 case Lisp_Misc_Free: |