286 |
The culprit is found in the frame of Fbyte_code where the |
The culprit is found in the frame of Fbyte_code where the |
287 |
address of its local variable `stack' is equal to the |
address of its local variable `stack' is equal to the |
288 |
recorded value of `stack' here. */ |
recorded value of `stack' here. */ |
289 |
if (!stack->top) |
eassert (stack->top); |
|
abort (); |
|
290 |
|
|
291 |
for (obj = stack->bottom; obj <= stack->top; ++obj) |
for (obj = stack->bottom; obj <= stack->top; ++obj) |
292 |
if (!XMARKBIT (*obj)) |
mark_object (*obj); |
|
{ |
|
|
mark_object (*obj); |
|
|
XMARK (*obj); |
|
|
} |
|
293 |
|
|
294 |
if (!XMARKBIT (stack->byte_string)) |
mark_object (stack->byte_string); |
295 |
{ |
mark_object (stack->constants); |
|
mark_object (stack->byte_string); |
|
|
XMARK (stack->byte_string); |
|
|
} |
|
|
|
|
|
if (!XMARKBIT (stack->constants)) |
|
|
{ |
|
|
mark_object (stack->constants); |
|
|
XMARK (stack->constants); |
|
|
} |
|
296 |
} |
} |
297 |
} |
} |
298 |
|
|
304 |
unmark_byte_stack () |
unmark_byte_stack () |
305 |
{ |
{ |
306 |
struct byte_stack *stack; |
struct byte_stack *stack; |
|
Lisp_Object *obj; |
|
307 |
|
|
308 |
for (stack = byte_stack_list; stack; stack = stack->next) |
for (stack = byte_stack_list; stack; stack = stack->next) |
309 |
{ |
{ |
|
for (obj = stack->bottom; obj <= stack->top; ++obj) |
|
|
XUNMARK (*obj); |
|
|
|
|
|
XUNMARK (stack->byte_string); |
|
|
XUNMARK (stack->constants); |
|
|
|
|
310 |
if (stack->byte_string_start != SDATA (stack->byte_string)) |
if (stack->byte_string_start != SDATA (stack->byte_string)) |
311 |
{ |
{ |
312 |
int offset = stack->pc - stack->byte_string_start; |
int offset = stack->pc - stack->byte_string_start; |