From e35a6ae587eb308bfc06563d40cbae12c2a04dea Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sat, 3 Jan 2026 00:33:35 -0500 Subject: [PATCH] xo-gc: + poly gc root method --- include/xo/gc/DX1Collector.hpp | 2 +- include/xo/gc/detail/ACollector.hpp | 3 ++- include/xo/gc/detail/ICollector_Any.hpp | 2 +- include/xo/gc/detail/ICollector_DX1Collector.hpp | 2 +- include/xo/gc/detail/ICollector_Xfer.hpp | 4 ++-- include/xo/gc/detail/RCollector.hpp | 2 +- src/gc/DX1Collector.cpp | 6 ++---- src/gc/ICollector_DX1Collector.cpp | 7 +++---- 8 files changed, 13 insertions(+), 15 deletions(-) diff --git a/include/xo/gc/DX1Collector.hpp b/include/xo/gc/DX1Collector.hpp index c14d96e..10b6b7f 100644 --- a/include/xo/gc/DX1Collector.hpp +++ b/include/xo/gc/DX1Collector.hpp @@ -222,7 +222,7 @@ namespace xo { bool install_type(const AGCObject & meta) noexcept; /** add GC root at @p root_addr, with type @p typeseq **/ - void add_gc_root(typeseq tseq, Opaque * root_addr) noexcept; + void add_gc_root_poly(obj * p_root) noexcept; /** Request immediate collection. * 1. if collection is enabled, immediately collect all generations diff --git a/include/xo/gc/detail/ACollector.hpp b/include/xo/gc/detail/ACollector.hpp index 9c738a6..36b4bff 100644 --- a/include/xo/gc/detail/ACollector.hpp +++ b/include/xo/gc/detail/ACollector.hpp @@ -57,7 +57,8 @@ namespace xo { * Return false if installation fails (e.g. memory exhausted) **/ virtual bool install_type(Opaque d, const AGCObject & iface) = 0; - virtual void add_gc_root(Opaque d, int32_t tseq, Opaque * root) = 0; + virtual void add_gc_root_poly(Opaque d, obj * p_root) = 0; + //virtual void add_gc_root_typed(Opaque d, typeseq tseq, Opaque * root) = 0; /** Request immediate collection. * 1. if collection is enabled, immediately collect all generations diff --git a/include/xo/gc/detail/ICollector_Any.hpp b/include/xo/gc/detail/ICollector_Any.hpp index 76d4695..6ed758c 100644 --- a/include/xo/gc/detail/ICollector_Any.hpp +++ b/include/xo/gc/detail/ICollector_Any.hpp @@ -38,7 +38,7 @@ namespace xo { // non-const methods [[noreturn]] bool install_type(Opaque, const AGCObject &) noexcept override { _fatal(); } - [[noreturn]] void add_gc_root(Opaque, int32_t, Opaque *) override { _fatal(); } + [[noreturn]] void add_gc_root_poly(Opaque, obj *) override { _fatal(); } [[noreturn]] void request_gc(Opaque, generation) override { _fatal(); } [[noreturn]] void forward_inplace(Opaque, AGCObject *, void **) override { _fatal(); } diff --git a/include/xo/gc/detail/ICollector_DX1Collector.hpp b/include/xo/gc/detail/ICollector_DX1Collector.hpp index 8233043..6101031 100644 --- a/include/xo/gc/detail/ICollector_DX1Collector.hpp +++ b/include/xo/gc/detail/ICollector_DX1Collector.hpp @@ -44,7 +44,7 @@ namespace xo { static bool is_type_installed(const DX1Collector & d, typeseq tseq); static bool install_type(DX1Collector & d, const AGCObject & iface); - static void add_gc_root(DX1Collector & d, int32_t tseq, Opaque * root); + static void add_gc_root_poly(DX1Collector & d, obj * p_root); static void request_gc(DX1Collector & d, generation upto); static void forward_inplace(DX1Collector & d, AGCObject * lhs_iface, void ** lhs_data); diff --git a/include/xo/gc/detail/ICollector_Xfer.hpp b/include/xo/gc/detail/ICollector_Xfer.hpp index 00599bd..d7d43ef 100644 --- a/include/xo/gc/detail/ICollector_Xfer.hpp +++ b/include/xo/gc/detail/ICollector_Xfer.hpp @@ -50,8 +50,8 @@ namespace xo { bool install_type(Opaque d, const AGCObject & iface) override { return I::install_type(_dcast(d), iface); } - void add_gc_root(Opaque d, int32_t tseq, Opaque * root) override { - I::add_gc_root(_dcast(d), tseq, root); + void add_gc_root_poly(Opaque d, obj * p_root) override { + I::add_gc_root_poly(_dcast(d), p_root); } void request_gc(Opaque d, generation upto) override { I::request_gc(_dcast(d), upto); diff --git a/include/xo/gc/detail/RCollector.hpp b/include/xo/gc/detail/RCollector.hpp index 9af508d..da8fc44 100644 --- a/include/xo/gc/detail/RCollector.hpp +++ b/include/xo/gc/detail/RCollector.hpp @@ -30,7 +30,7 @@ namespace xo { bool is_type_installed(typeseq tseq) const noexcept { return O::iface()->is_type_installed(O::data(), tseq); } bool install_type(const AGCObject & iface) { return O::iface()->install_type(O::data(), iface); } - void add_gc_root(int32_t tseq, Opaque * root) { O::iface()->add_gc_root(O::data(), tseq, root); } + void add_gc_root_poly(obj * p_root) { O::iface()->add_gc_root(O::data(), p_root); } void request_gc(generation g) { O::iface()->request_gc(O::data(), g); } void forward_inplace(AGCObject * lhs_iface, void ** lhs_data) { O::iface()->forward_inplace(O::data(), lhs_iface, lhs_data); } diff --git a/src/gc/DX1Collector.cpp b/src/gc/DX1Collector.cpp index 45da4f6..46ea2ac 100644 --- a/src/gc/DX1Collector.cpp +++ b/src/gc/DX1Collector.cpp @@ -229,11 +229,9 @@ namespace xo { } void - DX1Collector::add_gc_root(typeseq tseq, - Opaque * root) noexcept + DX1Collector::add_gc_root_poly(obj * p_root) noexcept { - (void)tseq; - (void)root; + (void)p_root; } void diff --git a/src/gc/ICollector_DX1Collector.cpp b/src/gc/ICollector_DX1Collector.cpp index 2f04904..a138c9b 100644 --- a/src/gc/ICollector_DX1Collector.cpp +++ b/src/gc/ICollector_DX1Collector.cpp @@ -61,11 +61,10 @@ namespace xo { } void - ICollector_DX1Collector::add_gc_root(DX1Collector & d, - int32_t tseq, - Opaque * root) + ICollector_DX1Collector::add_gc_root_poly(DX1Collector & d, + obj * p_root) { - d.add_gc_root(typeseq(tseq), root); + d.add_gc_root_poly(p_root); } void