From b6a94bb61c840bdb600663d4b1faf7eadb432588 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Thu, 8 Aug 2024 13:25:56 -0400 Subject: [PATCH] xo-reader: refactor: mv on_typedescr def-expr impl -> define_xs --- include/xo/reader/define_xs.hpp | 3 +++ src/reader/define_xs.cpp | 48 +++++++++++++++++++++++++++++++++ src/reader/exprstate.cpp | 17 +++--------- 3 files changed, 54 insertions(+), 14 deletions(-) diff --git a/include/xo/reader/define_xs.hpp b/include/xo/reader/define_xs.hpp index 8b9d1512..88e07237 100644 --- a/include/xo/reader/define_xs.hpp +++ b/include/xo/reader/define_xs.hpp @@ -35,6 +35,9 @@ namespace xo { virtual void on_symbol(const std::string & symbol_name, exprstatestack * p_stack, rp * p_emit_expr) override; + virtual void on_typedescr(TypeDescr td, + exprstatestack * /*p_stack*/, + rp * /*p_emit_expr*/) override; private: /** diff --git a/src/reader/define_xs.cpp b/src/reader/define_xs.cpp index e4df8cea..f1ce7669 100644 --- a/src/reader/define_xs.cpp +++ b/src/reader/define_xs.cpp @@ -375,6 +375,54 @@ namespace xo { return; } } + + void + define_xs::on_typedescr(TypeDescr td, + 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: + case exprstatetype::def_1: + /* NOT IMPLEMENTED (ill-formed program) */ + assert(false); + return; + + case exprstatetype::def_2: + this->exs_type_ = exprstatetype::def_3; + this->cvt_expr_ = ConvertExprAccess::make(td /*dest_type*/, + nullptr /*source_expr*/); + this->def_expr_->assign_rhs(this->cvt_expr_); + //this->def_lhs_td_ = td; + + return; + + 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/exprstate.cpp b/src/reader/exprstate.cpp index f58be6bd..2b4b777e 100644 --- a/src/reader/exprstate.cpp +++ b/src/reader/exprstate.cpp @@ -549,7 +549,7 @@ namespace xo { } /*on_symbol*/ void - exprstate::on_typedescr(TypeDescr td, + exprstate::on_typedescr(TypeDescr /*td*/, exprstatestack * /*p_stack*/, rp * /*p_emit_expr*/) { @@ -557,25 +557,14 @@ namespace xo { switch (this->exs_type_) { case exprstatetype::expect_toplevel_expression_sequence: + case exprstatetype::def_0: case exprstatetype::def_1: - /* NOT IMPLEMENTED */ - assert(false); - return; - case exprstatetype::def_2: - this->exs_type_ = exprstatetype::def_3; - this->cvt_expr_ = ConvertExprAccess::make(td /*dest_type*/, - nullptr /*source_expr*/); - this->def_expr_->assign_rhs(this->cvt_expr_); - //this->def_lhs_td_ = td; - - return; - case exprstatetype::def_3: case exprstatetype::def_4: case exprstatetype::def_5: - /* NOT IMPLEMENTED */ + /* unreachable */ assert(false); return;