xo-reader2: bugfix: checkpoint before allocating SSMs
This commit is contained in:
parent
ce655ed6bd
commit
66d9bc5cd6
18 changed files with 78 additions and 36 deletions
|
|
@ -343,8 +343,8 @@ namespace xo {
|
|||
{}
|
||||
|
||||
DDefineSsm *
|
||||
DDefineSsm::make(DArena & mm,
|
||||
DDefineExpr * def_expr)
|
||||
DDefineSsm::_make(DArena & mm,
|
||||
DDefineExpr * def_expr)
|
||||
{
|
||||
void * mem = mm.alloc(typeseq::id<DDefineSsm>(),
|
||||
sizeof(DDefineSsm));
|
||||
|
|
@ -352,6 +352,13 @@ namespace xo {
|
|||
return new (mem) DDefineSsm(def_expr);
|
||||
}
|
||||
|
||||
obj<ASyntaxStateMachine,DDefineSsm>
|
||||
DDefineSsm::make(DArena & mm,
|
||||
DDefineExpr * def_expr)
|
||||
{
|
||||
return obj<ASyntaxStateMachine,DDefineSsm>(_make(mm, def_expr));
|
||||
}
|
||||
|
||||
void
|
||||
DDefineSsm::start(DArena & mm,
|
||||
obj<AAllocator> expr_mm,
|
||||
|
|
@ -361,14 +368,13 @@ namespace xo {
|
|||
|
||||
assert(p_psm->stack());
|
||||
|
||||
DArena::Checkpoint ckp = p_psm->parser_alloc().checkpoint();
|
||||
|
||||
DDefineExpr * def_expr = DDefineExpr::make_empty(expr_mm);
|
||||
|
||||
DDefineSsm * define_ssm = DDefineSsm::make(mm, def_expr);
|
||||
auto define_ssm = DDefineSsm::make(mm, def_expr);
|
||||
|
||||
obj<ASyntaxStateMachine> ssm
|
||||
= with_facet<ASyntaxStateMachine>::mkobj(define_ssm);
|
||||
|
||||
p_psm->push_ssm(ssm);
|
||||
p_psm->push_ssm(ckp, define_ssm);
|
||||
|
||||
// note: triggers poly dispatch
|
||||
p_psm->on_token(Token::def_token());
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue