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

commit e23adeafd395593e2ebe7d86195cdafcfb31ebee
Author: Andy Wingo <wi...@pobox.com>
AuthorDate: Wed Jul 2 21:32:21 2025 +0200

    Fix some scm_trace_object bugs
    
    * libguile/trace.h (FOR_EACH_TC7_WITH_STRUCT_TYPE):
    (scm_trace_object): Wire up smob tracing.  Only trace ephemerons and
    finalizers if there is a trace function.
---
 libguile/trace.h | 13 +++++--------
 1 file changed, 5 insertions(+), 8 deletions(-)

diff --git a/libguile/trace.h b/libguile/trace.h
index b80bf09bc..52ab791d5 100644
--- a/libguile/trace.h
+++ b/libguile/trace.h
@@ -683,6 +683,7 @@ scm_trace_dynstack_slice (struct scm_dynstack *ds, 
TRACE_PARAMS)
   M(tc7_array, array, scm_array)                                         \
   M(tc7_bitvector, bitvector, scm_bitvector)                             \
   M(tc7_port, port, scm_t_port)                                          \
+  M(tc7_smob, smob, scm_smob)                                            \
 
 #define FOR_EACH_EXT_TC16_WITH_STRUCT_TYPE(M)                            \
   M(charset, character_set, scm_charset)                                 \
@@ -755,19 +756,15 @@ scm_trace_object (SCM obj, TRACE_PARAMS)
         }
 
     case scm_tc7_finalizer:
-      gc_trace_finalizer (SCM_CAST (obj, struct gc_finalizer *), TRACE_ARGS);
+      if (trace)
+        gc_trace_finalizer (SCM_CAST (obj, struct gc_finalizer *), TRACE_ARGS);
       return gc_finalizer_size ();
 
     case scm_tc7_ephemeron:
-      gc_trace_ephemeron (SCM_CAST (obj, struct gc_ephemeron *), TRACE_ARGS);
+      if (trace)
+        gc_trace_ephemeron (SCM_CAST (obj, struct gc_ephemeron *), TRACE_ARGS);
       return gc_ephemeron_size ();
 
-    case scm_tc7_smob:
-      {
-        struct scm_smob *x = SCM_CAST (obj, struct scm_smob *);
-        return sizeof (*x);
-      }
-
     default:
       abort ();
     }

Reply via email to