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

commit dc013cfb585f258ea03d7cca388316a410d5938f
Author: Andy Wingo <wi...@igalia.com>
AuthorDate: Mon Sep 11 11:48:32 2023 +0200

    Change gc_allocate_ephemeron to return struct gc_ephemeron
---
 api/gc-ephemeron.h      | 2 +-
 benchmarks/ephemerons.c | 6 +++---
 src/bdw.c               | 5 ++---
 src/semi.c              | 4 ++--
 src/whippet.c           | 4 ++--
 5 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/api/gc-ephemeron.h b/api/gc-ephemeron.h
index d5159dff3..1d9e59b55 100644
--- a/api/gc-ephemeron.h
+++ b/api/gc-ephemeron.h
@@ -18,7 +18,7 @@ struct gc_mutator;
 struct gc_ephemeron;
 
 GC_API_ size_t gc_ephemeron_size(void);
-GC_API_ struct gc_ref gc_allocate_ephemeron(struct gc_mutator *mut);
+GC_API_ struct gc_ephemeron* gc_allocate_ephemeron(struct gc_mutator *mut);
 GC_API_ void gc_ephemeron_init(struct gc_mutator *mut,
                                struct gc_ephemeron *ephemeron,
                                struct gc_ref key, struct gc_ref value);
diff --git a/benchmarks/ephemerons.c b/benchmarks/ephemerons.c
index c11fa755c..698aa1708 100644
--- a/benchmarks/ephemerons.c
+++ b/benchmarks/ephemerons.c
@@ -25,9 +25,9 @@ static Box* allocate_box(struct gc_mutator *mut) {
 }
 
 static struct gc_ephemeron* allocate_ephemeron(struct gc_mutator *mut) {
-  struct gc_ref ret = gc_allocate_ephemeron(mut);
-  *tag_word(ret) = tag_live(ALLOC_KIND_EPHEMERON);
-  return gc_ref_heap_object(ret);
+  struct gc_ephemeron *ret = gc_allocate_ephemeron(mut);
+  *tag_word(gc_ref_from_heap_object(ret)) = tag_live(ALLOC_KIND_EPHEMERON);
+  return ret;
 }
 
 /* Get the current time in microseconds */
diff --git a/src/bdw.c b/src/bdw.c
index 3b01e9dcb..aaa89e684 100644
--- a/src/bdw.c
+++ b/src/bdw.c
@@ -131,9 +131,8 @@ void gc_write_barrier_extern(struct gc_ref obj, size_t 
obj_size,
 
 static int ephemeron_gc_kind;
 
-struct gc_ref gc_allocate_ephemeron(struct gc_mutator *mut) {
-  void *ret = GC_generic_malloc(gc_ephemeron_size(), ephemeron_gc_kind);
-  return gc_ref_from_heap_object(ret);
+struct gc_ephemeron* gc_allocate_ephemeron(struct gc_mutator *mut) {
+  return GC_generic_malloc(gc_ephemeron_size(), ephemeron_gc_kind);
 }
 
 unsigned gc_heap_ephemeron_trace_epoch(struct gc_heap *heap) {
diff --git a/src/semi.c b/src/semi.c
index 182a68a3d..fe181eb94 100644
--- a/src/semi.c
+++ b/src/semi.c
@@ -445,8 +445,8 @@ void* gc_allocate_pointerless(struct gc_mutator *mut, 
size_t size) {
   return gc_allocate(mut, size);
 }
 
-struct gc_ref gc_allocate_ephemeron(struct gc_mutator *mut) {
-  return gc_ref_from_heap_object(gc_allocate(mut, gc_ephemeron_size()));
+struct gc_ephemeron* gc_allocate_ephemeron(struct gc_mutator *mut) {
+  return gc_allocate(mut, gc_ephemeron_size());
 }
 
 void gc_ephemeron_init(struct gc_mutator *mut, struct gc_ephemeron *ephemeron,
diff --git a/src/whippet.c b/src/whippet.c
index d32868aa7..6f4596678 100644
--- a/src/whippet.c
+++ b/src/whippet.c
@@ -2200,14 +2200,14 @@ void* gc_allocate_pointerless(struct gc_mutator *mut, 
size_t size) {
   return gc_allocate(mut, size);
 }
 
-struct gc_ref gc_allocate_ephemeron(struct gc_mutator *mut) {
+struct gc_ephemeron* gc_allocate_ephemeron(struct gc_mutator *mut) {
   struct gc_ref ret =
     gc_ref_from_heap_object(gc_allocate(mut, gc_ephemeron_size()));
   if (gc_has_conservative_intraheap_edges()) {
     uint8_t *metadata = metadata_byte_for_addr(gc_ref_value(ret));
     *metadata |= METADATA_BYTE_EPHEMERON;
   }
-  return ret;
+  return gc_ref_heap_object(ret);
 }
 
 void gc_ephemeron_init(struct gc_mutator *mut, struct gc_ephemeron *ephemeron,

Reply via email to