diff options
| author | Richard M. Stallman | 1995-01-02 09:15:25 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 1995-01-02 09:15:25 +0000 |
| commit | 30e3190aac82c3a218fa2d435b37f04ab427e674 (patch) | |
| tree | ed548efe55013fa77d956d9a8bebc0c15b203275 /src/alloc.c | |
| parent | 8be5e0fcc3559112ef6c047fcb68132961b1081c (diff) | |
| download | emacs-30e3190aac82c3a218fa2d435b37f04ab427e674.tar.gz emacs-30e3190aac82c3a218fa2d435b37f04ab427e674.zip | |
(mark_buffer, gc_sweep): Use BUF_INTERVALS.
(mark_buffer): In indirect buffer, mark the base buffer.
(mark_object): Make buffer case a branch of the Lisp_Vectorlike case.
Diffstat (limited to 'src/alloc.c')
| -rw-r--r-- | src/alloc.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/alloc.c b/src/alloc.c index 1d55fc50d04..d1733b351d5 100644 --- a/src/alloc.c +++ b/src/alloc.c | |||
| @@ -1523,7 +1523,9 @@ mark_object (objptr) | |||
| 1523 | break; | 1523 | break; |
| 1524 | 1524 | ||
| 1525 | case Lisp_Vectorlike: | 1525 | case Lisp_Vectorlike: |
| 1526 | if (GC_SUBRP (obj)) | 1526 | if (GC_BUFFERP (obj)) |
| 1527 | mark_buffer (obj); | ||
| 1528 | else if (GC_SUBRP (obj)) | ||
| 1527 | break; | 1529 | break; |
| 1528 | else if (GC_COMPILEDP (obj)) | 1530 | else if (GC_COMPILEDP (obj)) |
| 1529 | /* We could treat this just like a vector, but it is better | 1531 | /* We could treat this just like a vector, but it is better |
| @@ -1703,11 +1705,6 @@ mark_object (objptr) | |||
| 1703 | break; | 1705 | break; |
| 1704 | #endif /* LISP_FLOAT_TYPE */ | 1706 | #endif /* LISP_FLOAT_TYPE */ |
| 1705 | 1707 | ||
| 1706 | case Lisp_Buffer: | ||
| 1707 | if (!XMARKBIT (XBUFFER (obj)->name)) | ||
| 1708 | mark_buffer (obj); | ||
| 1709 | break; | ||
| 1710 | |||
| 1711 | case Lisp_Int: | 1708 | case Lisp_Int: |
| 1712 | break; | 1709 | break; |
| 1713 | 1710 | ||
| @@ -1724,12 +1721,13 @@ mark_buffer (buf) | |||
| 1724 | { | 1721 | { |
| 1725 | register struct buffer *buffer = XBUFFER (buf); | 1722 | register struct buffer *buffer = XBUFFER (buf); |
| 1726 | register Lisp_Object *ptr; | 1723 | register Lisp_Object *ptr; |
| 1724 | Lisp_Object base_buffer; | ||
| 1727 | 1725 | ||
| 1728 | /* This is the buffer's markbit */ | 1726 | /* This is the buffer's markbit */ |
| 1729 | mark_object (&buffer->name); | 1727 | mark_object (&buffer->name); |
| 1730 | XMARK (buffer->name); | 1728 | XMARK (buffer->name); |
| 1731 | 1729 | ||
| 1732 | MARK_INTERVAL_TREE (buffer->intervals); | 1730 | MARK_INTERVAL_TREE (BUF_INTERVALS (buffer)); |
| 1733 | 1731 | ||
| 1734 | #if 0 | 1732 | #if 0 |
| 1735 | mark_object (buffer->syntax_table); | 1733 | mark_object (buffer->syntax_table); |
| @@ -1753,6 +1751,13 @@ mark_buffer (buf) | |||
| 1753 | (char *)ptr < (char *)buffer + sizeof (struct buffer); | 1751 | (char *)ptr < (char *)buffer + sizeof (struct buffer); |
| 1754 | ptr++) | 1752 | ptr++) |
| 1755 | mark_object (ptr); | 1753 | mark_object (ptr); |
| 1754 | |||
| 1755 | /* If this is an indirect buffer, mark its base buffer. */ | ||
| 1756 | if (buffer->base_buffer) | ||
| 1757 | { | ||
| 1758 | XSETBUFFER (base_buffer, buffer->base_buffer); | ||
| 1759 | mark_buffer (base_buffer); | ||
| 1760 | } | ||
| 1756 | } | 1761 | } |
| 1757 | 1762 | ||
| 1758 | /* Sweep: find all structures not marked, and free them. */ | 1763 | /* Sweep: find all structures not marked, and free them. */ |
| @@ -1970,7 +1975,7 @@ gc_sweep () | |||
| 1970 | else | 1975 | else |
| 1971 | { | 1976 | { |
| 1972 | XUNMARK (buffer->name); | 1977 | XUNMARK (buffer->name); |
| 1973 | UNMARK_BALANCE_INTERVALS (buffer->intervals); | 1978 | UNMARK_BALANCE_INTERVALS (BUF_INTERVALS (buffer)); |
| 1974 | 1979 | ||
| 1975 | #if 0 | 1980 | #if 0 |
| 1976 | /* Each `struct Lisp_String *' was turned into a Lisp_Object | 1981 | /* Each `struct Lisp_String *' was turned into a Lisp_Object |