mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-07-04 00:30:30 +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
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue