mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-07-04 08:40:21 +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 \
|
bytevectors-internal.h \
|
||||||
cache-internal.h \
|
cache-internal.h \
|
||||||
continuations-internal.h \
|
continuations-internal.h \
|
||||||
|
dynstack.h \
|
||||||
fluids-internal.h \
|
fluids-internal.h \
|
||||||
gc-inline.h \
|
gc-inline.h \
|
||||||
gc-internal.h \
|
gc-internal.h \
|
||||||
|
@ -602,7 +603,6 @@ modinclude_HEADERS = \
|
||||||
deprecated.h \
|
deprecated.h \
|
||||||
deprecation.h \
|
deprecation.h \
|
||||||
dynl.h \
|
dynl.h \
|
||||||
dynstack.h \
|
|
||||||
dynwind.h \
|
dynwind.h \
|
||||||
eq.h \
|
eq.h \
|
||||||
error.h \
|
error.h \
|
||||||
|
|
|
@ -57,12 +57,21 @@ scm_dynamic_wind (SCM in_guard, SCM thunk, SCM out_guard)
|
||||||
#undef FUNC_NAME
|
#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
|
void
|
||||||
scm_dynwind_begin (scm_t_dynwind_flags flags)
|
scm_dynwind_begin (scm_t_dynwind_flags flags)
|
||||||
{
|
{
|
||||||
scm_thread *thread = SCM_I_CURRENT_THREAD;
|
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
|
void
|
||||||
|
@ -71,6 +80,17 @@ scm_dynwind_end (void)
|
||||||
scm_dynstack_unwind_frame (&SCM_I_CURRENT_THREAD->dynstack);
|
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
|
void
|
||||||
scm_dynwind_unwind_handler (void (*proc) (void *), void *data,
|
scm_dynwind_unwind_handler (void (*proc) (void *), void *data,
|
||||||
scm_t_wind_flags flags)
|
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_thread *thread = SCM_I_CURRENT_THREAD;
|
||||||
scm_t_dynstack *dynstack = &thread->dynstack;
|
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
|
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);
|
SCM_API void scm_swap_bindings (SCM vars, SCM vals);
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SCM_F_DYNWIND_REWINDABLE = SCM_F_DYNSTACK_FRAME_REWINDABLE
|
SCM_F_DYNWIND_REWINDABLE = 1
|
||||||
} scm_t_dynwind_flags;
|
} scm_t_dynwind_flags;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SCM_F_WIND_EXPLICITLY = SCM_F_DYNSTACK_WINDER_EXPLICIT,
|
SCM_F_WIND_EXPLICITLY = 1,
|
||||||
SCM_F_WIND_MANAGED = SCM_F_DYNSTACK_WINDER_MANAGED
|
SCM_F_WIND_MANAGED = 2
|
||||||
} scm_t_wind_flags;
|
} scm_t_wind_flags;
|
||||||
|
|
||||||
SCM_API void scm_dynwind_begin (scm_t_dynwind_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/fluids-internal.h"
|
||||||
#include "libguile/threads.h"
|
#include "libguile/threads.h"
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,6 @@
|
||||||
|
|
||||||
#include "libguile/procs.h"
|
#include "libguile/procs.h"
|
||||||
#include "libguile/throw.h"
|
#include "libguile/throw.h"
|
||||||
#include "libguile/dynstack.h"
|
|
||||||
#include "libguile/iselect.h"
|
#include "libguile/iselect.h"
|
||||||
#include "libguile/vm.h"
|
#include "libguile/vm.h"
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue