diff options
| author | Richard M. Stallman | 1998-03-12 05:49:15 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1998-03-12 05:49:15 +0000 |
| commit | a9faeabee0005ac2065dbb315c23816561cb54be (patch) | |
| tree | d2c049d9655241bc5c804a09aab9bbf769d31c3f /src | |
| parent | 0315377157bb94d1c0ed0d1a365576228c0243ee (diff) | |
| download | emacs-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.c | 17 |
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; |