From 3f949dd3e4eea3492b21090a35eeed513688db95 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Wed, 7 Aug 2024 16:36:46 -0400 Subject: [PATCH] xo-reader: refactor: specialize admits_definition() for define_xs --- include/xo/reader/define_xs.hpp | 2 ++ src/reader/define_xs.cpp | 37 +++++++++++++++++++++++++++++++++ src/reader/parser.cpp | 6 +----- 3 files changed, 40 insertions(+), 5 deletions(-) diff --git a/include/xo/reader/define_xs.hpp b/include/xo/reader/define_xs.hpp index c872a58b..41bf90d4 100644 --- a/include/xo/reader/define_xs.hpp +++ b/include/xo/reader/define_xs.hpp @@ -20,6 +20,8 @@ namespace xo { static std::unique_ptr def_0(rp def_expr); + virtual bool admits_definition() const override; + // virtual void on_f64(..) override virtual void on_expr(ref::brw expr, exprstatestack * p_stack, rp * p_emit_expr) override; diff --git a/src/reader/define_xs.cpp b/src/reader/define_xs.cpp index 09148c9e..5da374ad 100644 --- a/src/reader/define_xs.cpp +++ b/src/reader/define_xs.cpp @@ -10,6 +10,43 @@ namespace xo { def_expr) {} + bool + define_xs::admits_definition() 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: + /* note for def_4: + * rhs could certainly be a function body that contains + * nested defines; but then immediately-enclosing-exprstate + * would be a block + */ + return false; + case exprstatetype::lparen_0: + case exprstatetype::lparen_1: + case exprstatetype::expect_rhs_expression: + case exprstatetype::expect_symbol: + case exprstatetype::expect_type: + 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 8e0df1ef..e5700bdd 100644 --- a/src/reader/parser.cpp +++ b/src/reader/parser.cpp @@ -70,11 +70,7 @@ namespace xo { case exprstatetype::def_3: case exprstatetype::def_4: case exprstatetype::def_5: - /* note for def_4: - * rhs could certainly be a function body that contains - * nested defines; but then immediately-enclosing-exprstate - * would be a block - */ + /* unreachable */ return false; case exprstatetype::lparen_0: case exprstatetype::lparen_1: