xo-reader: refactor: simplify expect_symbol_xs api

This commit is contained in:
Roland Conybeare 2024-08-18 23:43:59 -04:00
commit f8754913bb
4 changed files with 12 additions and 4 deletions

View file

@ -18,7 +18,9 @@ namespace xo {
public:
expect_symbol_xs();
static std::unique_ptr<expect_symbol_xs> expect_symbol_expression();
static std::unique_ptr<expect_symbol_xs> make();
static void start(exprstatestack * p_stack);
virtual void on_symbol_token(const token_type & tk,
exprstatestack * p_stack,

View file

@ -98,7 +98,7 @@ namespace xo {
if (this->defxs_type_ == defexprstatetype::def_0) {
this->defxs_type_ = defexprstatetype::def_1;
p_stack->push_exprstate(expect_symbol_xs::expect_symbol_expression());
expect_symbol_xs::start(p_stack);
} else {
exprstate::on_def_token(tk, p_stack);
}

View file

@ -49,7 +49,7 @@ namespace xo {
this->farglxs_type_ = formalarglstatetype::argl_1a;
/* TODO: refactor to have setup method on each exprstate */
p_stack->push_exprstate(expect_formal_xs::make());
p_stack->push_exprstate(expect_symbol_xs::expect_symbol_expression());
expect_symbol_xs::start(p_stack);
} else {
exprstate::on_leftparen_token(tk, p_stack, p_emit_expr);
}

View file

@ -8,10 +8,16 @@
namespace xo {
namespace scm {
std::unique_ptr<expect_symbol_xs>
expect_symbol_xs::expect_symbol_expression() {
expect_symbol_xs::make() {
return std::make_unique<expect_symbol_xs>(expect_symbol_xs());
}
void
expect_symbol_xs::start(exprstatestack * p_stack)
{
p_stack->push_exprstate(expect_symbol_xs::make());
}
expect_symbol_xs::expect_symbol_xs()
: exprstate(exprstatetype::expect_symbol)
{}