From 9f173949ffbbe66bf896bad3a7612077a1648426 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Fri, 30 Jan 2026 13:49:57 -0500 Subject: [PATCH] xo-reader2: streamline DIfElseSsm w/ DSyntaxStateMachine --- include/xo/reader2/DIfElseSsm.hpp | 18 ++--- src/reader2/DIfElseSsm.cpp | 126 ++---------------------------- 2 files changed, 14 insertions(+), 130 deletions(-) diff --git a/include/xo/reader2/DIfElseSsm.hpp b/include/xo/reader2/DIfElseSsm.hpp index 62f7d137..2e3533cd 100644 --- a/include/xo/reader2/DIfElseSsm.hpp +++ b/include/xo/reader2/DIfElseSsm.hpp @@ -5,14 +5,12 @@ #pragma once +#include "DSyntaxStateMachine.hpp" #include -#include "ParserStateMachine.hpp" #include "syntaxstatetype.hpp" #include #include #include -//#include "exprstate.hpp" -//#include "xo/indentlog/print/ppdetail_atomic.hpp" namespace xo { namespace scm { @@ -54,8 +52,9 @@ namespace xo { /** @class DIfElseSsm * @brief syntax state machine for parsing a conditional expression **/ - class DIfElseSsm { + class DIfElseSsm : public DSyntaxStateMachine { public: + using Super = DSyntaxStateMachine; using AAllocator = xo::mm::AAllocator; using DArena = xo::mm::DArena; using TypeDescr = xo::reflect::TypeDescr; @@ -89,6 +88,9 @@ namespace xo { static void start(DArena & parser_mm, obj expr_mm, ParserStateMachine * p_psm); + + const char * ssm_classname() const noexcept { return "DIfElseSsm"; } + ///@} /** @defgroup scm-ifelsessm-expression-methods general methods **/ ///@{ @@ -140,6 +142,7 @@ namespace xo { void on_semicolon_token(const Token & tk, ParserStateMachine * p_psm); +#ifdef OBSOLETE /** update state for this syntax after parsing a symbol @p sym, * with overall parser state in @p p_psm **/ @@ -158,12 +161,7 @@ namespace xo { void on_parsed_formal(const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm); - - /** consume formal params @p arglist from completed nested ssm, - * with overall parser state in @p p_psm. - **/ - void on_parsed_formal_arglist(DArray * arglist, - ParserStateMachine * p_psm); +#endif /** update state for this syntax after parsing an expression @p expr, * overall parser state in @p p_psm. diff --git a/src/reader2/DIfElseSsm.cpp b/src/reader2/DIfElseSsm.cpp index fb66701a..8551e1fe 100644 --- a/src/reader2/DIfElseSsm.cpp +++ b/src/reader2/DIfElseSsm.cpp @@ -189,21 +189,9 @@ namespace xo { break; } - p_psm->illegal_input_on_token("DIfElseSsm::on_token", - tk, - this->get_expect_str()); + Super::on_token(tk, p_psm); } -#ifdef NOT_YET - // ----- if_else_xs ----- - - if_else_xs::if_else_xs(rp if_expr) - : exprstate(exprstatetype::ifexpr), - ifxs_type_{ifexprstatetype::if_0}, - if_expr_{std::move(if_expr)} - {} -#endif - void DIfElseSsm::on_if_token(const Token & tk, ParserStateMachine * p_psm) @@ -219,9 +207,7 @@ namespace xo { return; } - p_psm->illegal_input_on_token("DIfElseSsm::on_if_token", - tk, - this->get_expect_str()); + Super::on_token(tk, p_psm); } void @@ -239,34 +225,9 @@ namespace xo { return; } - p_psm->illegal_input_on_token("DIfElseSsm::on_then_token", - tk, - this->get_expect_str()); + Super::on_token(tk, p_psm); } -#ifdef NOT_YET - void - if_else_xs::on_else_token(const token_type & tk, - parserstatemachine * p_psm) - { - scope log(XO_DEBUG(p_psm->debug_flag())); - - log && log("ifxs_type", ifxs_type_); - - if (this->ifxs_type_ == ifexprstatetype::if_4) { - this->ifxs_type_ = ifexprstatetype::if_5; - - expect_expr_xs::start(p_psm); - return; - } - - constexpr const char * c_self_name = "if_else_xs::on_else_token"; - const char * exp = this->get_expect_str(); - - this->illegal_input_on_token(c_self_name, tk, exp, p_psm); - } -#endif - void DIfElseSsm::on_else_token(const Token & tk, ParserStateMachine * p_psm) @@ -282,9 +243,7 @@ namespace xo { return; } - p_psm->illegal_input_on_token("DIfElseSsm::on_else_token", - tk, - this->get_expect_str()); + Super::on_token(tk, p_psm); } #ifdef NOT_YET @@ -325,37 +284,6 @@ namespace xo { p_psm->on_rightbrace_token(tk); } - void - if_else_xs::on_semicolon_token(const token_type & tk, - parserstatemachine * p_psm) - { - scope log(XO_DEBUG(p_psm->debug_flag())); - - log && log("ifxs_type", ifxs_type_); - - const char * c_self_name = "if_else_xs::on_semicolon_token"; - - switch (this->ifxs_type_) { - case ifexprstatetype::invalid: - case ifexprstatetype::if_0: - case ifexprstatetype::n_ifexprstatetype: - // unreachable - assert(false); - break; - - case ifexprstatetype::if_1: - case ifexprstatetype::if_2: - case ifexprstatetype::if_3: - case ifexprstatetype::if_5: - this->illegal_input_on_token(c_self_name, tk, get_expect_str(), p_psm); - break; - case ifexprstatetype::if_4: - case ifexprstatetype::if_6: { - this->finish_and_continue(p_psm); - break; - } - } - } #endif void @@ -385,18 +313,7 @@ namespace xo { return; } - p_psm->illegal_input_on_token("DIfElseSsm::on_semicolon_token", - tk, this->get_expect_str()); - - } - - void - DIfElseSsm::on_parsed_formal_arglist(DArray * arglist, - ParserStateMachine * p_psm) - { - p_psm->illegal_parsed_formal_arglist("DIfElseSsm::on_parsed_formal_arglist", - arglist, - this->get_expect_str()); + Super::on_token(tk, p_psm); } #ifdef NOT_YET @@ -485,9 +402,7 @@ namespace xo { break; } - p_psm->illegal_parsed_expression("DIfElseSsm::on_parsed_expression", - expr, - this->get_expect_str()); + Super::on_parsed_expression(expr, p_psm); } void @@ -500,35 +415,6 @@ namespace xo { this->on_semicolon_token(Token::semicolon_token(), p_psm); } - void - DIfElseSsm::on_parsed_symbol(std::string_view sym, - ParserStateMachine * p_psm) - { - p_psm->illegal_input_on_symbol("DIfElseSsm::on_parsed_symbol", - sym, - this->get_expect_str()); - } - - void - DIfElseSsm::on_parsed_typedescr(TypeDescr td, - ParserStateMachine * p_psm) - { - p_psm->illegal_input_on_typedescr("DIfElseSsm::on_parsed_typedescr", - td, - this->get_expect_str()); - } - - void - DIfElseSsm::on_parsed_formal(const DUniqueString * param_name, - TypeDescr param_type, - ParserStateMachine * p_psm) - { - p_psm->illegal_parsed_formal("DIfElseSsm::on_parsed_formal", - param_name, - param_type, - this->get_expect_str()); - } - bool DIfElseSsm::pretty(const ppindentinfo & ppii) const {