summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Heuer <kwzh@gnu.org>1994-02-09 22:04:55 +0000
committerKarl Heuer <kwzh@gnu.org>1994-02-09 22:04:55 +0000
commit9149e743227187da58be5132fa5254fc9519f089 (patch)
tree16394059c4fe6b1d1669360d5d51fdd4c878ffac
parent98f5cfc3333c7018515b0c75b01bc8342c0eb238 (diff)
downloademacs-9149e743227187da58be5132fa5254fc9519f089.tar.gz
(mark_object): Fetch obj from *objptr at loop, not at the gotos.
-rw-r--r--src/alloc.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/alloc.c b/src/alloc.c
index d4c4f3c402f..dffff224d50 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -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;
}