xo-reader2: + ExpectSymbolSsm + SyntaxStateMachine.on_parsed_symbol
This commit is contained in:
parent
e252a9f4e7
commit
83ef04c250
28 changed files with 537 additions and 52 deletions
|
|
@ -10,21 +10,35 @@ namespace xo {
|
|||
using xo::facet::typeseq;
|
||||
|
||||
namespace scm {
|
||||
ParserStack::ParserStack(obj<ASyntaxStateMachine> ssm,
|
||||
ParserStack::ParserStack(DArena::Checkpoint ckp,
|
||||
obj<ASyntaxStateMachine> ssm,
|
||||
ParserStack * parent)
|
||||
: ssm_{ssm}, parent_{parent}
|
||||
: ckp_{ckp}, ssm_{ssm}, parent_{parent}
|
||||
{}
|
||||
|
||||
ParserStack *
|
||||
ParserStack::push(ParserStack * stack,
|
||||
obj<AAllocator> mm,
|
||||
DArena & mm,
|
||||
obj<ASyntaxStateMachine> ssm)
|
||||
|
||||
{
|
||||
DArena::Checkpoint ckp = mm.checkpoint();
|
||||
|
||||
void * mem = mm.alloc(typeseq::id<ParserStack>(),
|
||||
sizeof(ParserStack));
|
||||
|
||||
return new (mem) ParserStack(ssm, stack);
|
||||
return new (mem) ParserStack(ckp, ssm, stack);
|
||||
}
|
||||
|
||||
ParserStack *
|
||||
ParserStack::pop(ParserStack * stack,
|
||||
DArena & mm)
|
||||
{
|
||||
assert(stack);
|
||||
|
||||
mm.restore(stack->ckp());
|
||||
|
||||
return stack->parent();
|
||||
}
|
||||
|
||||
} /*namespace scm*/
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue