1
Fork 0
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:
Andy Wingo 2025-06-30 14:07:05 +02:00
parent 8726b8789b
commit 985c1d16f2
5 changed files with 29 additions and 8 deletions

View file

@ -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