diff --git a/include/xo/reader/define_xs.hpp b/include/xo/reader/define_xs.hpp index 34670230..8c9ef9c1 100644 --- a/include/xo/reader/define_xs.hpp +++ b/include/xo/reader/define_xs.hpp @@ -42,15 +42,12 @@ namespace xo { defexprstatetype defxs_type() const { return defxs_type_; } -#ifdef OBSOLETE - bool admits_leftparen() const; -#endif + bool admits_rightparen() const; virtual bool admits_symbol() const override; virtual bool admits_colon() const override; virtual bool admits_semicolon() const override; virtual bool admits_singleassign() const override; - virtual bool admits_rightparen() const override; // virtual void on_f64(..) override virtual void on_expr(ref::brw expr, @@ -69,11 +66,6 @@ namespace xo { rp * /*p_emit_expr*/) override; virtual void on_singleassign_token(const token_type & tk, exprstatestack * p_stack) override; -#ifdef OBSOLETE - virtual void on_leftparen_token(const token_type & tk, - exprstatestack * p_stack, - rp * /*p_emit_expr*/) override; -#endif virtual void on_rightparen_token(const token_type & tk, exprstatestack * p_stack, rp * /*p_emit_expr*/) override; diff --git a/include/xo/reader/exprstate.hpp b/include/xo/reader/exprstate.hpp index 28ba4694..61ba3319 100644 --- a/include/xo/reader/exprstate.hpp +++ b/include/xo/reader/exprstate.hpp @@ -90,9 +90,9 @@ namespace xo { #ifdef OBSOLETE /** true iff this parsing state admits a leftparen '(' as next token **/ virtual bool admits_leftparen() const; -#endif /** truee iff this parsing state admits a rightparen ')' as next token **/ virtual bool admits_rightparen() const; +#endif /** update exprstate in response to incoming token @p tk, * forward instructions to parent parser diff --git a/include/xo/reader/paren_xs.hpp b/include/xo/reader/paren_xs.hpp index 22b72f8b..d00dc384 100644 --- a/include/xo/reader/paren_xs.hpp +++ b/include/xo/reader/paren_xs.hpp @@ -32,6 +32,7 @@ namespace xo { static std::unique_ptr lparen_0(); bool admits_f64() const; + bool admits_rightparen() const; virtual bool admits_symbol() const override; virtual bool admits_colon() const override; @@ -40,7 +41,6 @@ namespace xo { #ifdef OBSOLETE virtual bool admits_leftparen() const override; #endif - virtual bool admits_rightparen() const override; virtual void on_expr(ref::brw expr, exprstatestack * p_stack, diff --git a/include/xo/reader/progress_xs.hpp b/include/xo/reader/progress_xs.hpp index 83a2ce65..d4a0c190 100644 --- a/include/xo/reader/progress_xs.hpp +++ b/include/xo/reader/progress_xs.hpp @@ -30,8 +30,8 @@ namespace xo { virtual bool admits_singleassign() const override; #ifdef OBSOLETE virtual bool admits_leftparen() const override; -#endif virtual bool admits_rightparen() const override; +#endif virtual void on_expr(ref::brw expr, exprstatestack * p_stack, diff --git a/src/reader/exprstate.cpp b/src/reader/exprstate.cpp index 1fd4d08a..31553c1c 100644 --- a/src/reader/exprstate.cpp +++ b/src/reader/exprstate.cpp @@ -180,50 +180,6 @@ namespace xo { } #ifdef OBSOLETE - bool - exprstate::admits_leftparen() const { - switch (exs_type_) { - case exprstatetype::expect_toplevel_expression_sequence: - /* input like - * (function(blah...)) - * not allowed at toplevel; - * creates ambiguity e.g. consider - * x := foo - * (bar) - * - * is rhs 'foo' or 'foo(bar)' - */ - return false; - - case exprstatetype::defexpr: - case exprstatetype::parenexpr: - case exprstatetype::expect_rhs_expression: - /* unreachable - redirects to define_xs etc */ - assert(false); - return false; - - case exprstatetype::expect_type: - return false; - - case exprstatetype::expect_symbol: - return false; - - case exprstatetype::expr_progress: - /* unreachable */ - assert(false); - return false; - - case exprstatetype::invalid: - case exprstatetype::n_exprstatetype: - /* unreachable */ - assert(false); - return false; - } - - return false; - } -#endif - bool exprstate::admits_rightparen() const { switch (exs_type_) { @@ -255,6 +211,7 @@ namespace xo { return false; } +#endif void exprstate::on_def_token(const token_type & tk, @@ -428,7 +385,7 @@ namespace xo { constexpr bool c_debug_flag = true; scope log(XO_DEBUG(c_debug_flag)); - constexpr const char * self_name = "exprstate::on_singleassign"; + constexpr const char * self_name = "exprstate::on_singleassign_token"; if (!this->admits_singleassign()) { @@ -448,13 +405,13 @@ namespace xo { constexpr bool c_debug_flag = true; scope log(XO_DEBUG(c_debug_flag)); - constexpr const char * self_name = "exprstate::on_leftparen"; + constexpr const char * self_name = "exprstate::on_leftparen_token"; this->illegal_input_error(self_name, tk); } void - exprstate::on_rightparen_token(const token_type & /*tk*/, + exprstate::on_rightparen_token(const token_type & tk, exprstatestack * /*p_stack*/, rp * /*p_emit_expr*/) { @@ -463,18 +420,7 @@ namespace xo { constexpr const char * self_name = "exprstate::on_rightparen"; - if (!this->admits_rightparen()) - { - throw std::runtime_error(tostr(self_name, - ": unexpected rightparen ')' for parsing state", - xtag("state", *this))); - } - - if (this->exs_type_ == exprstatetype::expr_progress - || this->exs_type_ == exprstatetype::parenexpr) { - /* unreachable -- see progress_xs::on_rightparen() etc */ - assert(false); - } + this->illegal_input_error(self_name, tk); } void diff --git a/src/reader/progress_xs.cpp b/src/reader/progress_xs.cpp index f5ba36ee..f518374a 100644 --- a/src/reader/progress_xs.cpp +++ b/src/reader/progress_xs.cpp @@ -26,11 +26,13 @@ namespace xo { bool progress_xs::admits_singleassign() const { return false; } +#ifdef OBSOLETE bool progress_xs::admits_rightparen() const { /* satisfies expression form */ return true; } +#endif bool progress_xs::admits_f64() const { return false; }