From 08497a371c3c6aba070eca40fc0314456b52fa71 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sat, 10 Aug 2024 16:56:35 -0500 Subject: [PATCH] xo-reader: mv symbol handling to expect_symbol_xs --- include/xo/reader/expect_symbol_xs.hpp | 4 ++++ src/reader/expect_symbol_xs.cpp | 14 ++++++++++++++ src/reader/exprstate.cpp | 13 +------------ 3 files changed, 19 insertions(+), 12 deletions(-) diff --git a/include/xo/reader/expect_symbol_xs.hpp b/include/xo/reader/expect_symbol_xs.hpp index 103b89aa..144bc3d0 100644 --- a/include/xo/reader/expect_symbol_xs.hpp +++ b/include/xo/reader/expect_symbol_xs.hpp @@ -19,6 +19,10 @@ namespace xo { expect_symbol_xs(); static std::unique_ptr expect_symbol_expression(); + + virtual void on_symbol_token(const token_type & tk, + exprstatestack * p_stack, + rp * p_emit_expr) override; }; } /*namespace scm*/ } /*namespace xo*/ diff --git a/src/reader/expect_symbol_xs.cpp b/src/reader/expect_symbol_xs.cpp index afc8bf6e..84faeaa3 100644 --- a/src/reader/expect_symbol_xs.cpp +++ b/src/reader/expect_symbol_xs.cpp @@ -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 * p_emit_expr) + { + /* have to do pop first, before sending symbol to + * the o.g. symbol-requester + */ + std::unique_ptr self = p_stack->pop_exprstate(); + + p_stack->top_exprstate().on_symbol(tk.text(), + p_stack, p_emit_expr); + return; + } } /*namespace scm*/ } /*namespace xo*/ diff --git a/src/reader/exprstate.cpp b/src/reader/exprstate.cpp index 9c083656..aa916b0d 100644 --- a/src/reader/exprstate.cpp +++ b/src/reader/exprstate.cpp @@ -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 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;