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