xo-reader: mv symbol handling to expect_symbol_xs

This commit is contained in:
Roland Conybeare 2024-08-10 16:56:35 -05:00
commit 08497a371c
3 changed files with 19 additions and 12 deletions

View file

@ -19,6 +19,10 @@ namespace xo {
expect_symbol_xs();
static std::unique_ptr<expect_symbol_xs> expect_symbol_expression();
virtual void on_symbol_token(const token_type & tk,
exprstatestack * p_stack,
rp<Expression> * p_emit_expr) override;
};
} /*namespace scm*/
} /*namespace xo*/

View file

@ -16,6 +16,20 @@ namespace xo {
: exprstate(exprstatetype::expect_symbol)
{}
void
expect_symbol_xs::on_symbol_token(const token_type & tk,
exprstatestack * p_stack,
rp<Expression> * p_emit_expr)
{
/* have to do pop first, before sending symbol to
* the o.g. symbol-requester
*/
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
p_stack->top_exprstate().on_symbol(tk.text(),
p_stack, p_emit_expr);
return;
}
} /*namespace scm*/
} /*namespace xo*/

View file

@ -198,22 +198,11 @@ namespace xo {
case exprstatetype::defexpr:
case exprstatetype::parenexpr:
case exprstatetype::expect_rhs_expression:
case exprstatetype::expect_symbol:
/* unreachable - redirected to define_xs etc */
assert(false);
return;
case exprstatetype::expect_symbol:
{
/* have to do pop first, before sending symbol to
* the o.g. symbol-requester
*/
std::unique_ptr<exprstate> self = p_stack->pop_exprstate();
p_stack->top_exprstate().on_symbol(tk.text(),
p_stack, p_emit_expr);
return;
}
case exprstatetype::expect_type: {
TypeDescr td = nullptr;