xo-gc: + poly gc root method
This commit is contained in:
parent
e0cb07c9f5
commit
596589bb7b
8 changed files with 13 additions and 15 deletions
|
|
@ -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<AGCObject> * p_root) noexcept;
|
||||
|
||||
/** Request immediate collection.
|
||||
* 1. if collection is enabled, immediately collect all generations
|
||||
|
|
|
|||
|
|
@ -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<AGCObject> * 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
|
||||
|
|
|
|||
|
|
@ -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<AGCObject> *) override { _fatal(); }
|
||||
[[noreturn]] void request_gc(Opaque, generation) override { _fatal(); }
|
||||
[[noreturn]] void forward_inplace(Opaque, AGCObject *, void **) override { _fatal(); }
|
||||
|
||||
|
|
|
|||
|
|
@ -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<AGCObject> * p_root);
|
||||
static void request_gc(DX1Collector & d, generation upto);
|
||||
static void forward_inplace(DX1Collector & d, AGCObject * lhs_iface, void ** lhs_data);
|
||||
|
||||
|
|
|
|||
|
|
@ -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<AGCObject> * 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);
|
||||
|
|
|
|||
|
|
@ -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<AGCObject> * 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); }
|
||||
|
||||
|
|
|
|||
|
|
@ -229,11 +229,9 @@ namespace xo {
|
|||
}
|
||||
|
||||
void
|
||||
DX1Collector::add_gc_root(typeseq tseq,
|
||||
Opaque * root) noexcept
|
||||
DX1Collector::add_gc_root_poly(obj<AGCObject> * p_root) noexcept
|
||||
{
|
||||
(void)tseq;
|
||||
(void)root;
|
||||
(void)p_root;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -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<AGCObject> * p_root)
|
||||
{
|
||||
d.add_gc_root(typeseq(tseq), root);
|
||||
d.add_gc_root_poly(p_root);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue