wingo pushed a commit to branch wip-whippet
in repository guile.

commit 4f25a845cbd3dc2d7961182aaf81393c2f6288ed
Author: Andy Wingo <wi...@pobox.com>
AuthorDate: Mon Jun 30 14:42:56 2025 +0200

    Dispatch gc_trace_object to scm_trace_object
    
    * libguile/whippet-embedder.h (gc_trace_object): Call scm_trace_object.
    * libguile/trace.h (scm_trace_object): Stub implementation.
---
 libguile/trace.h            | 25 +++++++++++++++++--------
 libguile/whippet-embedder.h | 15 ++++++++-------
 2 files changed, 25 insertions(+), 15 deletions(-)

diff --git a/libguile/trace.h b/libguile/trace.h
index a7c06d65f..43df0eab3 100644
--- a/libguile/trace.h
+++ b/libguile/trace.h
@@ -80,14 +80,6 @@ scm_trace_loader_roots (void (*trace_ambiguous) (uintptr_t 
lo,
                         struct gc_heap *heap,
                         void *trace_data);
 
-SCM_INTERNAL void
-scm_trace_dynstack (struct scm_dynstack *dynstack,
-                    void (*trace) (struct gc_edge edge,
-                                   struct gc_heap *heap,
-                                   void *trace_data),
-                    struct gc_heap *heap,
-                    void *trace_data);
-
 SCM_INTERNAL void
 scm_trace_dynstack_roots (struct scm_dynstack *dynstack,
                           void (*trace_pinned) (struct gc_ref ref,
@@ -96,4 +88,21 @@ scm_trace_dynstack_roots (struct scm_dynstack *dynstack,
                           struct gc_heap *heap,
                           void *trace_data);
 
+#define TRACE_PARAMS \
+  void (*trace) (struct gc_edge, struct gc_heap *, void *), \
+  struct gc_heap *heap, \
+  void *trace_data
+
+SCM_INTERNAL void
+scm_trace_dynstack (struct scm_dynstack *dynstack, TRACE_PARAMS);
+
+static inline size_t
+scm_trace_object (SCM obj, TRACE_PARAMS)
+{
+  GC_CRASH ();
+}
+
+#undef TRACE_PARAMS
+
+
 #endif  /* SCM_TRACE_H */
diff --git a/libguile/whippet-embedder.h b/libguile/whippet-embedder.h
index e81ac3e97..cb6adf5b2 100644
--- a/libguile/whippet-embedder.h
+++ b/libguile/whippet-embedder.h
@@ -92,13 +92,14 @@ static inline void gc_trace_object (struct gc_ref ref,
                                     struct gc_heap *heap,
                                     void *trace_data,
                                     size_t *size) {
-#if GC_CONSERVATIVE_TRACE
-  // Shouldn't get here.
-  GC_CRASH ();
-#else
-  // To be implemented.
-  GC_CRASH ();
-#endif
+  SCM obj = scm_from_ref (ref);
+
+  if (SCM_IMP (obj))
+    abort ();
+
+  size_t sz = scm_trace_object (obj, trace_edge, heap, trace_data);
+  if (size)
+    *size = sz;
 }
 
 

Reply via email to