xo-gc stack: + gc-report-object-types() primitive
This commit is contained in:
parent
e3cd18955d
commit
b8e7ff8b7a
5 changed files with 31 additions and 0 deletions
|
|
@ -74,6 +74,11 @@ Creates dictionary using memory from @p report_mm.
|
|||
If unable to comply (e.g. oom), return runtime error allocated from @p error_mm.
|
||||
Avoiding obj<AGCObject> return type to avoid #include cycle **/
|
||||
virtual bool report_statistics(Copaque data, obj<AAllocator> report_mm, obj<AAllocator> error_mm, obj<AGCObject> * output) const noexcept = 0;
|
||||
/** Report gc object types, at discretion of collector implementation.
|
||||
Creates dictionary using memory from @p report_mm.
|
||||
If unable to comply (e.g. oom), return runtime error allocated from @p error_mm.
|
||||
Avoiding obj<AGCObject> return type to avoid #include cycle **/
|
||||
virtual bool report_object_types(Copaque data, obj<AAllocator> report_mm, obj<AAllocator> error_mm, obj<AGCObject> * output) const noexcept = 0;
|
||||
|
||||
// nonconst methods
|
||||
/** install interface @p iface for representation with typeseq @p tseq
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@ namespace mm {
|
|||
[[noreturn]] bool contains(Copaque, role, const void *) const noexcept override { _fatal(); }
|
||||
[[noreturn]] bool is_type_installed(Copaque, typeseq) const noexcept override { _fatal(); }
|
||||
[[noreturn]] bool report_statistics(Copaque, obj<AAllocator>, obj<AAllocator>, obj<AGCObject> *) const noexcept override { _fatal(); }
|
||||
[[noreturn]] bool report_object_types(Copaque, obj<AAllocator>, obj<AAllocator>, obj<AGCObject> *) const noexcept override { _fatal(); }
|
||||
|
||||
// nonconst methods
|
||||
[[noreturn]] bool install_type(Opaque, const AGCObject &) override;
|
||||
|
|
|
|||
|
|
@ -64,6 +64,9 @@ namespace mm {
|
|||
bool report_statistics(Copaque data, obj<AAllocator> report_mm, obj<AAllocator> error_mm, obj<AGCObject> * output) const noexcept override {
|
||||
return I::report_statistics(_dcast(data), report_mm, error_mm, output);
|
||||
}
|
||||
bool report_object_types(Copaque data, obj<AAllocator> report_mm, obj<AAllocator> error_mm, obj<AGCObject> * output) const noexcept override {
|
||||
return I::report_object_types(_dcast(data), report_mm, error_mm, output);
|
||||
}
|
||||
|
||||
// non-const methods
|
||||
bool install_type(Opaque data, const AGCObject & iface) override {
|
||||
|
|
|
|||
|
|
@ -97,6 +97,9 @@ public:
|
|||
bool report_statistics(obj<AAllocator> report_mm, obj<AAllocator> error_mm, obj<AGCObject> * output) const noexcept {
|
||||
return O::iface()->report_statistics(O::data(), report_mm, error_mm, output);
|
||||
}
|
||||
bool report_object_types(obj<AAllocator> report_mm, obj<AAllocator> error_mm, obj<AGCObject> * output) const noexcept {
|
||||
return O::iface()->report_object_types(O::data(), report_mm, error_mm, output);
|
||||
}
|
||||
|
||||
// non-const methods (still const in router!)
|
||||
bool install_type(const AGCObject & iface) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue