xo-reader2: refactor: make() + _make() pair for each ssm
This commit is contained in:
parent
44e6bac3b2
commit
045bdbf525
12 changed files with 92 additions and 59 deletions
|
|
@ -88,8 +88,12 @@ namespace xo {
|
||||||
/** create instance using memory from @p parser_mm.
|
/** create instance using memory from @p parser_mm.
|
||||||
* with function to be called supplied by @p fn_expr.
|
* with function to be called supplied by @p fn_expr.
|
||||||
**/
|
**/
|
||||||
static DApplySsm * make(DArena & parser_mm,
|
static DApplySsm * _make(DArena & parser_mm,
|
||||||
obj<AExpression> fn_expr);
|
obj<AExpression> fn_expr);
|
||||||
|
|
||||||
|
/** create fop referring to new DApplySsm **/
|
||||||
|
static obj<ASyntaxStateMachine,DApplySsm> make(DArena & parser_mm,
|
||||||
|
obj<AExpression> fn_expr);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start apply. Will trigger this after input like
|
* Start apply. Will trigger this after input like
|
||||||
|
|
|
||||||
|
|
@ -25,9 +25,14 @@ namespace xo {
|
||||||
explicit DExpectExprSsm(bool allow_defs,
|
explicit DExpectExprSsm(bool allow_defs,
|
||||||
bool cxl_on_rightparen);
|
bool cxl_on_rightparen);
|
||||||
|
|
||||||
static DExpectExprSsm * make(DArena & parser_mm,
|
static DExpectExprSsm * _make(DArena & parser_mm,
|
||||||
bool allow_defs,
|
bool allow_defs,
|
||||||
bool cxl_on_rightbrace);
|
bool cxl_on_rightbrace);
|
||||||
|
|
||||||
|
/** create fop referring to new DExpectExprSsm **/
|
||||||
|
static obj<ASyntaxStateMachine,DExpectExprSsm> make(DArena & parser_mm,
|
||||||
|
bool allow_defs,
|
||||||
|
bool cxl_on_rightbrace);
|
||||||
|
|
||||||
static void start(DArena & parser_mm,
|
static void start(DArena & parser_mm,
|
||||||
bool allow_defs,
|
bool allow_defs,
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,10 @@ namespace xo {
|
||||||
DExpectSymbolSsm();
|
DExpectSymbolSsm();
|
||||||
|
|
||||||
/** create instance using memory from @p parser_mm **/
|
/** create instance using memory from @p parser_mm **/
|
||||||
static DExpectSymbolSsm * make(DArena & parser_mm);
|
static DExpectSymbolSsm * _make(DArena & parser_mm);
|
||||||
|
|
||||||
|
/** create fop referring to new DExpectSymbolSsm **/
|
||||||
|
static obj<ASyntaxStateMachine,DExpectSymbolSsm> make(DArena & parser_mm);
|
||||||
|
|
||||||
/** start nested parser expecting a symbol,
|
/** start nested parser expecting a symbol,
|
||||||
* on top of parser state machine @p p_psm.
|
* on top of parser state machine @p p_psm.
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "DSyntaxStateMachine.hpp"
|
#include "DSyntaxStateMachine.hpp"
|
||||||
|
#include <xo/facet/obj.hpp>
|
||||||
#include <xo/indentlog/print/ppindentinfo.hpp>
|
#include <xo/indentlog/print/ppindentinfo.hpp>
|
||||||
|
|
||||||
namespace xo {
|
namespace xo {
|
||||||
|
|
@ -31,7 +32,10 @@ namespace xo {
|
||||||
public:
|
public:
|
||||||
DExpectTypeSsm();
|
DExpectTypeSsm();
|
||||||
|
|
||||||
static DExpectTypeSsm * make(DArena & parser_mm);
|
static DExpectTypeSsm * _make(DArena & parser_mm);
|
||||||
|
|
||||||
|
/** create fop referring to new DExpectTypeSsm **/
|
||||||
|
static obj<ASyntaxStateMachine,DExpectTypeSsm> make(DArena & parser_mm);
|
||||||
|
|
||||||
static void start(ParserStateMachine * p_psm);
|
static void start(ParserStateMachine * p_psm);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -65,20 +65,16 @@ namespace xo {
|
||||||
///@{
|
///@{
|
||||||
explicit DIfElseSsm(DIfElseExpr * ifelse_expr);
|
explicit DIfElseSsm(DIfElseExpr * ifelse_expr);
|
||||||
|
|
||||||
#ifdef NOT_YET
|
|
||||||
/** create instance using memory from @p parser_mm
|
|
||||||
* with initial scaffold @p ifelse_expr
|
|
||||||
**/
|
|
||||||
static obj<AExpression,DIfElseSsm> make(DArena & parser_mm,
|
|
||||||
DIfElseExpr * ifelse_expr);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** create instance using memory from @p parser_mm
|
/** create instance using memory from @p parser_mm
|
||||||
* with initial scaffold @p ifelse_expr.
|
* with initial scaffold @p ifelse_expr.
|
||||||
**/
|
**/
|
||||||
static DIfElseSsm * _make(DArena & parser_mm,
|
static DIfElseSsm * _make(DArena & parser_mm,
|
||||||
DIfElseExpr * ifelse_expr);
|
DIfElseExpr * ifelse_expr);
|
||||||
|
|
||||||
|
/** create fop referring to new DIfElseSsm **/
|
||||||
|
static obj<ASyntaxStateMachine,DIfElseSsm> make(DArena & parser_mm,
|
||||||
|
DIfElseExpr * ifelse_expr);
|
||||||
|
|
||||||
/** start nested parser for an if-else expression
|
/** start nested parser for an if-else expression
|
||||||
* on top of parser state machine @p p_psm.
|
* on top of parser state machine @p p_psm.
|
||||||
* Use @p parser_mm to allocate syntax state machines
|
* Use @p parser_mm to allocate syntax state machines
|
||||||
|
|
|
||||||
|
|
@ -96,9 +96,14 @@ namespace xo {
|
||||||
public:
|
public:
|
||||||
DProgressSsm(obj<AExpression> lhs, optype op);
|
DProgressSsm(obj<AExpression> lhs, optype op);
|
||||||
|
|
||||||
static DProgressSsm * make(DArena & parser_mm,
|
static DProgressSsm * _make(DArena & parser_mm,
|
||||||
obj<AExpression> lhs,
|
obj<AExpression> lhs,
|
||||||
optype op);
|
optype op);
|
||||||
|
|
||||||
|
/** create fop referring to new DProgressSsm **/
|
||||||
|
static obj<ASyntaxStateMachine,DProgressSsm> make(DArena & parser_mm,
|
||||||
|
obj<AExpression> lhs,
|
||||||
|
optype op);
|
||||||
|
|
||||||
static void start(DArena & parser_mm,
|
static void start(DArena & parser_mm,
|
||||||
ParserStateMachine * p_psm);
|
ParserStateMachine * p_psm);
|
||||||
|
|
|
||||||
|
|
@ -58,8 +58,8 @@ namespace xo {
|
||||||
}
|
}
|
||||||
|
|
||||||
DApplySsm *
|
DApplySsm *
|
||||||
DApplySsm::make(DArena & arena,
|
DApplySsm::_make(DArena & arena,
|
||||||
obj<AExpression> fn_expr)
|
obj<AExpression> fn_expr)
|
||||||
{
|
{
|
||||||
obj<AAllocator,DArena> mm(&arena);
|
obj<AAllocator,DArena> mm(&arena);
|
||||||
|
|
||||||
|
|
@ -83,6 +83,13 @@ namespace xo {
|
||||||
return new (mem) DApplySsm(applystate, fn_expr, args);
|
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
|
void
|
||||||
DApplySsm::start(obj<AExpression> fn_expr,
|
DApplySsm::start(obj<AExpression> fn_expr,
|
||||||
ParserStateMachine * p_psm)
|
ParserStateMachine * p_psm)
|
||||||
|
|
@ -91,10 +98,7 @@ namespace xo {
|
||||||
|
|
||||||
DArena::Checkpoint ckp = p_psm->parser_alloc().checkpoint();
|
DArena::Checkpoint ckp = p_psm->parser_alloc().checkpoint();
|
||||||
|
|
||||||
DApplySsm * apply_ssm
|
auto ssm = DApplySsm::make(p_psm->parser_alloc(), fn_expr);
|
||||||
= DApplySsm::make(p_psm->parser_alloc(), fn_expr);
|
|
||||||
|
|
||||||
obj<ASyntaxStateMachine,DApplySsm> ssm(apply_ssm);
|
|
||||||
|
|
||||||
p_psm->push_ssm(ckp, ssm);
|
p_psm->push_ssm(ckp, ssm);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,9 +52,9 @@ namespace xo {
|
||||||
}
|
}
|
||||||
|
|
||||||
DExpectExprSsm *
|
DExpectExprSsm *
|
||||||
DExpectExprSsm::make(DArena & mm,
|
DExpectExprSsm::_make(DArena & mm,
|
||||||
bool allow_defs,
|
bool allow_defs,
|
||||||
bool cxl_on_rightbrace)
|
bool cxl_on_rightbrace)
|
||||||
{
|
{
|
||||||
void * mem = mm.alloc(typeseq::id<DExpectExprSsm>(),
|
void * mem = mm.alloc(typeseq::id<DExpectExprSsm>(),
|
||||||
sizeof(DExpectExprSsm));
|
sizeof(DExpectExprSsm));
|
||||||
|
|
@ -63,6 +63,14 @@ namespace xo {
|
||||||
cxl_on_rightbrace);
|
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
|
void
|
||||||
DExpectExprSsm::start(DArena & mm,
|
DExpectExprSsm::start(DArena & mm,
|
||||||
bool allow_defs,
|
bool allow_defs,
|
||||||
|
|
@ -71,12 +79,7 @@ namespace xo {
|
||||||
{
|
{
|
||||||
DArena::Checkpoint ckp = mm.checkpoint();
|
DArena::Checkpoint ckp = mm.checkpoint();
|
||||||
|
|
||||||
DExpectExprSsm * exp_expr
|
auto ssm = DExpectExprSsm::make(mm, allow_defs, cxl_on_rightbrace);
|
||||||
= DExpectExprSsm::make(mm,
|
|
||||||
allow_defs,
|
|
||||||
cxl_on_rightbrace);
|
|
||||||
obj<ASyntaxStateMachine> ssm
|
|
||||||
= with_facet<ASyntaxStateMachine>::mkobj(exp_expr);
|
|
||||||
|
|
||||||
p_psm->push_ssm(ckp, ssm);
|
p_psm->push_ssm(ckp, ssm);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ namespace xo {
|
||||||
{}
|
{}
|
||||||
|
|
||||||
DExpectSymbolSsm *
|
DExpectSymbolSsm *
|
||||||
DExpectSymbolSsm::make(DArena & mm)
|
DExpectSymbolSsm::_make(DArena & mm)
|
||||||
{
|
{
|
||||||
void * mem = mm.alloc(typeseq::id<DExpectSymbolSsm>(),
|
void * mem = mm.alloc(typeseq::id<DExpectSymbolSsm>(),
|
||||||
sizeof(DExpectSymbolSsm));
|
sizeof(DExpectSymbolSsm));
|
||||||
|
|
@ -28,19 +28,18 @@ namespace xo {
|
||||||
return new (mem) DExpectSymbolSsm();
|
return new (mem) DExpectSymbolSsm();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
obj<ASyntaxStateMachine,DExpectSymbolSsm>
|
||||||
|
DExpectSymbolSsm::make(DArena & mm)
|
||||||
|
{
|
||||||
|
return obj<ASyntaxStateMachine,DExpectSymbolSsm>(_make(mm));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
DExpectSymbolSsm::start(ParserStateMachine * p_psm)
|
DExpectSymbolSsm::start(ParserStateMachine * p_psm)
|
||||||
{
|
{
|
||||||
DArena::Checkpoint ckp = p_psm->parser_alloc().checkpoint();
|
DArena::Checkpoint ckp = p_psm->parser_alloc().checkpoint();
|
||||||
|
|
||||||
DExpectSymbolSsm * sym_ssm
|
auto ssm = DExpectSymbolSsm::make(p_psm->parser_alloc());
|
||||||
= DExpectSymbolSsm::make(p_psm->parser_alloc());
|
|
||||||
|
|
||||||
// note:
|
|
||||||
// relying on [ISyntaxStateMachine_DExpectedSymbolSsm.hpp]
|
|
||||||
//
|
|
||||||
obj<ASyntaxStateMachine> ssm
|
|
||||||
= with_facet<ASyntaxStateMachine>::mkobj(sym_ssm);
|
|
||||||
|
|
||||||
p_psm->push_ssm(ckp, ssm);
|
p_psm->push_ssm(ckp, ssm);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ namespace xo {
|
||||||
{}
|
{}
|
||||||
|
|
||||||
DExpectTypeSsm *
|
DExpectTypeSsm *
|
||||||
DExpectTypeSsm::make(DArena & mm)
|
DExpectTypeSsm::_make(DArena & mm)
|
||||||
{
|
{
|
||||||
void * mem = mm.alloc(typeseq::id<DArena>(),
|
void * mem = mm.alloc(typeseq::id<DArena>(),
|
||||||
sizeof(DArena));
|
sizeof(DArena));
|
||||||
|
|
@ -31,16 +31,18 @@ namespace xo {
|
||||||
return new (mem) DExpectTypeSsm();
|
return new (mem) DExpectTypeSsm();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
obj<ASyntaxStateMachine,DExpectTypeSsm>
|
||||||
|
DExpectTypeSsm::make(DArena & mm)
|
||||||
|
{
|
||||||
|
return obj<ASyntaxStateMachine,DExpectTypeSsm>(_make(mm));
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
DExpectTypeSsm::start(ParserStateMachine * p_psm)
|
DExpectTypeSsm::start(ParserStateMachine * p_psm)
|
||||||
{
|
{
|
||||||
DArena::Checkpoint ckp = p_psm->parser_alloc().checkpoint();
|
DArena::Checkpoint ckp = p_psm->parser_alloc().checkpoint();
|
||||||
|
|
||||||
DExpectTypeSsm * expect_type_ssm
|
auto ssm = DExpectTypeSsm::make(p_psm->parser_alloc());
|
||||||
= DExpectTypeSsm::make(p_psm->parser_alloc());
|
|
||||||
|
|
||||||
auto ssm
|
|
||||||
= with_facet<ASyntaxStateMachine>::mkobj(expect_type_ssm);
|
|
||||||
|
|
||||||
p_psm->push_ssm(ckp, ssm);
|
p_psm->push_ssm(ckp, ssm);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,6 +63,13 @@ namespace xo {
|
||||||
return new (mem) DIfElseSsm(ifelse_expr);
|
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
|
void
|
||||||
DIfElseSsm::start(DArena & parser_mm,
|
DIfElseSsm::start(DArena & parser_mm,
|
||||||
obj<AAllocator> expr_mm,
|
obj<AAllocator> expr_mm,
|
||||||
|
|
@ -73,10 +80,8 @@ namespace xo {
|
||||||
DArena::Checkpoint ckp = parser_mm.checkpoint();
|
DArena::Checkpoint ckp = parser_mm.checkpoint();
|
||||||
|
|
||||||
DIfElseExpr * if_expr = DIfElseExpr::_make_empty(expr_mm);
|
DIfElseExpr * if_expr = DIfElseExpr::_make_empty(expr_mm);
|
||||||
DIfElseSsm * if_ssm = DIfElseSsm::_make(parser_mm, if_expr);
|
|
||||||
|
|
||||||
obj<ASyntaxStateMachine> ssm
|
auto ssm = DIfElseSsm::make(parser_mm, if_expr);
|
||||||
= with_facet<ASyntaxStateMachine>::mkobj(if_ssm);
|
|
||||||
|
|
||||||
p_psm->push_ssm(ckp, ssm);
|
p_psm->push_ssm(ckp, ssm);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -146,16 +146,22 @@ namespace xo {
|
||||||
}
|
}
|
||||||
|
|
||||||
DProgressSsm *
|
DProgressSsm *
|
||||||
DProgressSsm::make(DArena & mm,
|
DProgressSsm::_make(DArena & mm,
|
||||||
obj<AExpression> lhs,
|
obj<AExpression> lhs,
|
||||||
optype op)
|
optype op)
|
||||||
{
|
{
|
||||||
void * mem = mm.alloc(typeseq::id<DProgressSsm>(),
|
void * mem = mm.alloc(typeseq::id<DProgressSsm>(),
|
||||||
sizeof(DProgressSsm));
|
sizeof(DProgressSsm));
|
||||||
|
|
||||||
return new (mem) DProgressSsm(lhs, op);
|
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
|
void
|
||||||
|
|
@ -166,10 +172,7 @@ namespace xo {
|
||||||
{
|
{
|
||||||
DArena::Checkpoint ckp = parser_mm.checkpoint();
|
DArena::Checkpoint ckp = parser_mm.checkpoint();
|
||||||
|
|
||||||
DProgressSsm * progress_ssm
|
auto ssm = DProgressSsm::make(parser_mm, lhs, op);
|
||||||
= DProgressSsm::make(parser_mm, lhs, op);
|
|
||||||
|
|
||||||
obj<ASyntaxStateMachine,DProgressSsm> ssm(progress_ssm);
|
|
||||||
|
|
||||||
p_psm->push_ssm(ckp, ssm);
|
p_psm->push_ssm(ckp, ssm);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue