diff --git a/include/xo/gc/detail/IGCObjectVisitor_DX1Collector.hpp b/include/xo/gc/detail/IGCObjectVisitor_DX1Collector.hpp index c2696a7..6512f88 100644 --- a/include/xo/gc/detail/IGCObjectVisitor_DX1Collector.hpp +++ b/include/xo/gc/detail/IGCObjectVisitor_DX1Collector.hpp @@ -47,6 +47,10 @@ namespace xo { // const methods // non-const methods + /** allocate copy of source object at address @p src. +Source must be owned by this collector. +Increments object age **/ + static void * alloc_copy(DX1Collector & self, std::byte * src); /** visit child of a gc-aware object. May update child in-place! **/ static void visit_child(DX1Collector & self, AGCObject * iface, void ** pp_data) noexcept; ///@} diff --git a/src/gc/GCObjectStore.cpp b/src/gc/GCObjectStore.cpp index ee900b5..33d2d24 100644 --- a/src/gc/GCObjectStore.cpp +++ b/src/gc/GCObjectStore.cpp @@ -454,7 +454,7 @@ namespace xo { } void - GCObjectStore::forward_inplace_aux(DX1Collector * gc, + GCObjectStore::forward_inplace_aux(DX1Collector * x1gc, AGCObject * lhs_iface, void ** lhs_data, Generation upto) @@ -498,7 +498,7 @@ namespace xo { log && log("disposition: not in from-space. Don't forward, but check children"); obj gco(lhs_iface, object_data); - gco.visit_gco_children(gc->ref()); + gco.visit_gco_children(x1gc->ref()); return; } @@ -609,7 +609,7 @@ namespace xo { * +----------+ */ - *lhs_data = this->_shallow_move(gc, lhs_iface, *lhs_data); + *lhs_data = this->_shallow_move(x1gc, lhs_iface, *lhs_data); /* * lhs obj (from-space) @@ -860,7 +860,7 @@ namespace xo { } /*_deep_move_gc_owned*/ void * - GCObjectStore::_shallow_move(DX1Collector * gc, + GCObjectStore::_shallow_move(DX1Collector * x1gc, AGCObject * iface, void * from_src) { @@ -870,7 +870,7 @@ namespace xo { //obj gc_gco(gc); - void * to_dest = iface->shallow_move(from_src, gc->ref()); + void * to_dest = iface->shallow_move(from_src, x1gc->ref()); log && log(xtag("from_src", from_src), xtag("to_dest", to_dest)); log && log(xtag("tseq", info.tseq()), diff --git a/src/gc/facet/IGCObjectVisitor_DX1Collector.cpp b/src/gc/facet/IGCObjectVisitor_DX1Collector.cpp index edb3506..d4c609c 100644 --- a/src/gc/facet/IGCObjectVisitor_DX1Collector.cpp +++ b/src/gc/facet/IGCObjectVisitor_DX1Collector.cpp @@ -15,6 +15,11 @@ namespace xo { namespace mm { + auto + IGCObjectVisitor_DX1Collector::alloc_copy(DX1Collector & self, std::byte * src) -> void * + { + return self.alloc_copy(src); + } auto IGCObjectVisitor_DX1Collector::visit_child(DX1Collector & self, AGCObject * iface, void ** pp_data) noexcept -> void {