xo-reader2: refactor: make() + _make() pair for each ssm

This commit is contained in:
Roland Conybeare 2026-02-16 16:50:57 -05:00
commit 9a97bb2680
12 changed files with 92 additions and 59 deletions

View file

@ -58,8 +58,8 @@ namespace xo {
}
DApplySsm *
DApplySsm::make(DArena & arena,
obj<AExpression> fn_expr)
DApplySsm::_make(DArena & arena,
obj<AExpression> fn_expr)
{
obj<AAllocator,DArena> mm(&arena);
@ -83,6 +83,13 @@ namespace xo {
return new (mem) DApplySsm(applystate, fn_expr, args);
}
obj<ASyntaxStateMachine,DApplySsm>
DApplySsm::make(DArena & arena,
obj<AExpression> fn_expr)
{
return obj<ASyntaxStateMachine,DApplySsm>(_make(arena, fn_expr));
}
void
DApplySsm::start(obj<AExpression> fn_expr,
ParserStateMachine * p_psm)
@ -91,10 +98,7 @@ namespace xo {
DArena::Checkpoint ckp = p_psm->parser_alloc().checkpoint();
DApplySsm * apply_ssm
= DApplySsm::make(p_psm->parser_alloc(), fn_expr);
obj<ASyntaxStateMachine,DApplySsm> ssm(apply_ssm);
auto ssm = DApplySsm::make(p_psm->parser_alloc(), fn_expr);
p_psm->push_ssm(ckp, ssm);
}

View file

@ -52,9 +52,9 @@ namespace xo {
}
DExpectExprSsm *
DExpectExprSsm::make(DArena & mm,
bool allow_defs,
bool cxl_on_rightbrace)
DExpectExprSsm::_make(DArena & mm,
bool allow_defs,
bool cxl_on_rightbrace)
{
void * mem = mm.alloc(typeseq::id<DExpectExprSsm>(),
sizeof(DExpectExprSsm));
@ -63,6 +63,14 @@ namespace xo {
cxl_on_rightbrace);
}
obj<ASyntaxStateMachine,DExpectExprSsm>
DExpectExprSsm::make(DArena & mm,
bool allow_defs,
bool cxl_on_rightbrace)
{
return obj<ASyntaxStateMachine,DExpectExprSsm>(_make(mm, allow_defs, cxl_on_rightbrace));
}
void
DExpectExprSsm::start(DArena & mm,
bool allow_defs,
@ -71,12 +79,7 @@ namespace xo {
{
DArena::Checkpoint ckp = mm.checkpoint();
DExpectExprSsm * exp_expr
= DExpectExprSsm::make(mm,
allow_defs,
cxl_on_rightbrace);
obj<ASyntaxStateMachine> ssm
= with_facet<ASyntaxStateMachine>::mkobj(exp_expr);
auto ssm = DExpectExprSsm::make(mm, allow_defs, cxl_on_rightbrace);
p_psm->push_ssm(ckp, ssm);
}

View file

@ -20,7 +20,7 @@ namespace xo {
{}
DExpectSymbolSsm *
DExpectSymbolSsm::make(DArena & mm)
DExpectSymbolSsm::_make(DArena & mm)
{
void * mem = mm.alloc(typeseq::id<DExpectSymbolSsm>(),
sizeof(DExpectSymbolSsm));
@ -28,19 +28,18 @@ namespace xo {
return new (mem) DExpectSymbolSsm();
}
obj<ASyntaxStateMachine,DExpectSymbolSsm>
DExpectSymbolSsm::make(DArena & mm)
{
return obj<ASyntaxStateMachine,DExpectSymbolSsm>(_make(mm));
}
void
DExpectSymbolSsm::start(ParserStateMachine * p_psm)
{
DArena::Checkpoint ckp = p_psm->parser_alloc().checkpoint();
DExpectSymbolSsm * sym_ssm
= DExpectSymbolSsm::make(p_psm->parser_alloc());
// note:
// relying on [ISyntaxStateMachine_DExpectedSymbolSsm.hpp]
//
obj<ASyntaxStateMachine> ssm
= with_facet<ASyntaxStateMachine>::mkobj(sym_ssm);
auto ssm = DExpectSymbolSsm::make(p_psm->parser_alloc());
p_psm->push_ssm(ckp, ssm);
}

View file

@ -23,7 +23,7 @@ namespace xo {
{}
DExpectTypeSsm *
DExpectTypeSsm::make(DArena & mm)
DExpectTypeSsm::_make(DArena & mm)
{
void * mem = mm.alloc(typeseq::id<DArena>(),
sizeof(DArena));
@ -31,16 +31,18 @@ namespace xo {
return new (mem) DExpectTypeSsm();
}
obj<ASyntaxStateMachine,DExpectTypeSsm>
DExpectTypeSsm::make(DArena & mm)
{
return obj<ASyntaxStateMachine,DExpectTypeSsm>(_make(mm));
}
void
DExpectTypeSsm::start(ParserStateMachine * p_psm)
{
DArena::Checkpoint ckp = p_psm->parser_alloc().checkpoint();
DExpectTypeSsm * expect_type_ssm
= DExpectTypeSsm::make(p_psm->parser_alloc());
auto ssm
= with_facet<ASyntaxStateMachine>::mkobj(expect_type_ssm);
auto ssm = DExpectTypeSsm::make(p_psm->parser_alloc());
p_psm->push_ssm(ckp, ssm);
}

View file

@ -63,6 +63,13 @@ namespace xo {
return new (mem) DIfElseSsm(ifelse_expr);
}
obj<ASyntaxStateMachine,DIfElseSsm>
DIfElseSsm::make(DArena & mm,
DIfElseExpr * ifelse_expr)
{
return obj<ASyntaxStateMachine,DIfElseSsm>(_make(mm, ifelse_expr));
}
void
DIfElseSsm::start(DArena & parser_mm,
obj<AAllocator> expr_mm,
@ -73,10 +80,8 @@ namespace xo {
DArena::Checkpoint ckp = parser_mm.checkpoint();
DIfElseExpr * if_expr = DIfElseExpr::_make_empty(expr_mm);
DIfElseSsm * if_ssm = DIfElseSsm::_make(parser_mm, if_expr);
obj<ASyntaxStateMachine> ssm
= with_facet<ASyntaxStateMachine>::mkobj(if_ssm);
auto ssm = DIfElseSsm::make(parser_mm, if_expr);
p_psm->push_ssm(ckp, ssm);

View file

@ -146,16 +146,22 @@ namespace xo {
}
DProgressSsm *
DProgressSsm::make(DArena & mm,
obj<AExpression> lhs,
optype op)
DProgressSsm::_make(DArena & mm,
obj<AExpression> lhs,
optype op)
{
void * mem = mm.alloc(typeseq::id<DProgressSsm>(),
sizeof(DProgressSsm));
return new (mem) DProgressSsm(lhs, op);
}
//return std::make_unique<progress_xs>(progress_xs(std::move(valex), op));
obj<ASyntaxStateMachine,DProgressSsm>
DProgressSsm::make(DArena & mm,
obj<AExpression> lhs,
optype op)
{
return obj<ASyntaxStateMachine,DProgressSsm>(_make(mm, lhs, op));
}
void
@ -166,10 +172,7 @@ namespace xo {
{
DArena::Checkpoint ckp = parser_mm.checkpoint();
DProgressSsm * progress_ssm
= DProgressSsm::make(parser_mm, lhs, op);
obj<ASyntaxStateMachine,DProgressSsm> ssm(progress_ssm);
auto ssm = DProgressSsm::make(parser_mm, lhs, op);
p_psm->push_ssm(ckp, ssm);
}