changeset 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 907e14c58c65
children 91dcabd87088
files src/alloc.c
diffstat 1 files changed, 7 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/alloc.c	Wed Feb 09 21:08:01 1994 +0000
+++ b/src/alloc.c	Wed Feb 09 22:04:55 1994 +0000
@@ -1475,11 +1475,11 @@
 {
   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 (&ptr1->contents[i]);
 	  }
 	objptr = &ptr1->contents[COMPILED_CONSTANTS];
-	obj = *objptr;
 	goto loop;
       }
 
@@ -1612,9 +1611,13 @@
 	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 @@
 	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;
       }