From 3a1db8ca022c109af74fe5754675ead482f3dcd7 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Wed, 7 Aug 2024 16:32:32 -0400 Subject: [PATCH] xo-reader: refactor: move defexpr on_symbol to dedicated define_xs --- include/xo/reader/define_xs.hpp | 4 ++++ src/reader/define_xs.cpp | 39 +++++++++++++++++++++++++++++++++ src/reader/parser.cpp | 9 ++------ 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/include/xo/reader/define_xs.hpp b/include/xo/reader/define_xs.hpp index 43cd445c..c872a58b 100644 --- a/include/xo/reader/define_xs.hpp +++ b/include/xo/reader/define_xs.hpp @@ -23,6 +23,10 @@ namespace xo { virtual void on_expr(ref::brw expr, exprstatestack * p_stack, rp * p_emit_expr) override; + virtual void on_symbol(const std::string & symbol_name, + exprstatestack * p_stack, + rp * p_emit_expr) override; + private: /** * def foo : f64 = 1 ; diff --git a/src/reader/define_xs.cpp b/src/reader/define_xs.cpp index 57526378..09148c9e 100644 --- a/src/reader/define_xs.cpp +++ b/src/reader/define_xs.cpp @@ -65,6 +65,45 @@ namespace xo { return; } } + + void + define_xs::on_symbol(const std::string & symbol_name, + exprstatestack * /*p_stack*/, + rp * /*p_emit_expr*/) + { + switch (this->exs_type_) { + case exprstatetype::expect_toplevel_expression_sequence: + /* unreachable */ + assert(false); + return; + case exprstatetype::def_0: + this->exs_type_ = exprstatetype::def_1; + this->def_expr_->assign_lhs_name(symbol_name); + //this->def_lhs_symbol_ = symbol_name; + + return; + case exprstatetype::def_1: + case exprstatetype::def_2: + case exprstatetype::def_3: + case exprstatetype::def_4: + case exprstatetype::def_5: + /* NOT IMPLEMENTED */ + assert(false); + return; + + case exprstatetype::lparen_0: + case exprstatetype::lparen_1: + case exprstatetype::expect_rhs_expression: + case exprstatetype::expect_type: + case exprstatetype::expect_symbol: + case exprstatetype::expr_progress: + case exprstatetype::invalid: + case exprstatetype::n_exprstatetype: + /* unreachable */ + assert(false); + return; + } + } } /*namespace scm*/ } /*namespace xo*/ diff --git a/src/reader/parser.cpp b/src/reader/parser.cpp index 63d19f93..8e0df1ef 100644 --- a/src/reader/parser.cpp +++ b/src/reader/parser.cpp @@ -991,7 +991,7 @@ namespace xo { } /*on_expr*/ void - exprstate::on_symbol(const std::string & symbol_name, + exprstate::on_symbol(const std::string & /*symbol_name*/, exprstatestack * /*p_stack*/, rp * /*p_emit_expr*/) { @@ -1007,17 +1007,12 @@ namespace xo { assert(false); return; case exprstatetype::def_0: - this->exs_type_ = exprstatetype::def_1; - this->def_expr_->assign_lhs_name(symbol_name); - //this->def_lhs_symbol_ = symbol_name; - - return; case exprstatetype::def_1: case exprstatetype::def_2: case exprstatetype::def_3: case exprstatetype::def_4: case exprstatetype::def_5: - /* NOT IMPLEMENTED */ + /* unreachable */ assert(false); return;