[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 05/28: Make dynstack interface completely internal
From: |
Andy Wingo |
Subject: |
[Guile-commits] 05/28: Make dynstack interface completely internal |
Date: |
Tue, 1 Jul 2025 07:21:52 -0400 (EDT) |
wingo pushed a commit to branch wip-whippet
in repository guile.
commit 985c1d16f2ea02f054cd94be887f76a9ae6ac75d
Author: Andy Wingo <wingo@pobox.com>
AuthorDate: Mon Jun 30 14:07:05 2025 +0200
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.
---
libguile/Makefile.am | 2 +-
libguile/dynwind.c | 25 +++++++++++++++++++++++--
libguile/dynwind.h | 8 ++++----
libguile/threads-internal.h | 1 +
libguile/threads.h | 1 -
5 files changed, 29 insertions(+), 8 deletions(-)
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"
- [Guile-commits] branch wip-whippet updated (c79d5bd0f -> 77a6914c3), Andy Wingo, 2025/07/01
- [Guile-commits] 01/28: Pin bytevector parents, Andy Wingo, 2025/07/01
- [Guile-commits] 04/28: Replace alloca hack in vm.c:invoke_hook with alignas, Andy Wingo, 2025/07/01
- [Guile-commits] 06/28: Dynstack uses inline functions instead of macros, Andy Wingo, 2025/07/01
- [Guile-commits] 03/28: Remove "result" member from struct scm_thread, Andy Wingo, 2025/07/01
- [Guile-commits] 07/28: Move "struct scm_ephemeron_table" to internal header, Andy Wingo, 2025/07/01
- [Guile-commits] 08/28: Add scm_integer_size_z to internal integers.h, Andy Wingo, 2025/07/01
- [Guile-commits] 16/28: Add macros-internal.h, Andy Wingo, 2025/07/01
- [Guile-commits] 05/28: Make dynstack interface completely internal,
Andy Wingo <=
- [Guile-commits] 02/28: Pin struct unboxed_fields, Andy Wingo, 2025/07/01
- [Guile-commits] 09/28: Move "struct scm_syntax" definition to internal header, Andy Wingo, 2025/07/01
- [Guile-commits] 10/28: Dispatch gc_trace_object to scm_trace_object, Andy Wingo, 2025/07/01
- [Guile-commits] 11/28: Add new typed struct helpers to get size and unboxed fields, Andy Wingo, 2025/07/01
- [Guile-commits] 14/28: Add bitvectors-internal.h, Andy Wingo, 2025/07/01
- [Guile-commits] 19/28: Move scm_cond, scm_mutex definitions to internal header, Andy Wingo, 2025/07/01
- [Guile-commits] 26/28: Move inline function decls to their impl headers, Andy Wingo, 2025/07/01
- [Guile-commits] 12/28: Name the field for string backing store, Andy Wingo, 2025/07/01
- [Guile-commits] 13/28: Add smob-internal.h, Andy Wingo, 2025/07/01
- [Guile-commits] 20/28: Add filesys-internal.h, Andy Wingo, 2025/07/01