mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-07-03 08:10:31 +02:00
Make dynstack interface completely internal
* libguile/Makefile.am (noinst_HEADERS, modinclude_HEADERS): Don't install dynstack.h. * libguile/dynwind.c (translate_frame_flags, scm_dynwind_begin) (translate_winder_flags, scm_dynwind_unwind_handler): * libguile/dynwind.h (scm_t_dynwind_flags, scm_t_wind_flags): Instead of punning the dynwind.h flags to dynstack.h values, translate them. * libguile/threads-internal.h: * libguile/threads.h: Include dynstack.h in the private header.
This commit is contained in:
parent
8726b8789b
commit
985c1d16f2
5 changed files with 29 additions and 8 deletions
|
@ -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 \
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
|
||||
|
||||
|
||||
#include "libguile/dynstack.h"
|
||||
#include "libguile/fluids-internal.h"
|
||||
#include "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"
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue