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 (); }