From fa9f4967f2389619baa82b436b7031f1f5298594 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Mon, 19 Aug 2024 15:58:35 -0400 Subject: [PATCH] xo-reader: + parserstatemachine.push_exprstate(); simplify lambda_xs --- include/xo/reader/lambda_xs.hpp | 2 +- include/xo/reader/parserstatemachine.hpp | 1 + src/reader/expect_expr_xs.cpp | 7 +------ src/reader/lambda_xs.cpp | 11 ++++------- src/reader/parserstatemachine.cpp | 10 ++++++++++ 5 files changed, 17 insertions(+), 14 deletions(-) diff --git a/include/xo/reader/lambda_xs.hpp b/include/xo/reader/lambda_xs.hpp index 5ad0adfb..79c084ab 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 void start(exprstatestack * p_stack, rp * p_emit_expr); + static void start(parserstatemachine * p_psm); virtual void on_lambda_token(const token_type & tk, parserstatemachine * p_psm) override; diff --git a/include/xo/reader/parserstatemachine.hpp b/include/xo/reader/parserstatemachine.hpp index c5222194..c7ca130c 100644 --- a/include/xo/reader/parserstatemachine.hpp +++ b/include/xo/reader/parserstatemachine.hpp @@ -27,6 +27,7 @@ namespace xo { std::unique_ptr pop_exprstate(); exprstate & top_exprstate(); + void push_exprstate(std::unique_ptr x); public: exprstatestack * p_stack_; diff --git a/src/reader/expect_expr_xs.cpp b/src/reader/expect_expr_xs.cpp index bdd66b1a..2ec95272 100644 --- a/src/reader/expect_expr_xs.cpp +++ b/src/reader/expect_expr_xs.cpp @@ -41,13 +41,8 @@ namespace xo { //constexpr const char * self_name = "exprstate::on_leftparen"; - auto p_stack = p_psm->p_stack_; - auto p_emit_expr = p_psm->p_emit_expr_; - /* push lparen_0 to remember to look for subsequent rightparen. */ - lambda_xs::start(p_stack, p_emit_expr); - //p_psm->top_exprstate().on_lambda_token(tk, p_stack, p_emit_expr); - //p_stack->push_exprstate(expect_expr_xs::expect_rhs_expression()); + lambda_xs::start(p_psm); } void diff --git a/src/reader/lambda_xs.cpp b/src/reader/lambda_xs.cpp index 1ad6f401..491ab908 100644 --- a/src/reader/lambda_xs.cpp +++ b/src/reader/lambda_xs.cpp @@ -17,14 +17,11 @@ namespace xo { } void - lambda_xs::start(exprstatestack * p_stack, - rp * p_emit_expr) + lambda_xs::start(parserstatemachine * p_psm) { - parserstatemachine psm(p_stack, p_emit_expr); - - p_stack->push_exprstate(lambda_xs::make()); - p_stack->top_exprstate() - .on_lambda_token(token_type::lambda(), &psm); + p_psm->push_exprstate(lambda_xs::make()); + p_psm->top_exprstate() + .on_lambda_token(token_type::lambda(), p_psm); } lambda_xs::lambda_xs() : exprstate(exprstatetype::lambdaexpr) {} diff --git a/src/reader/parserstatemachine.cpp b/src/reader/parserstatemachine.cpp index 6d47b909..103ac15b 100644 --- a/src/reader/parserstatemachine.cpp +++ b/src/reader/parserstatemachine.cpp @@ -12,6 +12,16 @@ namespace xo { parserstatemachine::pop_exprstate() { return p_stack_->pop_exprstate(); } + + exprstate & + parserstatemachine::top_exprstate() { + return p_stack_->top_exprstate(); + } + + void + parserstatemachine::push_exprstate(std::unique_ptr x) { + p_stack_->push_exprstate(std::move(x)); + } } /*namespace scm*/ } /*namespace xo*/