mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-07 04:30:18 +02:00
Arrange to pin objects captured by a delimited continuation
* libguile/vm.h (struct scm_vm_cont): Include the tag word, and put flags there. Rename stack bottom to stack slice and make a flexible array. (scm_is_vm_cont): (scm_to_vm_cont): (scm_from_vm_cont): (scm_vm_cont_is_partial): (scm_vm_cont_is_rewindable): New build-time helpers. * libguile/continuations.c (scm_i_make_continuation): (scm_i_continuation_to_frame): (copy_stack_and_call): * libguile/continuations.h (scm_t_contregs): * libguile/frames.c (frame_stack_top): * libguile/stacks.c (scm_make_stack): Adapt to take struct scm_vm_cont* instead of SCM for continuations. * libguile/vm.c (capture_stack): Adapt to scm_vm_cont change. Use new gc_resolve_conservative_ref API to pin conservative refs from the captured stack. (scm_i_vm_cont_to_frame): (scm_i_capture_current_stack): (reinstate_continuation_x): (capture_continuation): (compose_continuation): (capture_delimited_continuation): (abort_to_prompt): Adapt to type changes.
This commit is contained in:
parent
177643d416
commit
0a0ecc518b
6 changed files with 114 additions and 72 deletions
|
@ -1,4 +1,4 @@
|
|||
/* Copyright 2001,2009-2015,2018,2021
|
||||
/* Copyright 2001,2009-2015,2018,2021,2025
|
||||
Free Software Foundation, Inc.
|
||||
|
||||
This file is part of Guile.
|
||||
|
@ -81,7 +81,7 @@ frame_stack_top (enum scm_vm_frame_kind kind, const struct scm_frame *frame)
|
|||
case SCM_VM_FRAME_KIND_CONT:
|
||||
{
|
||||
struct scm_vm_cont *cont = frame->stack_holder;
|
||||
return cont->stack_bottom + cont->stack_size;
|
||||
return &cont->stack_slice[cont->stack_size];
|
||||
}
|
||||
|
||||
case SCM_VM_FRAME_KIND_VM:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue