xo-object2: obj<ACollector> argument to DArray::push_back()

This commit is contained in:
Roland Conybeare 2026-04-28 23:17:00 -04:00
commit df32ec55c8
4 changed files with 22 additions and 12 deletions

View file

@ -15,6 +15,7 @@
//#include "expect_expr_xs.hpp"
namespace xo {
using xo::mm::ACollector;
using xo::mm::AGCObject;
using xo::print::APrintable;
using xo::reflect::typeseq;
@ -73,7 +74,7 @@ namespace xo {
*
* See similar code in DExpectFormalArglistSsm::_make
*/
DArray * args = DArray::empty(mm, 8);
DArray * args = DArray::_empty(mm, 8);
applyexprstatetype applystate
= (fn_expr
@ -232,23 +233,24 @@ namespace xo {
assert(expr_gco);
obj<AAllocator,DArena> mm(&(p_psm->parser_alloc()));
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.
// Could use DArena checkpoint to redo this in place,
// since argument array must be on the top of the stack.
DArray * argv_2x = DArray::empty(mm, 2 * args_expr_v_->capacity());
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((*args_expr_v_)[i]);
argv_2x->push_back(gc, (*args_expr_v_)[i]);
}
this->args_expr_v_ = argv_2x;
}
if (args_expr_v_->size() < args_expr_v_->capacity())
args_expr_v_->push_back(expr_gco);
args_expr_v_->push_back(gc, expr_gco);
if (tk.tk_type() == tokentype::tk_rightparen) {
obj<AExpression> apply_ex = this->assemble_expr(p_psm->expr_alloc());