Mercurial > emacs
comparison src/alloc.c @ 5868:a7bd57a60cb8
(mark_object): Fetch obj from *objptr at loop, not at the gotos.
author | Karl Heuer <kwzh@gnu.org> |
---|---|
date | Wed, 09 Feb 1994 22:04:55 +0000 |
parents | 6389ed5b45ac |
children | fbda87c8ad54 |
comparison
equal
deleted
inserted
replaced
5867:907e14c58c65 | 5868:a7bd57a60cb8 |
---|---|
1473 mark_object (objptr) | 1473 mark_object (objptr) |
1474 Lisp_Object *objptr; | 1474 Lisp_Object *objptr; |
1475 { | 1475 { |
1476 register Lisp_Object obj; | 1476 register Lisp_Object obj; |
1477 | 1477 |
1478 loop: | |
1478 obj = *objptr; | 1479 obj = *objptr; |
1480 loop2: | |
1479 XUNMARK (obj); | 1481 XUNMARK (obj); |
1480 | |
1481 loop: | |
1482 | 1482 |
1483 if ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) ((char *) pure + PURESIZE) | 1483 if ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) ((char *) pure + PURESIZE) |
1484 && (PNTR_COMPARISON_TYPE) XPNTR (obj) >= (PNTR_COMPARISON_TYPE) pure) | 1484 && (PNTR_COMPARISON_TYPE) XPNTR (obj) >= (PNTR_COMPARISON_TYPE) pure) |
1485 return; | 1485 return; |
1486 | 1486 |
1565 { | 1565 { |
1566 if (i != COMPILED_CONSTANTS) | 1566 if (i != COMPILED_CONSTANTS) |
1567 mark_object (&ptr1->contents[i]); | 1567 mark_object (&ptr1->contents[i]); |
1568 } | 1568 } |
1569 objptr = &ptr1->contents[COMPILED_CONSTANTS]; | 1569 objptr = &ptr1->contents[COMPILED_CONSTANTS]; |
1570 obj = *objptr; | |
1571 goto loop; | 1570 goto loop; |
1572 } | 1571 } |
1573 | 1572 |
1574 #ifdef MULTI_FRAME | 1573 #ifdef MULTI_FRAME |
1575 case Lisp_Frame: | 1574 case Lisp_Frame: |
1610 XSETTYPE (*(Lisp_Object *) &ptr->name, Lisp_String); | 1609 XSETTYPE (*(Lisp_Object *) &ptr->name, Lisp_String); |
1611 mark_object (&ptr->name); | 1610 mark_object (&ptr->name); |
1612 ptr = ptr->next; | 1611 ptr = ptr->next; |
1613 if (ptr) | 1612 if (ptr) |
1614 { | 1613 { |
1614 /* For the benefit of the last_marked log. */ | |
1615 objptr = (Lisp_Object *)&XSYMBOL (obj)->next; | |
1615 ptrx = ptr; /* Use of ptrx avoids compiler bug on Sun */ | 1616 ptrx = ptr; /* Use of ptrx avoids compiler bug on Sun */ |
1616 XSETSYMBOL (obj, ptrx); | 1617 XSETSYMBOL (obj, ptrx); |
1617 goto loop; | 1618 /* We can't goto loop here because *objptr doesn't contain an |
1619 actual Lisp_Object with valid datatype field. */ | |
1620 goto loop2; | |
1618 } | 1621 } |
1619 } | 1622 } |
1620 break; | 1623 break; |
1621 | 1624 |
1622 case Lisp_Marker: | 1625 case Lisp_Marker: |
1636 XMARK (ptr->car); | 1639 XMARK (ptr->car); |
1637 /* If the cdr is nil, avoid recursion for the car. */ | 1640 /* If the cdr is nil, avoid recursion for the car. */ |
1638 if (EQ (ptr->cdr, Qnil)) | 1641 if (EQ (ptr->cdr, Qnil)) |
1639 { | 1642 { |
1640 objptr = &ptr->car; | 1643 objptr = &ptr->car; |
1641 obj = ptr->car; | |
1642 XUNMARK (obj); | |
1643 goto loop; | 1644 goto loop; |
1644 } | 1645 } |
1645 mark_object (&ptr->car); | 1646 mark_object (&ptr->car); |
1646 /* See comment above under Lisp_Vector for why not use ptr here. */ | 1647 /* See comment above under Lisp_Vector for why not use ptr here. */ |
1647 objptr = &XCONS (obj)->cdr; | 1648 objptr = &XCONS (obj)->cdr; |
1648 obj = ptr->cdr; | |
1649 goto loop; | 1649 goto loop; |
1650 } | 1650 } |
1651 | 1651 |
1652 #ifdef LISP_FLOAT_TYPE | 1652 #ifdef LISP_FLOAT_TYPE |
1653 case Lisp_Float: | 1653 case Lisp_Float: |