diff --git a/include/xo/alloc/GC.hpp b/include/xo/alloc/GC.hpp index 092f2f36..be2ff071 100644 --- a/include/xo/alloc/GC.hpp +++ b/include/xo/alloc/GC.hpp @@ -318,7 +318,8 @@ namespace xo { * @param rhs. new target for @p *lhs **/ virtual void assign_member(IObject * parent, IObject ** lhs, IObject* rhs) final override; - + /** evacuate @p *lhs and replace with forwarding pointer **/ + virtual void forward_inplace(IObject ** lhs) final override; /** during GC check for source objects owned by GC. * See Object::_shallow_move. **/ diff --git a/src/alloc/GC.cpp b/src/alloc/GC.cpp index ca2506d9..40234bf3 100644 --- a/src/alloc/GC.cpp +++ b/src/alloc/GC.cpp @@ -568,6 +568,12 @@ namespace xo { } } + void + GC::forward_inplace(IObject ** lhs) + { + Object::_forward_inplace(lhs, this); + } + bool GC::check_owned(IObject * src) const { diff --git a/src/alloc/Object.cpp b/src/alloc/Object.cpp index 82583a0a..75abec14 100644 --- a/src/alloc/Object.cpp +++ b/src/alloc/Object.cpp @@ -24,7 +24,8 @@ namespace xo { Object::mm = nullptr; IObject * - Object::_forward(IObject * src, gc::IAlloc * gc) + Object::_forward(IObject * src, + gc::IAlloc * gc) { if (!src) return src;