From 2b6b15480ea2dcc398b5e2c2be8a2e98391cc459 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sun, 18 Aug 2024 23:47:47 -0400 Subject: [PATCH] expect_type_xs: refactor: simplify api --- include/xo/reader/expect_type_xs.hpp | 5 ++++- src/reader/define_xs.cpp | 2 +- src/reader/expect_formal_xs.cpp | 3 ++- src/reader/expect_type_xs.cpp | 5 +++++ 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/include/xo/reader/expect_type_xs.hpp b/include/xo/reader/expect_type_xs.hpp index c75c91cb..0e534a2a 100644 --- a/include/xo/reader/expect_type_xs.hpp +++ b/include/xo/reader/expect_type_xs.hpp @@ -16,11 +16,14 @@ namespace xo { public: expect_type_xs(); - static std::unique_ptr make(); + static void start(exprstatestack * p_stack); virtual void on_symbol_token(const token_type & tk, exprstatestack * p_stack, rp * p_emit_expr) override; + + private: + static std::unique_ptr make(); }; } /*namespace scm*/ } /*namespace xo*/ diff --git a/src/reader/define_xs.cpp b/src/reader/define_xs.cpp index 6eab1bb7..96514b97 100644 --- a/src/reader/define_xs.cpp +++ b/src/reader/define_xs.cpp @@ -116,7 +116,7 @@ namespace xo { if (this->defxs_type_ == defexprstatetype::def_2) { this->defxs_type_ = defexprstatetype::def_3; - p_stack->push_exprstate(expect_type_xs::make()); + expect_type_xs::start(p_stack); } else { exprstate::on_colon_token(tk, p_stack); } diff --git a/src/reader/expect_formal_xs.cpp b/src/reader/expect_formal_xs.cpp index b181583d..b796a209 100644 --- a/src/reader/expect_formal_xs.cpp +++ b/src/reader/expect_formal_xs.cpp @@ -60,7 +60,8 @@ namespace xo { { if (this->formalxs_type_ == formalstatetype::formal_1) { this->formalxs_type_ = formalstatetype::formal_2; - p_stack->push_exprstate(expect_type_xs::make()); + expect_type_xs::start(p_stack); + /* control reenters via expect_formal_xs::on_typedescr() */ } else { exprstate::on_colon_token(tk, p_stack); diff --git a/src/reader/expect_type_xs.cpp b/src/reader/expect_type_xs.cpp index fa4a517a..add0dc77 100644 --- a/src/reader/expect_type_xs.cpp +++ b/src/reader/expect_type_xs.cpp @@ -17,6 +17,11 @@ namespace xo { return std::make_unique(expect_type_xs()); } + void + expect_type_xs::start(exprstatestack * p_stack) { + p_stack->push_exprstate(expect_type_xs::make()); + } + expect_type_xs::expect_type_xs() : exprstate(exprstatetype::expect_type) {}