diff --git a/libguile/Makefile.am b/libguile/Makefile.am index 968361f2c..a69e24267 100644 --- a/libguile/Makefile.am +++ b/libguile/Makefile.am @@ -517,6 +517,7 @@ noinst_HEADERS = atomic.h \ bytevectors-internal.h \ cache-internal.h \ continuations-internal.h \ + dynstack.h \ fluids-internal.h \ gc-inline.h \ gc-internal.h \ @@ -602,7 +603,6 @@ modinclude_HEADERS = \ deprecated.h \ deprecation.h \ dynl.h \ - dynstack.h \ dynwind.h \ eq.h \ error.h \ diff --git a/libguile/dynwind.c b/libguile/dynwind.c index 8a1a2a771..a4e87a808 100644 --- a/libguile/dynwind.c +++ b/libguile/dynwind.c @@ -57,12 +57,21 @@ scm_dynamic_wind (SCM in_guard, SCM thunk, SCM out_guard) #undef FUNC_NAME +static scm_t_dynstack_frame_flags +translate_frame_flags (scm_t_dynwind_flags flags) +{ + scm_t_dynstack_frame_flags ret = 0; + if (flags & SCM_F_DYNWIND_REWINDABLE) + ret |= SCM_F_DYNSTACK_FRAME_REWINDABLE; + return ret; +} + void scm_dynwind_begin (scm_t_dynwind_flags flags) { scm_thread *thread = SCM_I_CURRENT_THREAD; - scm_dynstack_push_frame (&thread->dynstack, flags); + scm_dynstack_push_frame (&thread->dynstack, translate_frame_flags (flags)); } void @@ -71,6 +80,17 @@ scm_dynwind_end (void) scm_dynstack_unwind_frame (&SCM_I_CURRENT_THREAD->dynstack); } +static scm_t_dynstack_winder_flags +translate_winder_flags (scm_t_wind_flags flags) +{ + scm_t_dynstack_winder_flags ret = 0; + if (flags & SCM_F_WIND_EXPLICITLY) + ret |= SCM_F_DYNSTACK_WINDER_EXPLICIT; + if (flags & SCM_F_WIND_MANAGED) + ret |= SCM_F_DYNSTACK_WINDER_MANAGED; + return ret; +} + void scm_dynwind_unwind_handler (void (*proc) (void *), void *data, scm_t_wind_flags flags) @@ -78,7 +98,8 @@ scm_dynwind_unwind_handler (void (*proc) (void *), void *data, scm_thread *thread = SCM_I_CURRENT_THREAD; scm_t_dynstack *dynstack = &thread->dynstack; - scm_dynstack_push_unwinder (dynstack, flags, proc, data); + scm_dynstack_push_unwinder (dynstack, translate_winder_flags (flags), + proc, data); } void diff --git a/libguile/dynwind.h b/libguile/dynwind.h index 0ebc1deba..7b3b74f83 100644 --- a/libguile/dynwind.h +++ b/libguile/dynwind.h @@ -22,7 +22,7 @@ -#include "libguile/dynstack.h" +#include "libguile/scm.h" @@ -33,12 +33,12 @@ SCM_INTERNAL void scm_init_dynwind (void); SCM_API void scm_swap_bindings (SCM vars, SCM vals); typedef enum { - SCM_F_DYNWIND_REWINDABLE = SCM_F_DYNSTACK_FRAME_REWINDABLE + SCM_F_DYNWIND_REWINDABLE = 1 } scm_t_dynwind_flags; typedef enum { - SCM_F_WIND_EXPLICITLY = SCM_F_DYNSTACK_WINDER_EXPLICIT, - SCM_F_WIND_MANAGED = SCM_F_DYNSTACK_WINDER_MANAGED + SCM_F_WIND_EXPLICITLY = 1, + SCM_F_WIND_MANAGED = 2 } scm_t_wind_flags; SCM_API void scm_dynwind_begin (scm_t_dynwind_flags); diff --git a/libguile/threads-internal.h b/libguile/threads-internal.h index 96c307437..b6132cc1c 100644 --- a/libguile/threads-internal.h +++ b/libguile/threads-internal.h @@ -22,6 +22,7 @@ +#include "libguile/dynstack.h" #include "libguile/fluids-internal.h" #include "libguile/threads.h" diff --git a/libguile/threads.h b/libguile/threads.h index fe66496aa..f585cbf3b 100644 --- a/libguile/threads.h +++ b/libguile/threads.h @@ -24,7 +24,6 @@ #include "libguile/procs.h" #include "libguile/throw.h" -#include "libguile/dynstack.h" #include "libguile/iselect.h" #include "libguile/vm.h"