(mark_object): Fetch obj from *objptr at loop, not at the gotos.
authorKarl Heuer <kwzh@gnu.org>
Wed, 9 Feb 1994 22:04:55 +0000 (22:04 +0000)
committerKarl Heuer <kwzh@gnu.org>
Wed, 9 Feb 1994 22:04:55 +0000 (22:04 +0000)
src/alloc.c

index d4c4f3c..dffff22 100644 (file)
@@ -1475,11 +1475,11 @@ mark_object (objptr)
 {
   register Lisp_Object obj;
 
+ loop:
   obj = *objptr;
+ loop2:
   XUNMARK (obj);
 
- loop:
-
   if ((PNTR_COMPARISON_TYPE) XPNTR (obj) < (PNTR_COMPARISON_TYPE) ((char *) pure + PURESIZE)
       && (PNTR_COMPARISON_TYPE) XPNTR (obj) >= (PNTR_COMPARISON_TYPE) pure)
     return;
@@ -1567,7 +1567,6 @@ mark_object (objptr)
              mark_object (&ptr1->contents[i]);
          }
        objptr = &ptr1->contents[COMPILED_CONSTANTS];
-       obj = *objptr;
        goto loop;
       }
 
@@ -1612,9 +1611,13 @@ mark_object (objptr)
        ptr = ptr->next;
        if (ptr)
          {
+           /* For the benefit of the last_marked log.  */
+           objptr = (Lisp_Object *)&XSYMBOL (obj)->next;
            ptrx = ptr;         /* Use of ptrx avoids compiler bug on Sun */
            XSETSYMBOL (obj, ptrx);
-           goto loop;
+           /* We can't goto loop here because *objptr doesn't contain an
+              actual Lisp_Object with valid datatype field.  */
+           goto loop2;
          }
       }
       break;
@@ -1638,14 +1641,11 @@ mark_object (objptr)
        if (EQ (ptr->cdr, Qnil))
          {
            objptr = &ptr->car;
-           obj = ptr->car;
-           XUNMARK (obj);
            goto loop;
          }
        mark_object (&ptr->car);
        /* See comment above under Lisp_Vector for why not use ptr here.  */
        objptr = &XCONS (obj)->cdr;
-       obj = ptr->cdr;
        goto loop;
       }