mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +02:00
Heap frames have a "frame kind" bit
* libguile/frames.h (enum scm_vm_frame_kind, SCM_VM_FRAME_KIND) (scm_c_make_frame): Add a "frame kind" bit to the first word. This will allow the "stack holder" to be a non-SCM object. * libguile/continuations.c (scm_i_continuation_to_frame): * libguile/frames.c (scm_c_make_frame, scm_frame_previous) * libguile/stacks.c (scm_make_stack): * libguile/vm.c (vm_dispatch_hook): Adapt frame creators to set the frame kind bit.
This commit is contained in:
parent
0bca90aac9
commit
050a40db5b
5 changed files with 18 additions and 8 deletions
|
@ -37,8 +37,9 @@ verify (offsetof (struct scm_vm_frame, dynamic_link) == 0);
|
|||
(((SCM *) (val)) + SCM_VM_FRAME_OFFSET (frame))
|
||||
|
||||
SCM
|
||||
scm_c_make_frame (SCM stack_holder, scm_t_ptrdiff fp_offset,
|
||||
scm_t_ptrdiff sp_offset, scm_t_uint32 *ip)
|
||||
scm_c_make_frame (enum scm_vm_frame_kind frame_kind, SCM stack_holder,
|
||||
scm_t_ptrdiff fp_offset, scm_t_ptrdiff sp_offset,
|
||||
scm_t_uint32 *ip)
|
||||
{
|
||||
struct scm_frame *p = scm_gc_malloc (sizeof (struct scm_frame),
|
||||
"vmframe");
|
||||
|
@ -46,7 +47,7 @@ scm_c_make_frame (SCM stack_holder, scm_t_ptrdiff fp_offset,
|
|||
p->fp_offset = fp_offset;
|
||||
p->sp_offset = sp_offset;
|
||||
p->ip = ip;
|
||||
return scm_cell (scm_tc7_frame, (scm_t_bits)p);
|
||||
return scm_cell (scm_tc7_frame | (frame_kind << 8), (scm_t_bits)p);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -282,7 +283,8 @@ SCM_DEFINE (scm_frame_previous, "frame-previous", 1, 0, 0,
|
|||
SCM *stack_base = scm_i_frame_stack_base (frame);
|
||||
new_fp = RELOC (frame, new_fp);
|
||||
new_sp = SCM_FRAME_PREVIOUS_SP (this_fp);
|
||||
frame = scm_c_make_frame (SCM_VM_FRAME_STACK_HOLDER (frame),
|
||||
frame = scm_c_make_frame (SCM_VM_FRAME_KIND (frame),
|
||||
SCM_VM_FRAME_STACK_HOLDER (frame),
|
||||
new_fp - stack_base, new_sp - stack_base,
|
||||
SCM_FRAME_RETURN_ADDRESS (this_fp));
|
||||
proc = scm_frame_procedure (frame);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue