aboutsummaryrefslogtreecommitdiffstats
path: root/src/alloc.c
diff options
context:
space:
mode:
authorRichard M. Stallman1995-01-02 09:15:25 +0000
committerRichard M. Stallman1995-01-02 09:15:25 +0000
commit30e3190aac82c3a218fa2d435b37f04ab427e674 (patch)
treeed548efe55013fa77d956d9a8bebc0c15b203275 /src/alloc.c
parent8be5e0fcc3559112ef6c047fcb68132961b1081c (diff)
downloademacs-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.c21
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