guile-commits
[Top][All Lists]
Advanced

[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"
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]