refactor focusing on xo-alloc2/ xo-gc/ write-barrier

ability to inform allocator of gco->gco mutation, via AAllocator i/face.
This commit is contained in:
Roland Conybeare 2026-05-01 19:54:26 -04:00
commit 3d24a523f3
4 changed files with 15 additions and 11 deletions

View file

@ -233,7 +233,7 @@ namespace xo {
assert(expr_gco);
obj<AAllocator,DArena> mm(&(p_psm->parser_alloc()));
auto gc = obj<AAllocator>(mm).try_to_facet<ACollector>();
//auto gc = obj<AAllocator>(mm).try_to_facet<ACollector>();
if (args_expr_v_->size() == args_expr_v_->capacity()) {
// need to expand .args_expr_v_ capacity.
@ -243,14 +243,14 @@ namespace xo {
DArray * argv_2x = DArray::_empty(mm, 2 * args_expr_v_->capacity());
for (DArray::size_type i = 0, n = args_expr_v_->size(); i < n; ++i) {
argv_2x->push_back(gc, (*args_expr_v_)[i]);
argv_2x->push_back(mm, (*args_expr_v_)[i]);
}
this->args_expr_v_ = argv_2x;
}
if (args_expr_v_->size() < args_expr_v_->capacity())
args_expr_v_->push_back(gc, expr_gco);
args_expr_v_->push_back(mm, expr_gco);
if (tk.tk_type() == tokentype::tk_rightparen) {
obj<AExpression> apply_ex = this->assemble_expr(p_psm->expr_alloc());

View file

@ -201,20 +201,20 @@ namespace xo {
obj<AAllocator,DArena> mm(&parser_alloc);
DArray * argl_2x = DArray::_empty(mm, 2 * argl_->capacity());
auto gc = obj<AAllocator>(mm).try_to_facet<ACollector>();
//auto gc = obj<AAllocator>(mm).try_to_facet<ACollector>();
for (DArray::size_type i = 0, n = argl_->size(); i < n; ++i) {
// TODO: prefer non-bounds-checked access here
argl_2x->push_back(gc, argl_->at(i));
argl_2x->push_back(mm, argl_->at(i));
}
// update in place
this->argl_ = argl_2x;
}
auto gc = expr_alloc.try_to_facet<ACollector>();
//auto gc = expr_alloc.try_to_facet<ACollector>();
this->argl_->push_back(gc, var_o);
this->argl_->push_back(expr_alloc, var_o);
}
void

View file

@ -178,7 +178,7 @@ namespace xo {
DExpectQArraySsm::on_quoted_literal(obj<AGCObject> lit,
ParserStateMachine * p_psm)
{
auto gc = p_psm->expr_alloc().try_to_facet<ACollector>();
//auto gc = p_psm->expr_alloc().try_to_facet<ACollector>();
if(state_.code() == QArrayXst::code::qarray_1a) {
// append lit at the end of array_
@ -195,7 +195,7 @@ namespace xo {
2 * array_->capacity());
}
bool ok = array_->push_back(gc, lit);
bool ok = array_->push_back(p_psm->expr_alloc(), lit);
assert(ok);
}

View file

@ -8,6 +8,7 @@
#include <xo/object2/Array.hpp>
namespace xo {
using xo::mm::ACollector;
using xo::mm::AAllocator;
using xo::mm::AGCObject;
@ -84,8 +85,11 @@ namespace xo {
values_->resize(ix.j_slot() + 1);
}
log && log("STUB: need write barrier for GC here");
(*values_)[ix.j_slot()] = x;
//auto gc = mm.try_to_facet<ACollector>();
values_->assign_at(mm,
ix.j_slot(),
x);
}
DVariable *