From bd8f093a00f292675730c2118e8dcb1e4ba73a16 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Sun, 18 Aug 2024 23:56:50 -0400 Subject: [PATCH] xo-reader: refactor: simplify exprseq_xs api --- include/xo/reader/exprseq_xs.hpp | 4 +++- src/reader/exprseq_xs.cpp | 8 +++++++- src/reader/parser.cpp | 3 +-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/include/xo/reader/exprseq_xs.hpp b/include/xo/reader/exprseq_xs.hpp index d6afffe8..1797855a 100644 --- a/include/xo/reader/exprseq_xs.hpp +++ b/include/xo/reader/exprseq_xs.hpp @@ -18,7 +18,7 @@ namespace xo { public: exprseq_xs(); - static std::unique_ptr expect_toplevel_expression_sequence(); + static void start(exprstatestack * p_stack); public: // ----- token input methods ----- @@ -38,6 +38,8 @@ namespace xo { exprstatestack * p_stack, rp * p_emit_expr) override; + private: + static std::unique_ptr make(); }; } /*namespace scm*/ } /*namespace xo*/ diff --git a/src/reader/exprseq_xs.cpp b/src/reader/exprseq_xs.cpp index ed613dd2..840cd958 100644 --- a/src/reader/exprseq_xs.cpp +++ b/src/reader/exprseq_xs.cpp @@ -7,11 +7,17 @@ namespace xo { namespace scm { std::unique_ptr - exprseq_xs::expect_toplevel_expression_sequence() + exprseq_xs::make() { return std::make_unique(exprseq_xs()); } + void + exprseq_xs::start(exprstatestack * p_stack) + { + p_stack->push_exprstate(exprseq_xs::make()); + } + exprseq_xs::exprseq_xs() : exprstate(exprstatetype::expect_toplevel_expression_sequence) { diff --git a/src/reader/parser.cpp b/src/reader/parser.cpp index 5ac71dd0..5c2a99bb 100644 --- a/src/reader/parser.cpp +++ b/src/reader/parser.cpp @@ -30,8 +30,7 @@ namespace xo { void parser::begin_translation_unit() { - xs_stack_.push_exprstate - (exprseq_xs::expect_toplevel_expression_sequence()); + exprseq_xs::start(&xs_stack_); } rp