aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorRichard M. Stallman1998-03-12 05:49:15 +0000
committerRichard M. Stallman1998-03-12 05:49:15 +0000
commita9faeabee0005ac2065dbb315c23816561cb54be (patch)
treed2c049d9655241bc5c804a09aab9bbf769d31c3f /src
parent0315377157bb94d1c0ed0d1a365576228c0243ee (diff)
downloademacs-a9faeabee0005ac2065dbb315c23816561cb54be.tar.gz
emacs-a9faeabee0005ac2065dbb315c23816561cb54be.zip
(gc_sweep, mark_object): Handle new data structure
for struct Lisp_Buffer_Local_Value.
Diffstat (limited to 'src')
-rw-r--r--src/alloc.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/alloc.c b/src/alloc.c
index 5ae44416943..337a7f0ede5 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -2091,15 +2091,17 @@ mark_object (argptr)
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;
@@ -2433,9 +2435,8 @@ gc_sweep ()
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;
@@ -2460,7 +2461,7 @@ gc_sweep ()
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;