From e544491ef7241d8e757da72fbae09e74b521b538 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Thu, 8 Aug 2024 12:54:50 -0400 Subject: [PATCH] xo-reader: refactor: mv admits_xxxparen -> define_xs --- include/xo/reader/define_xs.hpp | 2 + src/reader/define_xs.cpp | 76 +++++++++++++++++++++++++++++++++ src/reader/parser.cpp | 17 +++----- 3 files changed, 84 insertions(+), 11 deletions(-) diff --git a/include/xo/reader/define_xs.hpp b/include/xo/reader/define_xs.hpp index 2f3e0879..8b9d1512 100644 --- a/include/xo/reader/define_xs.hpp +++ b/include/xo/reader/define_xs.hpp @@ -25,6 +25,8 @@ namespace xo { virtual bool admits_colon() const override; virtual bool admits_semicolon() const override; virtual bool admits_singleassign() const override; + virtual bool admits_leftparen() const override; + virtual bool admits_rightparen() const override; // virtual void on_f64(..) override virtual void on_expr(ref::brw expr, diff --git a/src/reader/define_xs.cpp b/src/reader/define_xs.cpp index 449eaeb6..239abb0f 100644 --- a/src/reader/define_xs.cpp +++ b/src/reader/define_xs.cpp @@ -200,6 +200,82 @@ namespace xo { return false; } + + bool + define_xs::admits_leftparen() const { + switch (exs_type_) { + case exprstatetype::expect_toplevel_expression_sequence: + /* unreachable */ + assert(false); + return false; + + case exprstatetype::def_0: + case exprstatetype::def_1: + case exprstatetype::def_2: + case exprstatetype::def_3: + case exprstatetype::def_4: + case exprstatetype::def_5: + /* input like + * def foo : f64 = ( + * ^ ^ ^ ^ ^ + * | | | | def_4 + * | | | def_3 + * | | def_2 + * | def_1 + * def_0 + * + * not allowed or relies on pushing another state + */ + return false; + + 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 false; + } + + return false; + } + + bool + define_xs::admits_rightparen() const { + switch (exs_type_) { + case exprstatetype::expect_toplevel_expression_sequence: + /* unreachable */ + assert(false); + return false; + + case exprstatetype::def_0: + case exprstatetype::def_1: + case exprstatetype::def_2: + case exprstatetype::def_3: + case exprstatetype::def_4: + case exprstatetype::def_5: + return false; + + 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 false; + } + + return false; + } + void define_xs::on_expr(ref::brw expr, exprstatestack * /* p_stack */, diff --git a/src/reader/parser.cpp b/src/reader/parser.cpp index db116b48..d777fa6b 100644 --- a/src/reader/parser.cpp +++ b/src/reader/parser.cpp @@ -310,17 +310,8 @@ namespace xo { case exprstatetype::def_3: case exprstatetype::def_4: case exprstatetype::def_5: - /* input like - * def foo : f64 = ( - * ^ ^ ^ ^ ^ - * | | | | def_4 - * | | | def_3 - * | | def_2 - * | def_1 - * def_0 - * - * not allowed or relies on pushing another state - */ + /* unreachable */ + assert(false); return false; case exprstatetype::lparen_0: @@ -357,12 +348,16 @@ namespace xo { exprstate::admits_rightparen() const { switch (exs_type_) { case exprstatetype::expect_toplevel_expression_sequence: + return false; + case exprstatetype::def_0: case exprstatetype::def_1: case exprstatetype::def_2: case exprstatetype::def_3: case exprstatetype::def_4: case exprstatetype::def_5: + /* unreachable */ + assert(false); return false; case exprstatetype::lparen_0: