diff options
author | Marius Vollmer <mvo@zagadka.de> | 2004-01-03 21:49:16 +0000 |
---|---|---|
committer | Marius Vollmer <mvo@zagadka.de> | 2004-01-03 21:49:16 +0000 |
commit | 4845bbae3a0b568ae00e4ba491a1304c9f052b8f (patch) | |
tree | e14068bf5da630a267d2ad9d2bf3aa536fa71bd0 /libguile/dynwind.h | |
parent | 441a25d9e7055258cd25944d36dbcbddbe8cff65 (diff) | |
download | guile-4845bbae3a0b568ae00e4ba491a1304c9f052b8f.tar.gz |
(scm_t_frame_flags, scm_t_wind_flags,
scm_begin_frame, scm_end_frame, scm_on_unwind, scm_on_rewind):
New.
(scm_dowinds, scm_i_dowinds): scm_dowinds has been renamed to
scm_i_dowinds and extended to handle frames and to invoke a 'turn'
function when the outermost wind point has been reached. The
latter is used to copy a continuation stack at the right time.
scm_dowinds remains available.
(SCM_GUARDSP, SCM_BEFORE_GUARD, SCM_AFTER_GUARD, SCM_GUARD_DATA,
tc16_guard, guards_print): Removed.
(scm_internal_dynamic_wind): Reimplemented using frames.
Diffstat (limited to 'libguile/dynwind.h')
-rw-r--r-- | libguile/dynwind.h | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/libguile/dynwind.h b/libguile/dynwind.h index dfdb96ea7..b207d83b8 100644 --- a/libguile/dynwind.h +++ b/libguile/dynwind.h @@ -3,7 +3,7 @@ #ifndef SCM_DYNWIND_H #define SCM_DYNWIND_H -/* Copyright (C) 1995,1996,1998,1999,2000 Free Software Foundation, Inc. +/* Copyright (C) 1995,1996,1998,1999,2000,2003,2004 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 @@ -36,10 +36,28 @@ SCM_API SCM scm_internal_dynamic_wind (scm_t_guard before, void *inner_data, void *guard_data); SCM_API void scm_dowinds (SCM to, long delta); +SCM_API void scm_i_dowinds (SCM to, long delta, int explicit, + void (*turn_func) (void *), void *data); SCM_API void scm_init_dynwind (void); SCM_API void scm_swap_bindings (SCM vars, SCM vals); +typedef enum { + SCM_F_FRAME_REWINDABLE = (1 << 0) +} scm_t_frame_flags; + +typedef enum { + SCM_F_WIND_EXPLICITELY = (1 << 0) +} scm_t_wind_flags; + +SCM_API void scm_begin_frame (scm_t_frame_flags); +SCM_API void scm_end_frame (void); + +SCM_API void scm_on_unwind (void (*func) (void *), void *data, + scm_t_wind_flags); +SCM_API void scm_on_rewind (void (*func) (void *), void *data, + scm_t_wind_flags); + #ifdef GUILE_DEBUG SCM_API SCM scm_wind_chain (void); #endif /*GUILE_DEBUG*/ |