From 4d0c97ab7a4a3ca82f186df2ddea6d20301d7db1 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Fri, 23 Jan 2026 17:23:19 -0500 Subject: [PATCH] xo-reader2: top-level string literal + on_string_token() in SSM --- idl/SyntaxStateMachine.json5 | 9 ++++++ include/xo/reader2/DDefineSsm.hpp | 6 ++++ include/xo/reader2/DExpectExprSsm.hpp | 6 ++++ include/xo/reader2/DExpectSymbolSsm.hpp | 6 ++++ include/xo/reader2/DExpectTypeSsm.hpp | 6 ++++ include/xo/reader2/DExprSeqState.hpp | 5 +++ include/xo/reader2/DProgressSsm.hpp | 2 ++ include/xo/reader2/ParserStateMachine.hpp | 3 ++ .../xo/reader2/ssm/ASyntaxStateMachine.hpp | 2 ++ .../reader2/ssm/ISyntaxStateMachine_Any.hpp | 1 + .../ssm/ISyntaxStateMachine_DDefineSsm.hpp | 2 ++ .../ISyntaxStateMachine_DExpectExprSsm.hpp | 2 ++ .../ISyntaxStateMachine_DExpectSymbolSsm.hpp | 2 ++ .../ISyntaxStateMachine_DExpectTypeSsm.hpp | 2 ++ .../ssm/ISyntaxStateMachine_DExprSeqState.hpp | 2 ++ .../ssm/ISyntaxStateMachine_DProgressSsm.hpp | 2 ++ .../reader2/ssm/ISyntaxStateMachine_Xfer.hpp | 3 ++ .../xo/reader2/ssm/RSyntaxStateMachine.hpp | 3 ++ src/reader2/DDefineSsm.cpp | 9 ++++++ src/reader2/DExpectExprSsm.cpp | 9 ++++++ src/reader2/DExpectSymbolSsm.cpp | 9 ++++++ src/reader2/DExpectTypeSsm.cpp | 9 ++++++ src/reader2/DExprSeqState.cpp | 32 +++++++++++++++++++ src/reader2/DProgressSsm.cpp | 9 ++++++ src/reader2/ISyntaxStateMachine_Any.cpp | 6 ++++ .../ISyntaxStateMachine_DDefineSsm.cpp | 5 +++ .../ISyntaxStateMachine_DExpectExprSsm.cpp | 5 +++ .../ISyntaxStateMachine_DExpectSymbolSsm.cpp | 5 +++ .../ISyntaxStateMachine_DExpectTypeSsm.cpp | 5 +++ .../ISyntaxStateMachine_DExprSeqState.cpp | 5 +++ .../ISyntaxStateMachine_DProgressSsm.cpp | 5 +++ src/reader2/ParserStateMachine.cpp | 13 +++++++- 32 files changed, 189 insertions(+), 1 deletion(-) diff --git a/idl/SyntaxStateMachine.json5 b/idl/SyntaxStateMachine.json5 index d03808c1..72dbbf13 100644 --- a/idl/SyntaxStateMachine.json5 +++ b/idl/SyntaxStateMachine.json5 @@ -117,6 +117,15 @@ {type: "ParserStateMachine *", name: "p_psm"}, ], }, + { + name: "on_string_token", + doc: ["update state machine for incoming string-token @p tk"], + return_type: "void", + args: [ + {type: "const Token &", name: "tk"}, + {type: "ParserStateMachine *", name: "p_psm"}, + ], + }, { name: "on_semicolon_token", doc: ["update state machine for incoming semicolon-token @p tk"], diff --git a/include/xo/reader2/DDefineSsm.hpp b/include/xo/reader2/DDefineSsm.hpp index 0bafe4cb..d0af630d 100644 --- a/include/xo/reader2/DDefineSsm.hpp +++ b/include/xo/reader2/DDefineSsm.hpp @@ -147,6 +147,12 @@ namespace xo { void on_singleassign_token(const Token & tk, ParserStateMachine * p_psm); + /** update state for this syntax on incoming string tokne @p tk, + * overall parser state in @p p_psm + **/ + void on_string_token(const Token & tk, + ParserStateMachine * p_psm); + /** update state for this syntax on incoming f64 token @p tk, * overall parser state in @p p_psm **/ diff --git a/include/xo/reader2/DExpectExprSsm.hpp b/include/xo/reader2/DExpectExprSsm.hpp index 5a628742..c1c9ede7 100644 --- a/include/xo/reader2/DExpectExprSsm.hpp +++ b/include/xo/reader2/DExpectExprSsm.hpp @@ -83,6 +83,12 @@ namespace xo { void on_singleassign_token(const Token & tk, ParserStateMachine * p_psm); + /** update state for this syntax on incoming string token @p tk, + * overall parser state in @p p_psm + **/ + void on_string_token(const Token & tk, + ParserStateMachine * p_psm); + /** update state for this syntax on incoming f64 token @p tk, * overall parser state in @p p_psm **/ diff --git a/include/xo/reader2/DExpectSymbolSsm.hpp b/include/xo/reader2/DExpectSymbolSsm.hpp index 910c1978..03dd8408 100644 --- a/include/xo/reader2/DExpectSymbolSsm.hpp +++ b/include/xo/reader2/DExpectSymbolSsm.hpp @@ -117,6 +117,12 @@ namespace xo { void on_singleassign_token(const Token & tk, ParserStateMachine * p_psm); + /** update state for this syntax on incoming string token @p tk, + * overall parser state in @p p_psm + **/ + void on_string_token(const Token & tk, + ParserStateMachine * p_psm); + /** update state for this syntax on incoming f64 token @p tk, * overall parser state in @p p_psm **/ diff --git a/include/xo/reader2/DExpectTypeSsm.hpp b/include/xo/reader2/DExpectTypeSsm.hpp index 77a54f61..8290225f 100644 --- a/include/xo/reader2/DExpectTypeSsm.hpp +++ b/include/xo/reader2/DExpectTypeSsm.hpp @@ -77,6 +77,12 @@ namespace xo { void on_singleassign_token(const Token & tk, ParserStateMachine * p_psm); + /** update state for this syntax on incoming string token @p tk, + * overall parser state in @p p_psm + **/ + void on_string_token(const Token & tk, + ParserStateMachine * p_psm); + /** update state for this syntax on incoming f64 token @p tk, * overall parser state in @p p_psm **/ diff --git a/include/xo/reader2/DExprSeqState.hpp b/include/xo/reader2/DExprSeqState.hpp index 4ee2e177..acfcba64 100644 --- a/include/xo/reader2/DExprSeqState.hpp +++ b/include/xo/reader2/DExprSeqState.hpp @@ -90,6 +90,11 @@ namespace xo { **/ void on_singleassign_token(const Token & tk, ParserStateMachine * p_psm); + /** update state for this syntax on incoming string token @p tk, + * overall parser state in @p p_psm + **/ + void on_string_token(const Token & tk, ParserStateMachine * p_psm); + /** update state for this syntax on incoming f64 token @p tk, * overall parser state in @p p_psm **/ diff --git a/include/xo/reader2/DProgressSsm.hpp b/include/xo/reader2/DProgressSsm.hpp index ae3bdb85..33981d76 100644 --- a/include/xo/reader2/DProgressSsm.hpp +++ b/include/xo/reader2/DProgressSsm.hpp @@ -141,6 +141,8 @@ namespace xo { ParserStateMachine * p_psm); void on_singleassign_token(const Token & tk, ParserStateMachine * p_psm); + void on_string_token(const Token & tk, + ParserStateMachine * p_psm); void on_f64_token(const Token & tk, ParserStateMachine * p_psm); void on_i64_token(const Token & tk, diff --git a/include/xo/reader2/ParserStateMachine.hpp b/include/xo/reader2/ParserStateMachine.hpp index 870b1d66..eae4d663 100644 --- a/include/xo/reader2/ParserStateMachine.hpp +++ b/include/xo/reader2/ParserStateMachine.hpp @@ -138,6 +138,9 @@ namespace xo { /** operate state machine for incoming singleassign-token @p tk **/ void on_singleassign_token(const Token & tk); + /** operate state machine for incoming string-otoken @p tk **/ + void on_string_token(const Token & tk); + /** operate state machine for incoming f64-token @p tk **/ void on_f64_token(const Token & tk); diff --git a/include/xo/reader2/ssm/ASyntaxStateMachine.hpp b/include/xo/reader2/ssm/ASyntaxStateMachine.hpp index feb4a62b..d501232f 100644 --- a/include/xo/reader2/ssm/ASyntaxStateMachine.hpp +++ b/include/xo/reader2/ssm/ASyntaxStateMachine.hpp @@ -73,6 +73,8 @@ public: virtual void on_i64_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) = 0; /** update state machine for incoming bool-token @p tk **/ virtual void on_bool_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) = 0; + /** update state machine for incoming string-token @p tk **/ + virtual void on_string_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) = 0; /** update state machine for incoming semicolon-token @p tk **/ virtual void on_semicolon_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) = 0; /** update stat machine for incoming parsed symbol @p sym **/ diff --git a/include/xo/reader2/ssm/ISyntaxStateMachine_Any.hpp b/include/xo/reader2/ssm/ISyntaxStateMachine_Any.hpp index 06fd2ff9..351f6a8c 100644 --- a/include/xo/reader2/ssm/ISyntaxStateMachine_Any.hpp +++ b/include/xo/reader2/ssm/ISyntaxStateMachine_Any.hpp @@ -68,6 +68,7 @@ namespace scm { [[noreturn]] void on_f64_token(Opaque, const Token &, ParserStateMachine *) override; [[noreturn]] void on_i64_token(Opaque, const Token &, ParserStateMachine *) override; [[noreturn]] void on_bool_token(Opaque, const Token &, ParserStateMachine *) override; + [[noreturn]] void on_string_token(Opaque, const Token &, ParserStateMachine *) override; [[noreturn]] void on_semicolon_token(Opaque, const Token &, ParserStateMachine *) override; [[noreturn]] void on_parsed_symbol(Opaque, std::string_view, ParserStateMachine *) override; [[noreturn]] void on_parsed_typedescr(Opaque, TypeDescr, ParserStateMachine *) override; diff --git a/include/xo/reader2/ssm/ISyntaxStateMachine_DDefineSsm.hpp b/include/xo/reader2/ssm/ISyntaxStateMachine_DDefineSsm.hpp index 4c22c587..432b6fac 100644 --- a/include/xo/reader2/ssm/ISyntaxStateMachine_DDefineSsm.hpp +++ b/include/xo/reader2/ssm/ISyntaxStateMachine_DDefineSsm.hpp @@ -70,6 +70,8 @@ namespace xo { static void on_i64_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update state machine for incoming bool-token @p tk **/ static void on_bool_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm); + /** update state machine for incoming string-token @p tk **/ + static void on_string_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update state machine for incoming semicolon-token @p tk **/ static void on_semicolon_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update stat machine for incoming parsed symbol @p sym **/ diff --git a/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectExprSsm.hpp b/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectExprSsm.hpp index 6c64836e..aa1d082e 100644 --- a/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectExprSsm.hpp +++ b/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectExprSsm.hpp @@ -70,6 +70,8 @@ namespace xo { static void on_i64_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update state machine for incoming bool-token @p tk **/ static void on_bool_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm); + /** update state machine for incoming string-token @p tk **/ + static void on_string_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update state machine for incoming semicolon-token @p tk **/ static void on_semicolon_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update stat machine for incoming parsed symbol @p sym **/ diff --git a/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectSymbolSsm.hpp b/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectSymbolSsm.hpp index 0647ce38..039fcae2 100644 --- a/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectSymbolSsm.hpp +++ b/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectSymbolSsm.hpp @@ -70,6 +70,8 @@ namespace xo { static void on_i64_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update state machine for incoming bool-token @p tk **/ static void on_bool_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm); + /** update state machine for incoming string-token @p tk **/ + static void on_string_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update state machine for incoming semicolon-token @p tk **/ static void on_semicolon_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update stat machine for incoming parsed symbol @p sym **/ diff --git a/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectTypeSsm.hpp b/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectTypeSsm.hpp index ec3f10fc..64106cfb 100644 --- a/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectTypeSsm.hpp +++ b/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectTypeSsm.hpp @@ -70,6 +70,8 @@ namespace xo { static void on_i64_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update state machine for incoming bool-token @p tk **/ static void on_bool_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm); + /** update state machine for incoming string-token @p tk **/ + static void on_string_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update state machine for incoming semicolon-token @p tk **/ static void on_semicolon_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update stat machine for incoming parsed symbol @p sym **/ diff --git a/include/xo/reader2/ssm/ISyntaxStateMachine_DExprSeqState.hpp b/include/xo/reader2/ssm/ISyntaxStateMachine_DExprSeqState.hpp index c8205ff1..fbf1f317 100644 --- a/include/xo/reader2/ssm/ISyntaxStateMachine_DExprSeqState.hpp +++ b/include/xo/reader2/ssm/ISyntaxStateMachine_DExprSeqState.hpp @@ -70,6 +70,8 @@ namespace xo { static void on_i64_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm); /** update state machine for incoming bool-token @p tk **/ static void on_bool_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm); + /** update state machine for incoming string-token @p tk **/ + static void on_string_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm); /** update state machine for incoming semicolon-token @p tk **/ static void on_semicolon_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm); /** update stat machine for incoming parsed symbol @p sym **/ diff --git a/include/xo/reader2/ssm/ISyntaxStateMachine_DProgressSsm.hpp b/include/xo/reader2/ssm/ISyntaxStateMachine_DProgressSsm.hpp index 9cec85e1..0277e1ba 100644 --- a/include/xo/reader2/ssm/ISyntaxStateMachine_DProgressSsm.hpp +++ b/include/xo/reader2/ssm/ISyntaxStateMachine_DProgressSsm.hpp @@ -70,6 +70,8 @@ namespace xo { static void on_i64_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update state machine for incoming bool-token @p tk **/ static void on_bool_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm); + /** update state machine for incoming string-token @p tk **/ + static void on_string_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update state machine for incoming semicolon-token @p tk **/ static void on_semicolon_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm); /** update stat machine for incoming parsed symbol @p sym **/ diff --git a/include/xo/reader2/ssm/ISyntaxStateMachine_Xfer.hpp b/include/xo/reader2/ssm/ISyntaxStateMachine_Xfer.hpp index 31681b46..fccd523e 100644 --- a/include/xo/reader2/ssm/ISyntaxStateMachine_Xfer.hpp +++ b/include/xo/reader2/ssm/ISyntaxStateMachine_Xfer.hpp @@ -76,6 +76,9 @@ namespace scm { void on_bool_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) override { return I::on_bool_token(_dcast(data), tk, p_psm); } + void on_string_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) override { + return I::on_string_token(_dcast(data), tk, p_psm); + } void on_semicolon_token(Opaque data, const Token & tk, ParserStateMachine * p_psm) override { return I::on_semicolon_token(_dcast(data), tk, p_psm); } diff --git a/include/xo/reader2/ssm/RSyntaxStateMachine.hpp b/include/xo/reader2/ssm/RSyntaxStateMachine.hpp index 4df02804..b91381d0 100644 --- a/include/xo/reader2/ssm/RSyntaxStateMachine.hpp +++ b/include/xo/reader2/ssm/RSyntaxStateMachine.hpp @@ -80,6 +80,9 @@ public: void on_bool_token(const Token & tk, ParserStateMachine * p_psm) { return O::iface()->on_bool_token(O::data(), tk, p_psm); } + void on_string_token(const Token & tk, ParserStateMachine * p_psm) { + return O::iface()->on_string_token(O::data(), tk, p_psm); + } void on_semicolon_token(const Token & tk, ParserStateMachine * p_psm) { return O::iface()->on_semicolon_token(O::data(), tk, p_psm); } diff --git a/src/reader2/DDefineSsm.cpp b/src/reader2/DDefineSsm.cpp index eb1d5d55..0f4ac7e1 100644 --- a/src/reader2/DDefineSsm.cpp +++ b/src/reader2/DDefineSsm.cpp @@ -567,6 +567,15 @@ namespace xo { this->get_expect_str()); } + void + DDefineSsm::on_string_token(const Token & tk, + ParserStateMachine * p_psm) + { + p_psm->illegal_input_on_token("DDefineSsm::on_string_token", + tk, + this->get_expect_str()); + } + void DDefineSsm::on_f64_token(const Token & tk, ParserStateMachine * p_psm) diff --git a/src/reader2/DExpectExprSsm.cpp b/src/reader2/DExpectExprSsm.cpp index 553973a6..a5d46052 100644 --- a/src/reader2/DExpectExprSsm.cpp +++ b/src/reader2/DExpectExprSsm.cpp @@ -147,6 +147,15 @@ namespace xo { this->get_expect_str()); } + void + DExpectExprSsm::on_string_token(const Token & tk, + ParserStateMachine * p_psm) + { + p_psm->illegal_input_on_token("DExpectExprSsm::on_string_token", + tk, + this->get_expect_str()); + } + void DExpectExprSsm::on_f64_token(const Token & tk, ParserStateMachine * p_psm) diff --git a/src/reader2/DExpectSymbolSsm.cpp b/src/reader2/DExpectSymbolSsm.cpp index d32f3ce5..d41f08da 100644 --- a/src/reader2/DExpectSymbolSsm.cpp +++ b/src/reader2/DExpectSymbolSsm.cpp @@ -149,6 +149,15 @@ namespace xo { this->get_expect_str()); } + void + DExpectSymbolSsm::on_string_token(const Token & tk, + ParserStateMachine * p_psm) + { + p_psm->illegal_input_on_token("DExpectSymbolSsm::on_string_token", + tk, + this->get_expect_str()); + } + void DExpectSymbolSsm::on_f64_token(const Token & tk, ParserStateMachine * p_psm) diff --git a/src/reader2/DExpectTypeSsm.cpp b/src/reader2/DExpectTypeSsm.cpp index d20128c0..b8be164c 100644 --- a/src/reader2/DExpectTypeSsm.cpp +++ b/src/reader2/DExpectTypeSsm.cpp @@ -92,6 +92,15 @@ namespace xo { this->get_expect_str()); } + void + DExpectTypeSsm::on_string_token(const Token & tk, + ParserStateMachine * p_psm) + { + p_psm->illegal_input_on_token("DExpectTypeSsm", + tk, + this->get_expect_str()); + } + void DExpectTypeSsm::on_f64_token(const Token & tk, ParserStateMachine * p_psm) diff --git a/src/reader2/DExprSeqState.cpp b/src/reader2/DExprSeqState.cpp index 86c98d84..90b9824b 100644 --- a/src/reader2/DExprSeqState.cpp +++ b/src/reader2/DExprSeqState.cpp @@ -9,6 +9,8 @@ #include #include #include +#include +#include #include #include #include @@ -192,6 +194,36 @@ namespace xo { this->get_expect_str()); } + void + DExprSeqState::on_string_token(const Token & tk, + ParserStateMachine * p_psm) + { + switch (seqtype_) { + case exprseqtype::toplevel_interactive: + { + DString * dstr = DString::from_cstr(p_psm->expr_alloc(), + tk.text().c_str()); + obj str(dstr); + auto * dconst = DConstant::make(p_psm->expr_alloc(), str); + obj expr(dconst); + + DProgressSsm::start(p_psm->parser_alloc(), + expr, + p_psm); + return; + } + case exprseqtype::toplevel_batch: + break; + case exprseqtype::N: + assert(false); // unreachable + break; + } + + p_psm->illegal_input_on_token("DExprSeqState::on_string_token", + tk, + this->get_expect_str()); + } + void DExprSeqState::on_f64_token(const Token & tk, ParserStateMachine * p_psm) diff --git a/src/reader2/DProgressSsm.cpp b/src/reader2/DProgressSsm.cpp index f6b14bc1..50ec2fbe 100644 --- a/src/reader2/DProgressSsm.cpp +++ b/src/reader2/DProgressSsm.cpp @@ -203,6 +203,15 @@ namespace xo { this->get_expect_str()); } + void + DProgressSsm::on_string_token(const Token & tk, + ParserStateMachine * p_psm) + { + p_psm->illegal_input_on_token("DProgressSsm::on_string_token", + tk, + this->get_expect_str()); + } + void DProgressSsm::on_f64_token(const Token & tk, ParserStateMachine * p_psm) diff --git a/src/reader2/ISyntaxStateMachine_Any.cpp b/src/reader2/ISyntaxStateMachine_Any.cpp index 39fcea13..f270c352 100644 --- a/src/reader2/ISyntaxStateMachine_Any.cpp +++ b/src/reader2/ISyntaxStateMachine_Any.cpp @@ -82,6 +82,12 @@ ISyntaxStateMachine_Any::on_bool_token(Opaque, const Token &, ParserStateMachine _fatal(); } +auto +ISyntaxStateMachine_Any::on_string_token(Opaque, const Token &, ParserStateMachine *) -> void +{ + _fatal(); +} + auto ISyntaxStateMachine_Any::on_semicolon_token(Opaque, const Token &, ParserStateMachine *) -> void { diff --git a/src/reader2/ISyntaxStateMachine_DDefineSsm.cpp b/src/reader2/ISyntaxStateMachine_DDefineSsm.cpp index 69520cae..c39c51b2 100644 --- a/src/reader2/ISyntaxStateMachine_DDefineSsm.cpp +++ b/src/reader2/ISyntaxStateMachine_DDefineSsm.cpp @@ -68,6 +68,11 @@ namespace xo { self.on_bool_token(tk, p_psm); } auto + ISyntaxStateMachine_DDefineSsm::on_string_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void + { + self.on_string_token(tk, p_psm); + } + auto ISyntaxStateMachine_DDefineSsm::on_semicolon_token(DDefineSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void { self.on_semicolon_token(tk, p_psm); diff --git a/src/reader2/ISyntaxStateMachine_DExpectExprSsm.cpp b/src/reader2/ISyntaxStateMachine_DExpectExprSsm.cpp index b247c821..0e5efa5d 100644 --- a/src/reader2/ISyntaxStateMachine_DExpectExprSsm.cpp +++ b/src/reader2/ISyntaxStateMachine_DExpectExprSsm.cpp @@ -68,6 +68,11 @@ namespace xo { self.on_bool_token(tk, p_psm); } auto + ISyntaxStateMachine_DExpectExprSsm::on_string_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void + { + self.on_string_token(tk, p_psm); + } + auto ISyntaxStateMachine_DExpectExprSsm::on_semicolon_token(DExpectExprSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void { self.on_semicolon_token(tk, p_psm); diff --git a/src/reader2/ISyntaxStateMachine_DExpectSymbolSsm.cpp b/src/reader2/ISyntaxStateMachine_DExpectSymbolSsm.cpp index 318e68cb..0b47c31a 100644 --- a/src/reader2/ISyntaxStateMachine_DExpectSymbolSsm.cpp +++ b/src/reader2/ISyntaxStateMachine_DExpectSymbolSsm.cpp @@ -68,6 +68,11 @@ namespace xo { self.on_bool_token(tk, p_psm); } auto + ISyntaxStateMachine_DExpectSymbolSsm::on_string_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void + { + self.on_string_token(tk, p_psm); + } + auto ISyntaxStateMachine_DExpectSymbolSsm::on_semicolon_token(DExpectSymbolSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void { self.on_semicolon_token(tk, p_psm); diff --git a/src/reader2/ISyntaxStateMachine_DExpectTypeSsm.cpp b/src/reader2/ISyntaxStateMachine_DExpectTypeSsm.cpp index 3d98c1f8..515b81a8 100644 --- a/src/reader2/ISyntaxStateMachine_DExpectTypeSsm.cpp +++ b/src/reader2/ISyntaxStateMachine_DExpectTypeSsm.cpp @@ -68,6 +68,11 @@ namespace xo { self.on_bool_token(tk, p_psm); } auto + ISyntaxStateMachine_DExpectTypeSsm::on_string_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void + { + self.on_string_token(tk, p_psm); + } + auto ISyntaxStateMachine_DExpectTypeSsm::on_semicolon_token(DExpectTypeSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void { self.on_semicolon_token(tk, p_psm); diff --git a/src/reader2/ISyntaxStateMachine_DExprSeqState.cpp b/src/reader2/ISyntaxStateMachine_DExprSeqState.cpp index 8ec4d055..04cc4516 100644 --- a/src/reader2/ISyntaxStateMachine_DExprSeqState.cpp +++ b/src/reader2/ISyntaxStateMachine_DExprSeqState.cpp @@ -68,6 +68,11 @@ namespace xo { self.on_bool_token(tk, p_psm); } auto + ISyntaxStateMachine_DExprSeqState::on_string_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm) -> void + { + self.on_string_token(tk, p_psm); + } + auto ISyntaxStateMachine_DExprSeqState::on_semicolon_token(DExprSeqState & self, const Token & tk, ParserStateMachine * p_psm) -> void { self.on_semicolon_token(tk, p_psm); diff --git a/src/reader2/ISyntaxStateMachine_DProgressSsm.cpp b/src/reader2/ISyntaxStateMachine_DProgressSsm.cpp index 45e9a566..28b69cfb 100644 --- a/src/reader2/ISyntaxStateMachine_DProgressSsm.cpp +++ b/src/reader2/ISyntaxStateMachine_DProgressSsm.cpp @@ -68,6 +68,11 @@ namespace xo { self.on_bool_token(tk, p_psm); } auto + ISyntaxStateMachine_DProgressSsm::on_string_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void + { + self.on_string_token(tk, p_psm); + } + auto ISyntaxStateMachine_DProgressSsm::on_semicolon_token(DProgressSsm & self, const Token & tk, ParserStateMachine * p_psm) -> void { self.on_semicolon_token(tk, p_psm); diff --git a/src/reader2/ParserStateMachine.cpp b/src/reader2/ParserStateMachine.cpp index 9a594340..adc14f1b 100644 --- a/src/reader2/ParserStateMachine.cpp +++ b/src/reader2/ParserStateMachine.cpp @@ -183,6 +183,10 @@ namespace xo { this->on_singleassign_token(tk); break; + case tokentype::tk_string: + this->on_string_token(tk); + break; + case tokentype::tk_f64: this->on_f64_token(tk); break; @@ -201,7 +205,6 @@ namespace xo { // all the not-yet handled cases case tokentype::tk_invalid: - case tokentype::tk_string: case tokentype::tk_leftparen: case tokentype::tk_rightparen: case tokentype::tk_leftbracket: @@ -278,6 +281,14 @@ namespace xo { stack_->top().on_singleassign_token(tk, this); } + void + ParserStateMachine::on_string_token(const Token & tk) + { + scope log(XO_DEBUG(debug_flag_), xtag("tk", tk)); + + stack_->top().on_string_token(tk, this); + } + void ParserStateMachine::on_f64_token(const Token & tk) {