continuations are vm procedures
authorAndy Wingo <wingo@pobox.com>
Sat, 6 Feb 2010 16:00:03 +0000 (17:00 +0100)
committerAndy Wingo <wingo@pobox.com>
Mon, 8 Feb 2010 12:00:54 +0000 (13:00 +0100)
commit1d1cae0e2e063d9a36e7d600f87cf3d6eaf940f3
tree136a102cc12ca78edbcb740ecc11f89fa0920e7b
parent217167c6b2e6e400306c8cb4a0bff86c17eef28c
continuations are vm procedures

* libguile/vm-i-system.c (continuation-call): New op, like subr-call or
  foreign-call, but for continuations.

* libguile/continuations.h: Add scm_i_continuation_call internal
  declaration.
  (SCM_CONTINUATIONP): Reimplement in terms of
  SCM_PROGRAM_IS_CONTINUATION.
  (scm_tc16_continuation, SCM_CONTREGS, SCM_CONTINUATION_LENGTH)
  (SCM_SET_CONTINUATION_LENGTH, SCM_JMPBUF, SCM_DYNENV, SCM_THROW_VALUE)
  (SCM_CONTINUATION_ROOT, SCM_DFRAME): Remove these from the exposed
  API.
  (scm_i_continuation_to_frame): New internal declaration.
* libguile/continuations.c
* libguile/continuations.c: Add trickery like in foreign.c, smob.c, and
  gsubr.c, so that we can make procedural trampolines for continuations.
  (scm_i_continuation_to_frame): New internal function, from stacks.c.

* libguile/programs.h (SCM_F_PROGRAM_IS_CONTINUATION)
  (SCM_PROGRAM_IS_CONTINUATION): Add a flag for programs that are
  continuations. Probably should add flags for the other trampoline
  types too.
* libguile/programs.c (scm_i_program_print): Print continuations as
  before.

* libguile/stacks.c (scm_stack_id, scm_make_stack): Use
  scm_i_continuation_to_frame in the continuation case.
libguile/continuations.c
libguile/continuations.h
libguile/programs.c
libguile/programs.h
libguile/stacks.c
libguile/vm-i-system.c