mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 03:40:34 +02:00
Optimize make-stack
* libguile/continuations.h: * libguile/continuations.c (scm_i_continuation_to_frame): Operate on low-level C structures instead of heap objects. * libguile/frames.h: * libguile/frames.c (frame_offset, frame_stack_base): Const args. (scm_c_frame_closure): New helper. (scm_frame_procedure): Use the new helper. * libguile/stacks.c (stack_depth, narrow_stack, scm_make_stack): Rework to avoid allocating frames as we traverse the stack, and to avoid an n**2 case where there are outer cuts.
This commit is contained in:
parent
8de051da47
commit
3b14dd2f27
5 changed files with 103 additions and 80 deletions
|
@ -167,6 +167,10 @@ enum scm_vm_frame_kind
|
|||
SCM_INTERNAL SCM* scm_i_frame_stack_base (SCM frame);
|
||||
SCM_INTERNAL scm_t_ptrdiff scm_i_frame_offset (SCM frame);
|
||||
|
||||
/* See notes in frames.c before using this. */
|
||||
SCM_INTERNAL SCM scm_c_frame_closure (enum scm_vm_frame_kind kind,
|
||||
const struct scm_frame *frame);
|
||||
|
||||
SCM_INTERNAL SCM scm_c_make_frame (enum scm_vm_frame_kind kind,
|
||||
const struct scm_frame *frame);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue