summaryrefslogtreecommitdiff
path: root/libguile/dynwind.h
diff options
context:
space:
mode:
authorMarius Vollmer <mvo@zagadka.de>2004-01-03 21:49:16 +0000
committerMarius Vollmer <mvo@zagadka.de>2004-01-03 21:49:16 +0000
commit4845bbae3a0b568ae00e4ba491a1304c9f052b8f (patch)
treee14068bf5da630a267d2ad9d2bf3aa536fa71bd0 /libguile/dynwind.h
parent441a25d9e7055258cd25944d36dbcbddbe8cff65 (diff)
downloadguile-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.h20
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*/