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: