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: