diff --git a/include/xo/reader/exprstate.hpp b/include/xo/reader/exprstate.hpp index bf93a3f5..3c5e2e6a 100644 --- a/include/xo/reader/exprstate.hpp +++ b/include/xo/reader/exprstate.hpp @@ -97,22 +97,26 @@ namespace xo { virtual void on_expr(ref::brw expr, exprstatestack * p_stack, rp * p_emit_expr); + /** update exprstate when expecting a symbol **/ virtual void on_symbol(const std::string & symbol, exprstatestack * p_stack, rp * p_emit_expr); + /** update exprstate when expeccting a typedescr **/ virtual void on_typedescr(TypeDescr td, exprstatestack * p_stack, rp * p_emit_expr); + /** update exprstate when expecting a formal parameter **/ virtual void on_formal(const rp & formal, exprstatestack * p_stack, rp * p_emit_expr); + /** update expression when epecting a formal parameter list **/ virtual void on_formal_arglist(const std::vector> & argl, - exprstatestack * p_stack, - rp * p_emit_expr); + parserstatemachine * p_psm); + /** print human-readable representation on @p os **/ virtual void print(std::ostream & os) const; diff --git a/include/xo/reader/lambda_xs.hpp b/include/xo/reader/lambda_xs.hpp index 59f9f78a..b60f14a6 100644 --- a/include/xo/reader/lambda_xs.hpp +++ b/include/xo/reader/lambda_xs.hpp @@ -45,8 +45,7 @@ namespace xo { virtual void on_lambda_token(const token_type & tk, parserstatemachine * p_psm) override; virtual void on_formal_arglist(const std::vector> & argl, - exprstatestack * p_stack, - rp * p_emit_expr) override; + parserstatemachine * p_psm) override; virtual void on_expr(ref::brw expr, exprstatestack * p_stack, rp * p_emit_expr) override; diff --git a/src/reader/expect_formal_arglist_xs.cpp b/src/reader/expect_formal_arglist_xs.cpp index 6bb9b099..dc400aeb 100644 --- a/src/reader/expect_formal_arglist_xs.cpp +++ b/src/reader/expect_formal_arglist_xs.cpp @@ -94,13 +94,11 @@ namespace xo { parserstatemachine * p_psm) { auto p_stack = p_psm->p_stack_; - auto p_emit_expr = p_psm->p_emit_expr_; if (farglxs_type_ == formalarglstatetype::argl_1b) { std::unique_ptr self = p_stack->pop_exprstate(); - p_stack->top_exprstate().on_formal_arglist(this->argl_, - p_stack, p_emit_expr); + p_stack->top_exprstate().on_formal_arglist(this->argl_, p_psm); } else { exprstate::on_rightparen_token(tk, p_psm); } diff --git a/src/reader/exprstate.cpp b/src/reader/exprstate.cpp index ba58eb79..c9d14c82 100644 --- a/src/reader/exprstate.cpp +++ b/src/reader/exprstate.cpp @@ -125,14 +125,15 @@ namespace xo { void exprstate::on_formal_arglist(const std::vector> & argl, - exprstatestack * p_stack, - rp * /*p_emit_expr*/) + parserstatemachine * p_psm) { /* returning type description to something that wants it */ constexpr bool c_debug_flag = true; scope log(XO_DEBUG(c_debug_flag)); + auto p_stack = p_psm->p_stack_; + log && log(xtag("exstype", p_stack->top_exprstate().exs_type())); diff --git a/src/reader/lambda_xs.cpp b/src/reader/lambda_xs.cpp index 8824ab26..7aaf657d 100644 --- a/src/reader/lambda_xs.cpp +++ b/src/reader/lambda_xs.cpp @@ -44,15 +44,16 @@ namespace xo { void lambda_xs::on_formal_arglist(const std::vector> & argl, - exprstatestack * p_stack, - rp * p_emit_expr) + parserstatemachine * p_psm) { + auto p_stack = p_psm->p_stack_; + if (lmxs_type_ == lambdastatetype::lm_1) { this->lmxs_type_ = lambdastatetype::lm_2; this->argl_ = argl; expect_expr_xs::start(p_stack); } else { - exprstate::on_formal_arglist(argl, p_stack, p_emit_expr); + exprstate::on_formal_arglist(argl, p_psm); } }