diff --git a/include/xo/reader/define_xs.hpp b/include/xo/reader/define_xs.hpp index 41bf90d4..162bd62a 100644 --- a/include/xo/reader/define_xs.hpp +++ b/include/xo/reader/define_xs.hpp @@ -21,6 +21,7 @@ namespace xo { static std::unique_ptr def_0(rp def_expr); virtual bool admits_definition() const override; + virtual bool admits_symbol() const override; // virtual void on_f64(..) override virtual void on_expr(ref::brw expr, exprstatestack * p_stack, diff --git a/src/reader/define_xs.cpp b/src/reader/define_xs.cpp index 5da374ad..6fa1bc45 100644 --- a/src/reader/define_xs.cpp +++ b/src/reader/define_xs.cpp @@ -47,6 +47,38 @@ namespace xo { return false; } + bool + define_xs::admits_symbol() 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_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 e5700bdd..f503932c 100644 --- a/src/reader/parser.cpp +++ b/src/reader/parser.cpp @@ -94,12 +94,16 @@ namespace xo { exprstate::admits_symbol() 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: