diff options
| author | Karl Heuer <kwzh@gnu.org> | 1994-02-09 22:04:55 +0000 |
|---|---|---|
| committer | Karl Heuer <kwzh@gnu.org> | 1994-02-09 22:04:55 +0000 |
| commit | 9149e743227187da58be5132fa5254fc9519f089 (patch) | |
| tree | 16394059c4fe6b1d1669360d5d51fdd4c878ffac | |
| parent | 98f5cfc3333c7018515b0c75b01bc8342c0eb238 (diff) | |
| download | emacs-9149e743227187da58be5132fa5254fc9519f089.tar.gz | |
(mark_object): Fetch obj from *objptr at loop, not at the gotos.
| -rw-r--r-- | src/alloc.c | 14 |
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; } |
