diff --git a/include/xo/reader/lambda_xs.hpp b/include/xo/reader/lambda_xs.hpp index 1152406a..e1880039 100644 --- a/include/xo/reader/lambda_xs.hpp +++ b/include/xo/reader/lambda_xs.hpp @@ -40,7 +40,7 @@ namespace xo { public: lambda_xs(); - static std::unique_ptr make(); + static void start(exprstatestack * p_stack, rp * p_emit_expr); virtual void on_lambda_token(const token_type & tk, exprstatestack * p_stack, @@ -55,6 +55,9 @@ namespace xo { exprstatestack * p_stack, rp * p_emit_expr) override; + private: + static std::unique_ptr make(); + private: /** parsing state-machine state **/ lambdastatetype lmxs_type_ = lambdastatetype::lm_0; diff --git a/src/reader/expect_expr_xs.cpp b/src/reader/expect_expr_xs.cpp index c91205d0..9f27d2a0 100644 --- a/src/reader/expect_expr_xs.cpp +++ b/src/reader/expect_expr_xs.cpp @@ -31,7 +31,7 @@ namespace xo { {} void - expect_expr_xs::on_lambda_token(const token_type & tk, + expect_expr_xs::on_lambda_token(const token_type & /*tk*/, exprstatestack * p_stack, rp * p_emit_expr) { @@ -41,8 +41,8 @@ namespace xo { //constexpr const char * self_name = "exprstate::on_leftparen"; /* push lparen_0 to remember to look for subsequent rightparen. */ - p_stack->push_exprstate(lambda_xs::make()); - p_stack->top_exprstate().on_lambda_token(tk, p_stack, p_emit_expr); + lambda_xs::start(p_stack, p_emit_expr); + //p_stack->top_exprstate().on_lambda_token(tk, p_stack, p_emit_expr); //p_stack->push_exprstate(expect_expr_xs::expect_rhs_expression()); } diff --git a/src/reader/lambda_xs.cpp b/src/reader/lambda_xs.cpp index c9c131ac..1b28cf11 100644 --- a/src/reader/lambda_xs.cpp +++ b/src/reader/lambda_xs.cpp @@ -14,6 +14,15 @@ namespace xo { return std::make_unique(lambda_xs()); } + void + lambda_xs::start(exprstatestack * p_stack, + rp * p_emit_expr) + { + p_stack->push_exprstate(lambda_xs::make()); + p_stack->top_exprstate() + .on_lambda_token(token_type::lambda(), p_stack, p_emit_expr); + } + lambda_xs::lambda_xs() : exprstate(exprstatetype::lambdaexpr) {} void