diff --git a/include/xo/reader/parserstatemachine.hpp b/include/xo/reader/parserstatemachine.hpp index 065513c5..0e69d44c 100644 --- a/include/xo/reader/parserstatemachine.hpp +++ b/include/xo/reader/parserstatemachine.hpp @@ -52,6 +52,7 @@ namespace xo { // ---- parsing inputs ----- void on_semicolon_token(const token_type & tk); + void on_operator_token(const token_type & tk); void on_leftbrace_token(const token_type & tk); void on_rightbrace_token(const token_type & tk); diff --git a/src/reader/expect_expr_xs.cpp b/src/reader/expect_expr_xs.cpp index 3d238ede..1f07d131 100644 --- a/src/reader/expect_expr_xs.cpp +++ b/src/reader/expect_expr_xs.cpp @@ -55,10 +55,14 @@ namespace xo { expect_expr_xs::on_def_token(const token_type & tk, parserstatemachine * p_psm) { - if (allow_defs_) + constexpr bool c_debug_flag = true; + scope log(XO_DEBUG(c_debug_flag)); + + if (allow_defs_) { define_xs::start(p_psm); - else + } else { exprstate::on_def_token(tk, p_psm); + } } void @@ -101,6 +105,9 @@ namespace xo { expect_expr_xs::on_rightbrace_token(const token_type & tk, parserstatemachine * p_psm) { + constexpr bool c_debug_flag = true; + scope log(XO_DEBUG(c_debug_flag)); + if (cxl_on_rightbrace_) { auto self = p_psm->pop_exprstate(); @@ -116,7 +123,10 @@ namespace xo { expect_expr_xs::on_symbol_token(const token_type & tk, parserstatemachine * p_psm) { - /* todo: treat symbol as variable name */ + constexpr bool c_debug_flag = true; + scope log(XO_DEBUG(c_debug_flag)); + + log && log(xtag("tk", tk)); /* various possibilities when looking for rhs expression: * diff --git a/src/reader/expect_symbol_xs.cpp b/src/reader/expect_symbol_xs.cpp index 27a94b64..0e01924e 100644 --- a/src/reader/expect_symbol_xs.cpp +++ b/src/reader/expect_symbol_xs.cpp @@ -28,6 +28,11 @@ namespace xo { expect_symbol_xs::on_symbol_token(const token_type & tk, parserstatemachine * p_psm) { + constexpr bool c_debug_flag = true; + scope log(XO_DEBUG(c_debug_flag)); + + log && log(xtag("tk", tk)); + /* have to do pop first, before sending symbol to * the o.g. symbol-requester */ diff --git a/src/reader/exprstate.cpp b/src/reader/exprstate.cpp index 550e20d0..77480dcb 100644 --- a/src/reader/exprstate.cpp +++ b/src/reader/exprstate.cpp @@ -394,9 +394,17 @@ namespace xo { constexpr bool c_debug_flag = true; scope log(XO_DEBUG(c_debug_flag)); + const char * c_self_name = "exprstate::on_expr_with_semicolon"; + log && log(xtag("exstype", this->exs_type_), xtag("expr", expr)); + throw std::runtime_error + (tostr(c_self_name, + ": unexpected expression for parsing state", + xtag("expr", expr), + xtag("state", *this))); + assert(false); } /*on_expr_with_semicolon*/ diff --git a/src/reader/parserstatemachine.cpp b/src/reader/parserstatemachine.cpp index 814c3a3b..373e83e3 100644 --- a/src/reader/parserstatemachine.cpp +++ b/src/reader/parserstatemachine.cpp @@ -100,6 +100,19 @@ namespace xo { ->top_exprstate().on_semicolon_token(tk, this); } + void + parserstatemachine::on_operator_token(const token_type & tk) + { + constexpr bool c_debug_flag = true; + scope log(XO_DEBUG(c_debug_flag)); + + log && log(xtag("tk", tk), + xtag("psm", *this)); + + this->p_stack_ + ->top_exprstate().on_operator_token(tk, this); + } + void parserstatemachine::on_leftbrace_token(const token_type & tk) { diff --git a/src/reader/progress_xs.cpp b/src/reader/progress_xs.cpp index 47bf2c04..40d857b6 100644 --- a/src/reader/progress_xs.cpp +++ b/src/reader/progress_xs.cpp @@ -332,6 +332,9 @@ namespace xo { progress_xs::on_operator_token(const token_type & tk, parserstatemachine * p_psm) { + constexpr bool c_debug_flag = true; + scope log(XO_DEBUG(c_debug_flag)); + constexpr const char * c_self_name = "progress_xs::on_operator_token"; if (op_type_ == optype::invalid) {