comparison src/alloc.c @ 11243:054ecfce1820

(Fmake_marker, mark_object): Use XMISCTYPE. (clear_marks, gc_sweep): Use u_marker union elt to extrat misc type.
author Richard M. Stallman <rms@gnu.org>
date Fri, 07 Apr 1995 05:28:07 +0000
parents 3f19a379eb99
children e0f3fa4e7bf3
comparison
equal deleted inserted replaced
11242:36e8e27c8625 11243:054ecfce1820
905 { 905 {
906 register Lisp_Object val; 906 register Lisp_Object val;
907 register struct Lisp_Marker *p; 907 register struct Lisp_Marker *p;
908 908
909 val = allocate_misc (); 909 val = allocate_misc ();
910 XMISC (val)->type = Lisp_Misc_Marker; 910 XMISCTYPE (val) = Lisp_Misc_Marker;
911 p = XMARKER (val); 911 p = XMARKER (val);
912 p->buffer = 0; 912 p->buffer = 0;
913 p->bufpos = 0; 913 p->bufpos = 0;
914 p->chain = Qnil; 914 p->chain = Qnil;
915 return val; 915 return val;
1538 1538
1539 for (sblk = marker_block; sblk; sblk = sblk->next) 1539 for (sblk = marker_block; sblk; sblk = sblk->next)
1540 { 1540 {
1541 register int i; 1541 register int i;
1542 for (i = 0; i < lim; i++) 1542 for (i = 0; i < lim; i++)
1543 if (sblk->markers[i].type == Lisp_Misc_Marker) 1543 if (sblk->markers[i].u_marker.type == Lisp_Misc_Marker)
1544 XUNMARK (sblk->markers[i].u_marker.chain); 1544 XUNMARK (sblk->markers[i].u_marker.chain);
1545 lim = MARKER_BLOCK_SIZE; 1545 lim = MARKER_BLOCK_SIZE;
1546 } 1546 }
1547 } 1547 }
1548 /* Clear mark bits on all buffers */ 1548 /* Clear mark bits on all buffers */
1729 } 1729 }
1730 } 1730 }
1731 break; 1731 break;
1732 1732
1733 case Lisp_Misc: 1733 case Lisp_Misc:
1734 switch (XMISC (obj)->type) 1734 switch (XMISCTYPE (obj))
1735 { 1735 {
1736 case Lisp_Misc_Marker: 1736 case Lisp_Misc_Marker:
1737 XMARK (XMARKER (obj)->chain); 1737 XMARK (XMARKER (obj)->chain);
1738 /* DO NOT mark thru the marker's chain. 1738 /* DO NOT mark thru the marker's chain.
1739 The buffer's markers chain does not preserve markers from gc; 1739 The buffer's markers chain does not preserve markers from gc;
2031 { 2031 {
2032 register int i; 2032 register int i;
2033 for (i = 0; i < lim; i++) 2033 for (i = 0; i < lim; i++)
2034 { 2034 {
2035 Lisp_Object *markword; 2035 Lisp_Object *markword;
2036 switch (mblk->markers[i].type) 2036 switch (mblk->markers[i].u_marker.type)
2037 { 2037 {
2038 case Lisp_Misc_Marker: 2038 case Lisp_Misc_Marker:
2039 markword = &mblk->markers[i].u_marker.chain; 2039 markword = &mblk->markers[i].u_marker.chain;
2040 break; 2040 break;
2041 case Lisp_Misc_Buffer_Local_Value: 2041 case Lisp_Misc_Buffer_Local_Value:
2050 break; 2050 break;
2051 } 2051 }
2052 if (markword && !XMARKBIT (*markword)) 2052 if (markword && !XMARKBIT (*markword))
2053 { 2053 {
2054 Lisp_Object tem; 2054 Lisp_Object tem;
2055 if (mblk->markers[i].type == Lisp_Misc_Marker) 2055 if (mblk->markers[i].u_marker.type == Lisp_Misc_Marker)
2056 { 2056 {
2057 /* tem1 avoids Sun compiler bug */ 2057 /* tem1 avoids Sun compiler bug */
2058 struct Lisp_Marker *tem1 = &mblk->markers[i].u_marker; 2058 struct Lisp_Marker *tem1 = &mblk->markers[i].u_marker;
2059 XSETMARKER (tem, tem1); 2059 XSETMARKER (tem, tem1);
2060 unchain_marker (tem); 2060 unchain_marker (tem);
2061 } 2061 }
2062 /* We could leave the type alone, since nobody checks it, 2062 /* We could leave the type alone, since nobody checks it,
2063 but this might catch bugs faster. */ 2063 but this might catch bugs faster. */
2064 mblk->markers[i].type = Lisp_Misc_Free; 2064 mblk->markers[i].u_marker.type = Lisp_Misc_Free;
2065 mblk->markers[i].u_free.chain = marker_free_list; 2065 mblk->markers[i].u_free.chain = marker_free_list;
2066 marker_free_list = &mblk->markers[i]; 2066 marker_free_list = &mblk->markers[i];
2067 num_free++; 2067 num_free++;
2068 } 2068 }
2069 else 2069 else