diff --git a/include/xo/reader/expect_type_xs.hpp b/include/xo/reader/expect_type_xs.hpp new file mode 100644 index 00000000..261074f9 --- /dev/null +++ b/include/xo/reader/expect_type_xs.hpp @@ -0,0 +1,25 @@ +/* file expect_type_xs.hpp + * + * author: Roland Conybeare, Aug 2024 + */ + +#pragma once + +#include "exprstate.hpp" + +namespace xo { + namespace scm { + /** @class expect_type_xs + * @brief state-machine for accepting a typename-expression + **/ + class expect_type_xs : public exprstate { + public: + expect_type_xs(); + + static std::unique_ptr make(); + }; + } /*namespace scm*/ +} /*namespace xo*/ + + +/* end expect_type_xs.hpp */ diff --git a/include/xo/reader/exprstate.hpp b/include/xo/reader/exprstate.hpp index 7f643921..b3cdf24e 100644 --- a/include/xo/reader/exprstate.hpp +++ b/include/xo/reader/exprstate.hpp @@ -75,9 +75,11 @@ namespace xo { return std::make_unique(exprstate(exprstatetype::expect_symbol)); } #endif +#ifdef RELOCATED static std::unique_ptr expect_type() { return std::make_unique(exprstate(exprstatetype::expect_type)); } +#endif exprstatetype exs_type() const { return exs_type_; } diff --git a/src/reader/CMakeLists.txt b/src/reader/CMakeLists.txt index 473c9a93..6907dff2 100644 --- a/src/reader/CMakeLists.txt +++ b/src/reader/CMakeLists.txt @@ -10,7 +10,8 @@ set(SELF_SRCS paren_xs.cpp exprseq_xs.cpp expect_expr_xs.cpp - expect_symbol_xs.cpp) + expect_symbol_xs.cpp + expect_type_xs.cpp) xo_add_shared_library4(${SELF_LIB} ${PROJECT_NAME}Targets ${PROJECT_VERSION} 1 ${SELF_SRCS}) xo_dependency(${SELF_LIB} xo_expression) diff --git a/src/reader/define_xs.cpp b/src/reader/define_xs.cpp index ffa8a094..ea8a72a1 100644 --- a/src/reader/define_xs.cpp +++ b/src/reader/define_xs.cpp @@ -2,6 +2,7 @@ #include "define_xs.hpp" #include "expect_expr_xs.hpp" +#include "expect_type_xs.hpp" namespace xo { namespace scm { @@ -321,7 +322,7 @@ namespace xo { if (this->defxs_type_ == defexprstatetype::def_1) { this->defxs_type_ = defexprstatetype::def_2; - p_stack->push_exprstate(exprstate::expect_type()); + p_stack->push_exprstate(expect_type_xs::make()); } else { assert(false); } diff --git a/src/reader/expect_type_xs.cpp b/src/reader/expect_type_xs.cpp new file mode 100644 index 00000000..65f0f7a9 --- /dev/null +++ b/src/reader/expect_type_xs.cpp @@ -0,0 +1,24 @@ +/* file expect_type_xs.cpp + * + * author: Roland Conybeare + */ + +#include "expect_type_xs.hpp" +#include "exprstate.hpp" + +namespace xo { + namespace scm { + std::unique_ptr + expect_type_xs::make() { + return std::make_unique(expect_type_xs()); + } + + expect_type_xs::expect_type_xs() + : exprstate(exprstatetype::expect_type) + {} + + } /*namespace scm*/ +} /*namespace xo*/ + + +/* end expect_type_xs.cpp */