mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-24 12:20:20 +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
|
@ -3,7 +3,7 @@
|
|||
#ifndef SCM_CONTINUATIONS_H
|
||||
#define SCM_CONTINUATIONS_H
|
||||
|
||||
/* Copyright (C) 1995,1996,2000,2001, 2006, 2008, 2009, 2010, 2012, 2013 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1995,1996,2000,2001, 2006, 2008, 2009, 2010, 2012, 2013, 2014 Free Software Foundation, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
|
@ -76,7 +76,10 @@ SCM_INTERNAL SCM scm_i_make_continuation (int *first,
|
|||
SCM_INTERNAL void scm_i_check_continuation (SCM cont);
|
||||
SCM_INTERNAL void scm_i_reinstate_continuation (SCM cont);
|
||||
|
||||
SCM_INTERNAL SCM scm_i_continuation_to_frame (SCM cont);
|
||||
struct scm_frame;
|
||||
SCM_INTERNAL int scm_i_continuation_to_frame (SCM cont,
|
||||
struct scm_frame *frame);
|
||||
|
||||
SCM_INTERNAL struct scm_vm* scm_i_contregs_vp (SCM contregs);
|
||||
SCM_INTERNAL SCM scm_i_contregs_vm_cont (SCM contregs);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue