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