xo-alloc: IAlloc* i/face sufficient for Object._forward_children
This commit is contained in:
parent
7fdfc71390
commit
c5c9441c1e
19 changed files with 22 additions and 22 deletions
|
|
@ -32,7 +32,7 @@ namespace xo {
|
||||||
/** required by Object i/face, but never called on Forwarding1 **/
|
/** required by Object i/face, but never called on Forwarding1 **/
|
||||||
virtual Object * _shallow_copy(gc::IAlloc * mm) const final override;
|
virtual Object * _shallow_copy(gc::IAlloc * mm) const final override;
|
||||||
/** required by Object i/face, but never called on Forwarding1 **/
|
/** required by Object i/face, but never called on Forwarding1 **/
|
||||||
virtual std::size_t _forward_children(gc::GC * mm) final override;
|
virtual std::size_t _forward_children(gc::IAlloc * mm) final override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/** the object that used to be located at this address (i.e. @c this)
|
/** the object that used to be located at this address (i.e. @c this)
|
||||||
|
|
|
||||||
|
|
@ -119,17 +119,17 @@ namespace xo {
|
||||||
* @p src. source object to be forwarded
|
* @p src. source object to be forwarded
|
||||||
* @p gc. garbage collector
|
* @p gc. garbage collector
|
||||||
*/
|
*/
|
||||||
static Object * _forward(Object * src, gc::GC * gc);
|
static Object * _forward(Object * src, gc::IAlloc * gc);
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static void _forward_inplace(T ** src_addr, gc::GC * gc) {
|
static void _forward_inplace(T ** src_addr, gc::IAlloc * gc) {
|
||||||
Object * fwd = _forward(*src_addr, gc);
|
Object * fwd = _forward(*src_addr, gc);
|
||||||
|
|
||||||
*src_addr = reinterpret_cast<T *>(fwd);
|
*src_addr = reinterpret_cast<T *>(fwd);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
static void _forward_inplace(gp<T> & src, gc::GC * gc) {
|
static void _forward_inplace(gp<T> & src, gc::IAlloc * gc) {
|
||||||
_forward_inplace<T>(src.ptr_address(), gc);
|
_forward_inplace<T>(src.ptr_address(), gc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -243,7 +243,7 @@ namespace xo {
|
||||||
* allocated by @ref _shallow_move
|
* allocated by @ref _shallow_move
|
||||||
*
|
*
|
||||||
**/
|
**/
|
||||||
virtual std::size_t _forward_children(gc::GC * gc) = 0;
|
virtual std::size_t _forward_children(gc::IAlloc * gc) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ namespace xo {
|
||||||
|
|
||||||
// LCOV_EXCL_START
|
// LCOV_EXCL_START
|
||||||
std::size_t
|
std::size_t
|
||||||
Forwarding1::_forward_children(gc::GC *) {
|
Forwarding1::_forward_children(gc::IAlloc *) {
|
||||||
assert(false);
|
assert(false);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ namespace xo {
|
||||||
Object::mm = nullptr;
|
Object::mm = nullptr;
|
||||||
|
|
||||||
Object *
|
Object *
|
||||||
Object::_forward(Object * src, gc::GC * gc)
|
Object::_forward(Object * src, gc::IAlloc * gc)
|
||||||
{
|
{
|
||||||
if (!src)
|
if (!src)
|
||||||
return src;
|
return src;
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,7 @@ namespace xo {
|
||||||
|
|
||||||
virtual std::size_t _shallow_size() const final override { return sizeof(*this); }
|
virtual std::size_t _shallow_size() const final override { return sizeof(*this); }
|
||||||
virtual Object * _shallow_copy(gc::IAlloc * mm) const final override { return new (Cpof(mm, this)) DummyObject(*this); }
|
virtual Object * _shallow_copy(gc::IAlloc * mm) const final override { return new (Cpof(mm, this)) DummyObject(*this); }
|
||||||
virtual std::size_t _forward_children(gc::GC * gc) final override { return _shallow_size(); }
|
virtual std::size_t _forward_children(gc::IAlloc * gc) final override { return _shallow_size(); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::array<char, 128> data_;
|
std::array<char, 128> data_;
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ namespace xo {
|
||||||
virtual void display(std::ostream & os) const final override;
|
virtual void display(std::ostream & os) const final override;
|
||||||
virtual std::size_t _shallow_size() const final override;
|
virtual std::size_t _shallow_size() const final override;
|
||||||
virtual Object * _shallow_copy(gc::IAlloc * mm) const final override;
|
virtual Object * _shallow_copy(gc::IAlloc * mm) const final override;
|
||||||
virtual std::size_t _forward_children(gc::GC * /*gc*/) final override;
|
virtual std::size_t _forward_children(gc::IAlloc * /*gc*/) final override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
GlobalEnv(const GlobalEnv & x);
|
GlobalEnv(const GlobalEnv & x);
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,7 @@ namespace xo {
|
||||||
virtual void display(std::ostream & os) const final override;
|
virtual void display(std::ostream & os) const final override;
|
||||||
virtual std::size_t _shallow_size() const final override;
|
virtual std::size_t _shallow_size() const final override;
|
||||||
virtual Object * _shallow_copy(gc::IAlloc * mm) const final override;
|
virtual Object * _shallow_copy(gc::IAlloc * mm) const final override;
|
||||||
virtual std::size_t _forward_children(gc::GC * /*gc*/) final override;
|
virtual std::size_t _forward_children(gc::IAlloc * /*gc*/) final override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/** parent stack frame **/
|
/** parent stack frame **/
|
||||||
|
|
|
||||||
|
|
@ -90,7 +90,7 @@ namespace xo {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::size_t
|
std::size_t
|
||||||
GlobalEnv::_forward_children(gc::GC * gc)
|
GlobalEnv::_forward_children(gc::IAlloc * gc)
|
||||||
{
|
{
|
||||||
for (auto & ix : *slot_map_) {
|
for (auto & ix : *slot_map_) {
|
||||||
Object::_forward_inplace(ix.second, gc);
|
Object::_forward_inplace(ix.second, gc);
|
||||||
|
|
|
||||||
|
|
@ -121,7 +121,7 @@ namespace xo {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::size_t
|
std::size_t
|
||||||
LocalEnv::_forward_children(gc::GC * gc)
|
LocalEnv::_forward_children(gc::IAlloc * gc)
|
||||||
{
|
{
|
||||||
static_assert(decltype(symtab_)::is_gc_ptr == false);
|
static_assert(decltype(symtab_)::is_gc_ptr == false);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ namespace xo {
|
||||||
virtual void display(std::ostream & os) const final override;
|
virtual void display(std::ostream & os) const final override;
|
||||||
virtual std::size_t _shallow_size() const final override;
|
virtual std::size_t _shallow_size() const final override;
|
||||||
virtual Object * _shallow_copy(gc::IAlloc * gc) const final override;
|
virtual Object * _shallow_copy(gc::IAlloc * gc) const final override;
|
||||||
virtual std::size_t _forward_children(gc::GC * gc) final override;
|
virtual std::size_t _forward_children(gc::IAlloc * gc) final override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit Boolean(bool x) : value_{x} {}
|
explicit Boolean(bool x) : value_{x} {}
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ namespace xo {
|
||||||
virtual void display(std::ostream & os) const final override;
|
virtual void display(std::ostream & os) const final override;
|
||||||
virtual std::size_t _shallow_size() const final override;
|
virtual std::size_t _shallow_size() const final override;
|
||||||
virtual Object * _shallow_copy(gc::IAlloc * gc) const final override;
|
virtual Object * _shallow_copy(gc::IAlloc * gc) const final override;
|
||||||
virtual std::size_t _forward_children(gc::GC * gc) final override;
|
virtual std::size_t _forward_children(gc::IAlloc * gc) final override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
float_type value_ = 0.0;
|
float_type value_ = 0.0;
|
||||||
|
|
|
||||||
|
|
@ -30,7 +30,7 @@ namespace xo {
|
||||||
virtual void display(std::ostream & os) const final override;
|
virtual void display(std::ostream & os) const final override;
|
||||||
virtual std::size_t _shallow_size() const final override;
|
virtual std::size_t _shallow_size() const final override;
|
||||||
virtual Object * _shallow_copy(gc::IAlloc * gc) const final override;
|
virtual Object * _shallow_copy(gc::IAlloc * gc) const final override;
|
||||||
virtual std::size_t _forward_children(gc::GC * gc) final override;
|
virtual std::size_t _forward_children(gc::IAlloc * gc) final override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int_type value_ = 0;
|
int_type value_ = 0;
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ namespace xo {
|
||||||
virtual void display(std::ostream & os) const final override;
|
virtual void display(std::ostream & os) const final override;
|
||||||
virtual std::size_t _shallow_size() const final override;
|
virtual std::size_t _shallow_size() const final override;
|
||||||
virtual Object * _shallow_copy(gc::IAlloc * gc) const final override;
|
virtual Object * _shallow_copy(gc::IAlloc * gc) const final override;
|
||||||
virtual std::size_t _forward_children(gc::GC * gc) final override;
|
virtual std::size_t _forward_children(gc::IAlloc * gc) final override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
List(gp<Object> head, gp<List> rest);
|
List(gp<Object> head, gp<List> rest);
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ namespace xo {
|
||||||
virtual void display(std::ostream & os) const final override;
|
virtual void display(std::ostream & os) const final override;
|
||||||
virtual std::size_t _shallow_size() const final override;
|
virtual std::size_t _shallow_size() const final override;
|
||||||
virtual Object * _shallow_copy(gc::IAlloc * gc) const final override;
|
virtual Object * _shallow_copy(gc::IAlloc * gc) const final override;
|
||||||
virtual std::size_t _forward_children(gc::GC * gc) final override;
|
virtual std::size_t _forward_children(gc::IAlloc * gc) final override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
String(owner owner, std::size_t z, char * s);
|
String(owner owner, std::size_t z, char * s);
|
||||||
|
|
|
||||||
|
|
@ -75,7 +75,7 @@ namespace xo {
|
||||||
|
|
||||||
// LCOV_EXCL_START
|
// LCOV_EXCL_START
|
||||||
std::size_t
|
std::size_t
|
||||||
Boolean::_forward_children(gc::GC *)
|
Boolean::_forward_children(gc::IAlloc *)
|
||||||
{
|
{
|
||||||
assert(false);
|
assert(false);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ namespace xo {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::size_t
|
std::size_t
|
||||||
Float::_forward_children(gc::GC * /*gc*/) {
|
Float::_forward_children(gc::IAlloc * /*gc*/) {
|
||||||
return Float::_shallow_size();
|
return Float::_shallow_size();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@ namespace xo {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::size_t
|
std::size_t
|
||||||
Integer::_forward_children(gc::GC * /*gc*/) {
|
Integer::_forward_children(gc::IAlloc * /*gc*/) {
|
||||||
return Integer::_shallow_size();
|
return Integer::_shallow_size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -110,7 +110,7 @@ namespace xo {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::size_t
|
std::size_t
|
||||||
List::_forward_children(gc::GC * gc)
|
List::_forward_children(gc::IAlloc * gc)
|
||||||
{
|
{
|
||||||
Object::_forward_inplace(head_, gc);
|
Object::_forward_inplace(head_, gc);
|
||||||
Object::_forward_inplace(rest_, gc);
|
Object::_forward_inplace(rest_, gc);
|
||||||
|
|
|
||||||
|
|
@ -152,7 +152,7 @@ namespace xo {
|
||||||
}
|
}
|
||||||
|
|
||||||
std::size_t
|
std::size_t
|
||||||
String::_forward_children(gc::GC *)
|
String::_forward_children(gc::IAlloc *)
|
||||||
{
|
{
|
||||||
return this->_shallow_size();
|
return this->_shallow_size();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue