From 4232da4ef2c9fadf86d0cd5ab25d3c280320bef0 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Mon, 19 Aug 2024 13:54:58 -0400 Subject: [PATCH] xo-reader: streamline: + parserstatemachine::pop_exprstate() + use --- include/xo/reader/parserstatemachine.hpp | 2 ++ src/reader/CMakeLists.txt | 1 + src/reader/define_xs.cpp | 2 +- src/reader/expect_expr_xs.cpp | 4 ++-- src/reader/expect_formal_arglist_xs.cpp | 2 +- src/reader/expect_formal_xs.cpp | 2 +- src/reader/expect_symbol_xs.cpp | 2 +- src/reader/expect_type_xs.cpp | 2 +- src/reader/lambda_xs.cpp | 2 +- src/reader/paren_xs.cpp | 2 +- src/reader/parserstatemachine.cpp | 19 +++++++++++++++++++ src/reader/progress_xs.cpp | 10 +++++----- 12 files changed, 36 insertions(+), 14 deletions(-) create mode 100644 src/reader/parserstatemachine.cpp diff --git a/include/xo/reader/parserstatemachine.hpp b/include/xo/reader/parserstatemachine.hpp index 55b285ee..060ec841 100644 --- a/include/xo/reader/parserstatemachine.hpp +++ b/include/xo/reader/parserstatemachine.hpp @@ -25,6 +25,8 @@ namespace xo { rp * p_emit_expr) : p_stack_{p_stack}, p_emit_expr_{p_emit_expr} {} + std::unique_ptr pop_exprstate(); + public: exprstatestack * p_stack_; rp * p_emit_expr_; diff --git a/src/reader/CMakeLists.txt b/src/reader/CMakeLists.txt index 0a2f7704..5edbb2e4 100644 --- a/src/reader/CMakeLists.txt +++ b/src/reader/CMakeLists.txt @@ -3,6 +3,7 @@ set(SELF_LIB xo_reader) set(SELF_SRCS parser.cpp + parserstatemachine.cpp reader.cpp exprstate.cpp exprstatestack.cpp diff --git a/src/reader/define_xs.cpp b/src/reader/define_xs.cpp index f0e7924f..a4d9f1b6 100644 --- a/src/reader/define_xs.cpp +++ b/src/reader/define_xs.cpp @@ -139,7 +139,7 @@ namespace xo { if (this->defxs_type_ == defexprstatetype::def_6) { rp expr = this->def_expr_; - std::unique_ptr self = p_stack->pop_exprstate(); + std::unique_ptr self = p_psm->pop_exprstate(); p_stack->top_exprstate().on_expr(expr, p_psm); } else { diff --git a/src/reader/expect_expr_xs.cpp b/src/reader/expect_expr_xs.cpp index 3c5001ae..538bd45c 100644 --- a/src/reader/expect_expr_xs.cpp +++ b/src/reader/expect_expr_xs.cpp @@ -91,7 +91,7 @@ namespace xo { #endif #ifdef LATER - p_stack->pop_exprstate(); + p_psm->pop_exprstate(); p_stack->top_exprstate().on_symbol(tk.text(), p_stack, p_emit_expr); #endif @@ -129,7 +129,7 @@ namespace xo { auto p_stack = p_psm->p_stack_; - std::unique_ptr self = p_stack->pop_exprstate(); + std::unique_ptr self = p_psm->pop_exprstate(); p_stack->top_exprstate().on_expr(expr, p_psm); } /*on_expr*/ diff --git a/src/reader/expect_formal_arglist_xs.cpp b/src/reader/expect_formal_arglist_xs.cpp index 1eef0563..1dc27429 100644 --- a/src/reader/expect_formal_arglist_xs.cpp +++ b/src/reader/expect_formal_arglist_xs.cpp @@ -96,7 +96,7 @@ namespace xo { auto p_stack = p_psm->p_stack_; if (farglxs_type_ == formalarglstatetype::argl_1b) { - std::unique_ptr self = p_stack->pop_exprstate(); + std::unique_ptr self = p_psm->pop_exprstate(); p_stack->top_exprstate().on_formal_arglist(this->argl_, p_psm); } else { diff --git a/src/reader/expect_formal_xs.cpp b/src/reader/expect_formal_xs.cpp index 8bdcf6b1..2cb2e9be 100644 --- a/src/reader/expect_formal_xs.cpp +++ b/src/reader/expect_formal_xs.cpp @@ -85,7 +85,7 @@ namespace xo { if (this->formalxs_type_ == formalstatetype::formal_2) { this->result_.assign_td(td); - std::unique_ptr self = p_stack->pop_exprstate(); + std::unique_ptr self = p_psm->pop_exprstate(); rp var = Variable::make(result_.name(), result_.td()); diff --git a/src/reader/expect_symbol_xs.cpp b/src/reader/expect_symbol_xs.cpp index 591f4ca8..77219efb 100644 --- a/src/reader/expect_symbol_xs.cpp +++ b/src/reader/expect_symbol_xs.cpp @@ -33,7 +33,7 @@ namespace xo { /* have to do pop first, before sending symbol to * the o.g. symbol-requester */ - std::unique_ptr self = p_stack->pop_exprstate(); + std::unique_ptr self = p_psm->pop_exprstate(); p_stack->top_exprstate().on_symbol(tk.text(), p_psm); diff --git a/src/reader/expect_type_xs.cpp b/src/reader/expect_type_xs.cpp index 97365062..9bbf4e18 100644 --- a/src/reader/expect_type_xs.cpp +++ b/src/reader/expect_type_xs.cpp @@ -58,7 +58,7 @@ namespace xo { xtag("typename", tk.text()))); } - std::unique_ptr self = p_stack->pop_exprstate(); + std::unique_ptr self = p_psm->pop_exprstate(); p_stack->top_exprstate().on_typedescr(td, p_psm); } } /*namespace scm*/ diff --git a/src/reader/lambda_xs.cpp b/src/reader/lambda_xs.cpp index 90270b07..80aac681 100644 --- a/src/reader/lambda_xs.cpp +++ b/src/reader/lambda_xs.cpp @@ -79,7 +79,7 @@ namespace xo { if (lmxs_type_ == lambdastatetype::lm_3) { /* done! */ - std::unique_ptr self = p_stack->pop_exprstate(); + std::unique_ptr self = p_psm->pop_exprstate(); std::string name = "fixmename"; diff --git a/src/reader/paren_xs.cpp b/src/reader/paren_xs.cpp index 96318e4c..c39a89cb 100644 --- a/src/reader/paren_xs.cpp +++ b/src/reader/paren_xs.cpp @@ -154,7 +154,7 @@ namespace xo { auto p_stack = p_psm->p_stack_; - std::unique_ptr self = p_stack->pop_exprstate(); + std::unique_ptr self = p_psm->pop_exprstate(); p_stack->top_exprstate().on_expr(expr, p_psm); } diff --git a/src/reader/parserstatemachine.cpp b/src/reader/parserstatemachine.cpp new file mode 100644 index 00000000..6d47b909 --- /dev/null +++ b/src/reader/parserstatemachine.cpp @@ -0,0 +1,19 @@ +/* file parserstatemachine.cpp + * + * author: Roland Conybeare + */ + +#include "parserstatemachine.hpp" +#include "exprstatestack.hpp" + +namespace xo { + namespace scm { + std::unique_ptr + parserstatemachine::pop_exprstate() { + return p_stack_->pop_exprstate(); + } + } /*namespace scm*/ +} /*namespace xo*/ + + +/* end parserstatemachine.cpp */ diff --git a/src/reader/progress_xs.cpp b/src/reader/progress_xs.cpp index d1bae5c3..3431e689 100644 --- a/src/reader/progress_xs.cpp +++ b/src/reader/progress_xs.cpp @@ -154,7 +154,7 @@ namespace xo { assert(result.get()); /* this expression complete.. */ - std::unique_ptr self = p_stack->pop_exprstate(); + std::unique_ptr self = p_psm->pop_exprstate(); /* ..but more operators could follow, so don't commit yet */ p_stack->push_exprstate(progress_xs::make(result)); @@ -203,7 +203,7 @@ namespace xo { rp expr = this->assemble_expr(); - std::unique_ptr self = p_stack->pop_exprstate(); + std::unique_ptr self = p_psm->pop_exprstate(); p_stack->top_exprstate().on_expr(expr, p_psm); @@ -274,7 +274,7 @@ namespace xo { /* right paren confirms stack expression */ rp expr = this->assemble_expr(); - std::unique_ptr self = p_stack->pop_exprstate(); + std::unique_ptr self = p_psm->pop_exprstate(); if (p_stack->empty()) { throw std::runtime_error(tostr(self_name, @@ -344,7 +344,7 @@ namespace xo { auto expr = this->assemble_expr(); /* 2. remove from stack */ - std::unique_ptr self = p_stack->pop_exprstate(); + std::unique_ptr self = p_psm->pop_exprstate(); /* 3. replace with new progress_xs: */ progress_xs::start(expr, op2, p_stack); @@ -365,7 +365,7 @@ namespace xo { * 4. expect_rhs_expression */ - std::unique_ptr self = p_stack->pop_exprstate(); + std::unique_ptr self = p_psm->pop_exprstate(); /* 1. replace with nested incomplete infix exprs */ progress_xs::start(lhs_, op_type_, p_stack);