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: |
