diff --git a/xo-reader2/idl/SyntaxStateMachine.json5 b/xo-reader2/idl/SyntaxStateMachine.json5 index 15a36f12..fba93437 100644 --- a/xo-reader2/idl/SyntaxStateMachine.json5 +++ b/xo-reader2/idl/SyntaxStateMachine.json5 @@ -72,6 +72,16 @@ {type: "ParserStateMachine *", name: "p_psm"}, ], }, + { + name: "on_parsed_formal", + doc: ["operate state machine for formal emitted by nested ssm"], + return_type: "void", + args: [ + {type: "const DUniqueString *", name: "param_name"}, + {type: "TypeDescr", name: "param_type"}, + {type: "ParserStateMachine *", name: "p_psm"}, + ], + }, { name: "on_parsed_expression", doc: ["update state machine for incoming parsed expression @p expr"], diff --git a/xo-reader2/include/xo/reader2/DDefineSsm.hpp b/xo-reader2/include/xo/reader2/DDefineSsm.hpp index 41a27b39..bf0a3ffb 100644 --- a/xo-reader2/include/xo/reader2/DDefineSsm.hpp +++ b/xo-reader2/include/xo/reader2/DDefineSsm.hpp @@ -195,6 +195,13 @@ namespace xo { void on_parsed_typedescr(TypeDescr td, ParserStateMachine * p_psm); + /** update state for this ssm to consume param (name,value) + * emitted by nested @p_psm + **/ + void on_parsed_formal(const DUniqueString * param_name, + TypeDescr param_type, + ParserStateMachine * p_psm); + /** update state for this syntax after parsing an expression @p expr, * overall parser state in @p p_psm **/ diff --git a/xo-reader2/include/xo/reader2/DExpectExprSsm.hpp b/xo-reader2/include/xo/reader2/DExpectExprSsm.hpp index b994b498..8e51124d 100644 --- a/xo-reader2/include/xo/reader2/DExpectExprSsm.hpp +++ b/xo-reader2/include/xo/reader2/DExpectExprSsm.hpp @@ -135,6 +135,13 @@ namespace xo { void on_parsed_typedescr(TypeDescr td, ParserStateMachine * p_psm); + /** update state to consume parsed formal (name, value) from nested ssm, + * with overall parser state in @p p_psm + **/ + void on_parsed_formal(const DUniqueString * param_name, + TypeDescr param_type, + ParserStateMachine * p_psm); + /** update state for this syntax after parsing an expression @p expr, * overall parser state in @p p_psm **/ diff --git a/xo-reader2/include/xo/reader2/DExpectFormalArgSsm.hpp b/xo-reader2/include/xo/reader2/DExpectFormalArgSsm.hpp index f58a09b2..ee5eb0ea 100644 --- a/xo-reader2/include/xo/reader2/DExpectFormalArgSsm.hpp +++ b/xo-reader2/include/xo/reader2/DExpectFormalArgSsm.hpp @@ -104,6 +104,14 @@ namespace xo { void on_parsed_typedescr(TypeDescr td, ParserStateMachine * p_psm); + /** consume parsed formal (name,type) = (@p sym, @p td) from nested ssm + * with overall parser state in @p p_psm. + * (In practice not reachable) + **/ + void on_parsed_formal(const DUniqueString * sym, + TypeDescr td, + ParserStateMachine * p_psm); + /** update state on parsed expression emitted by nested ssm * with overall parser state in @p p_psm **/ @@ -151,11 +159,6 @@ namespace xo { /** formal parameter name **/ const DUniqueString * name_ = nullptr; - -#ifdef NOT_YET - /** formal parameter type (if specified) **/ - TypeDescr td_ = nullptr; -#endif }; } /*namespace scm*/ } /*namespace xo*/ diff --git a/xo-reader2/include/xo/reader2/DExpectFormalArglistSsm.hpp b/xo-reader2/include/xo/reader2/DExpectFormalArglistSsm.hpp index c9cd2ac5..f4c24303 100644 --- a/xo-reader2/include/xo/reader2/DExpectFormalArglistSsm.hpp +++ b/xo-reader2/include/xo/reader2/DExpectFormalArglistSsm.hpp @@ -103,6 +103,13 @@ namespace xo { void on_parsed_typedescr(TypeDescr td, ParserStateMachine * p_psm); + /** update state to consume parsed param (name,type) emitted by + * nested ssm, with overall parser state in @p p_psm + **/ + void on_parsed_formal(const DUniqueString * param_name, + TypeDescr param_type, + ParserStateMachine * p_psm); + /** update state on parsed expression emitted by nested ssm * with overall parser state in @p p_psm **/ @@ -116,9 +123,6 @@ namespace xo { ParserStateMachine * p_psm); #ifdef NOT_YET - - virtual void on_formal(const rp & formal, - parserstatemachine * p_psm) override; virtual void on_comma_token(const token_type & tk, parserstatemachine * p_psm) override; virtual void on_rightparen_token(const token_type & tk, diff --git a/xo-reader2/include/xo/reader2/DExpectSymbolSsm.hpp b/xo-reader2/include/xo/reader2/DExpectSymbolSsm.hpp index d874e63a..080380b9 100644 --- a/xo-reader2/include/xo/reader2/DExpectSymbolSsm.hpp +++ b/xo-reader2/include/xo/reader2/DExpectSymbolSsm.hpp @@ -78,6 +78,13 @@ namespace xo { void on_parsed_typedescr(TypeDescr td, ParserStateMachine * p_psm); + /** update state to consume param (name, value) emitted + * by nested ssm + **/ + void on_parsed_formal(const DUniqueString * param_name, + TypeDescr param_type, + ParserStateMachine * p_psm); + /** update state for this syntax after parsing an expression @p expr * in nested state machine. * (provided to satisfy ASyntaxStateMachine api. not reachable) diff --git a/xo-reader2/include/xo/reader2/DExpectTypeSsm.hpp b/xo-reader2/include/xo/reader2/DExpectTypeSsm.hpp index c2bb4297..3ca99815 100644 --- a/xo-reader2/include/xo/reader2/DExpectTypeSsm.hpp +++ b/xo-reader2/include/xo/reader2/DExpectTypeSsm.hpp @@ -129,6 +129,13 @@ namespace xo { void on_parsed_typedescr(TypeDescr td, ParserStateMachine * p_psm); + /** operate state machine to consume formal param (name,value) + * emitted by nested ssm + **/ + void on_parsed_formal(const DUniqueString * param_name, + TypeDescr param_type, + ParserStateMachine * p_psm); + /** operate state machine for this syntax on receiving expression * from nested parser. * (provided to satisfy ASyntaxStateMachine api. not reachable) diff --git a/xo-reader2/include/xo/reader2/DExprSeqState.hpp b/xo-reader2/include/xo/reader2/DExprSeqState.hpp index 96eea236..c718cbef 100644 --- a/xo-reader2/include/xo/reader2/DExprSeqState.hpp +++ b/xo-reader2/include/xo/reader2/DExprSeqState.hpp @@ -138,6 +138,13 @@ namespace xo { **/ void on_parsed_typedescr(TypeDescr td, ParserStateMachine * p_psm); + /** update this ssm to consume parsed formal param (name, value) + * emitted by nested ssm, with overall parser state in @p p_psm + **/ + void on_parsed_formal(const DUniqueString * param_name, + TypeDescr param_type, + ParserStateMachine * p_psm); + /** update state for this syntax on parsed expression @p expr * from nested ssm. * overall parser state in @p p_psm diff --git a/xo-reader2/include/xo/reader2/DIfElseSsm.hpp b/xo-reader2/include/xo/reader2/DIfElseSsm.hpp index 9b3e5d17..647a5e34 100644 --- a/xo-reader2/include/xo/reader2/DIfElseSsm.hpp +++ b/xo-reader2/include/xo/reader2/DIfElseSsm.hpp @@ -140,11 +140,11 @@ namespace xo { void on_semicolon_token(const Token & tk, ParserStateMachine * p_psm); - /** update state for this syntax after parsing an expression @p expr, - * overall parser state in @p p_psm. + /** update state for this syntax after parsing a symbol @p sym, + * with overall parser state in @p p_psm **/ - void on_parsed_expression(obj expr, - ParserStateMachine * p_psm); + void on_parsed_symbol(std::string_view sym, + ParserStateMachine * p_psm); /** update state for this syntax after parsing a type description @p td; * overall parser state in @p p_psm @@ -152,6 +152,19 @@ namespace xo { void on_parsed_typedescr(TypeDescr td, ParserStateMachine * p_psm); + /** update state to consume formal param (name,value) + * from nested ssm + **/ + void on_parsed_formal(const DUniqueString * param_name, + TypeDescr param_type, + ParserStateMachine * p_psm); + + /** update state for this syntax after parsing an expression @p expr, + * overall parser state in @p p_psm. + **/ + void on_parsed_expression(obj expr, + ParserStateMachine * p_psm); + /** update state for this syntax after parsing an expression @p expr, * followed by semicolon, * with overall parser state in @p p_psm. @@ -159,12 +172,6 @@ namespace xo { void on_parsed_expression_with_semicolon(obj expr, ParserStateMachine * p_psm); - /** update state for this syntax after parsing a symbol @p sym, - * with overall parser state in @p p_psm - **/ - void on_parsed_symbol(std::string_view sym, - ParserStateMachine * p_psm); - ///@} /** @defgroup scm-ifelsessm-printable-facet printable facet methods **/ ///@{ diff --git a/xo-reader2/include/xo/reader2/DLambdaSsm.hpp b/xo-reader2/include/xo/reader2/DLambdaSsm.hpp index d9b0754d..69cb3322 100644 --- a/xo-reader2/include/xo/reader2/DLambdaSsm.hpp +++ b/xo-reader2/include/xo/reader2/DLambdaSsm.hpp @@ -104,18 +104,6 @@ namespace xo { void on_token(const Token & tk, ParserStateMachine * p_psm); - /** update this ssm when nested parser - * emits expression @p expr - **/ - void on_parsed_expression_with_semicolon(obj expr, - ParserStateMachine * p_psm); - - /** update this ssm when nested parser - * emits expression @p expr - **/ - void on_parsed_expression(obj expr, - ParserStateMachine * p_psm); - /** update this ssm when nested parser * emits @p td. **/ @@ -128,17 +116,30 @@ namespace xo { void on_parsed_typedescr(TypeDescr td, ParserStateMachine * p_psm); + /** update this ssm to consume parsed formal (name,value) + * from nested (and now expired) ssm + **/ + void on_parsed_formal(const DUniqueString * sym, + TypeDescr td, + ParserStateMachine * p_psm); + + /** update this ssm when nested parser + * emits expression @p expr + **/ + void on_parsed_expression(obj expr, + ParserStateMachine * p_psm); + + /** update this ssm when nested parser + * emits expression @p expr + **/ + void on_parsed_expression_with_semicolon(obj expr, + ParserStateMachine * p_psm); + #ifdef NOT_YET virtual const char * get_expect_str() const override; - virtual void on_typedescr(TypeDescr td, - parserstatemachine * p_psm) override; virtual void on_formal_arglist(const std::vector> & argl, parserstatemachine * p_psm) override; - virtual void on_expr(bp expr, - parserstatemachine * p_psm) override; - virtual void on_expr_with_semicolon(bp expr, - parserstatemachine * p_psm) override; virtual void on_leftbrace_token(const token_type & tk, parserstatemachine * p_psm) override; virtual void on_colon_token(const token_type & tk, diff --git a/xo-reader2/include/xo/reader2/DProgressSsm.hpp b/xo-reader2/include/xo/reader2/DProgressSsm.hpp index 788c10ca..fa0ec733 100644 --- a/xo-reader2/include/xo/reader2/DProgressSsm.hpp +++ b/xo-reader2/include/xo/reader2/DProgressSsm.hpp @@ -170,6 +170,9 @@ namespace xo { ParserStateMachine * p_psm); void on_parsed_typedescr(TypeDescr td, ParserStateMachine * p_psm); + void on_parsed_formal(const DUniqueString * param_name, + TypeDescr param_type, + ParserStateMachine * p_psm); void on_parsed_expression(obj, ParserStateMachine * p_psm); void on_parsed_expression_with_semicolon(obj expr, diff --git a/xo-reader2/include/xo/reader2/ParserStateMachine.hpp b/xo-reader2/include/xo/reader2/ParserStateMachine.hpp index a674e7e2..74f27876 100644 --- a/xo-reader2/include/xo/reader2/ParserStateMachine.hpp +++ b/xo-reader2/include/xo/reader2/ParserStateMachine.hpp @@ -102,6 +102,12 @@ namespace xo { **/ void on_parsed_typedescr(TypeDescr td); + /** update state to consume param (name, value) emitted by + * nested (but not popped) parsing state + **/ + void on_parsed_formal(const DUniqueString * param_name, + TypeDescr param_type); + /** update state to respond to parsed expression @p expr * (from nested parsing state) **/ @@ -163,6 +169,15 @@ namespace xo { TypeDescr td, std::string_view expect_str); + /** report illegal parsed formal (param_name, param_type) from nested ssm. + * Introducing as placeholder; not expected to be reachable in + * full parser + **/ + void illegal_parsed_formal(std::string_view ssm_name, + const DUniqueString * param_name, + TypeDescr param_type, + std::string_view expect_str); + /** report illegal parsed expression from nested ssm. * Introducing as placeholder; not clear if this will be reachable * in full parser diff --git a/xo-reader2/include/xo/reader2/ssm/ASyntaxStateMachine.hpp b/xo-reader2/include/xo/reader2/ssm/ASyntaxStateMachine.hpp index 3115d692..6cc3b829 100644 --- a/xo-reader2/include/xo/reader2/ssm/ASyntaxStateMachine.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ASyntaxStateMachine.hpp @@ -63,6 +63,8 @@ public: virtual void on_parsed_symbol(Opaque data, std::string_view sym, ParserStateMachine * p_psm) = 0; /** operate state machine for incoming type description @p td **/ virtual void on_parsed_typedescr(Opaque data, TypeDescr td, ParserStateMachine * p_psm) = 0; + /** operate state machine for formal emitted by nested ssm **/ + virtual void on_parsed_formal(Opaque data, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm) = 0; /** update state machine for incoming parsed expression @p expr **/ virtual void on_parsed_expression(Opaque data, obj expr, ParserStateMachine * p_psm) = 0; /** update state machine for incoming parsed expression @p expr followed by semicolon **/ diff --git a/xo-reader2/include/xo/reader2/ssm/IPrintable_DLambdaSsm.hpp b/xo-reader2/include/xo/reader2/ssm/IPrintable_DLambdaSsm.hpp index 9d2cad26..6d9681ee 100644 --- a/xo-reader2/include/xo/reader2/ssm/IPrintable_DLambdaSsm.hpp +++ b/xo-reader2/include/xo/reader2/ssm/IPrintable_DLambdaSsm.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] + * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] * arguments: * --input [idl/IPrintable_DLambdaSsm.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_Any.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_Any.hpp index 45be148e..3faa0f67 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_Any.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_Any.hpp @@ -63,6 +63,7 @@ namespace scm { [[noreturn]] void on_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; + [[noreturn]] void on_parsed_formal(Opaque, const DUniqueString *, TypeDescr, ParserStateMachine *) override; [[noreturn]] void on_parsed_expression(Opaque, obj, ParserStateMachine *) override; [[noreturn]] void on_parsed_expression_with_semicolon(Opaque, obj, ParserStateMachine *) override; diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DDefineSsm.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DDefineSsm.hpp index dad8ff29..f4d0da9d 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DDefineSsm.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DDefineSsm.hpp @@ -60,6 +60,8 @@ namespace xo { static void on_parsed_symbol(DDefineSsm & self, std::string_view sym, ParserStateMachine * p_psm); /** operate state machine for incoming type description @p td **/ static void on_parsed_typedescr(DDefineSsm & self, TypeDescr td, ParserStateMachine * p_psm); + /** operate state machine for formal emitted by nested ssm **/ + static void on_parsed_formal(DDefineSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr **/ static void on_parsed_expression(DDefineSsm & self, obj expr, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr followed by semicolon **/ diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectExprSsm.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectExprSsm.hpp index 7250cec7..3ff00e07 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectExprSsm.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectExprSsm.hpp @@ -60,6 +60,8 @@ namespace xo { static void on_parsed_symbol(DExpectExprSsm & self, std::string_view sym, ParserStateMachine * p_psm); /** operate state machine for incoming type description @p td **/ static void on_parsed_typedescr(DExpectExprSsm & self, TypeDescr td, ParserStateMachine * p_psm); + /** operate state machine for formal emitted by nested ssm **/ + static void on_parsed_formal(DExpectExprSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr **/ static void on_parsed_expression(DExpectExprSsm & self, obj expr, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr followed by semicolon **/ diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectFormalArgSsm.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectFormalArgSsm.hpp index 39d19b05..adce6eb9 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectFormalArgSsm.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectFormalArgSsm.hpp @@ -60,6 +60,8 @@ namespace xo { static void on_parsed_symbol(DExpectFormalArgSsm & self, std::string_view sym, ParserStateMachine * p_psm); /** operate state machine for incoming type description @p td **/ static void on_parsed_typedescr(DExpectFormalArgSsm & self, TypeDescr td, ParserStateMachine * p_psm); + /** operate state machine for formal emitted by nested ssm **/ + static void on_parsed_formal(DExpectFormalArgSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr **/ static void on_parsed_expression(DExpectFormalArgSsm & self, obj expr, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr followed by semicolon **/ diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectFormalArglistSsm.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectFormalArglistSsm.hpp index 93154f83..b8a3b416 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectFormalArglistSsm.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectFormalArglistSsm.hpp @@ -60,6 +60,8 @@ namespace xo { static void on_parsed_symbol(DExpectFormalArglistSsm & self, std::string_view sym, ParserStateMachine * p_psm); /** operate state machine for incoming type description @p td **/ static void on_parsed_typedescr(DExpectFormalArglistSsm & self, TypeDescr td, ParserStateMachine * p_psm); + /** operate state machine for formal emitted by nested ssm **/ + static void on_parsed_formal(DExpectFormalArglistSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr **/ static void on_parsed_expression(DExpectFormalArglistSsm & self, obj expr, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr followed by semicolon **/ diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectSymbolSsm.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectSymbolSsm.hpp index 7e83d0e4..d778e293 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectSymbolSsm.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectSymbolSsm.hpp @@ -60,6 +60,8 @@ namespace xo { static void on_parsed_symbol(DExpectSymbolSsm & self, std::string_view sym, ParserStateMachine * p_psm); /** operate state machine for incoming type description @p td **/ static void on_parsed_typedescr(DExpectSymbolSsm & self, TypeDescr td, ParserStateMachine * p_psm); + /** operate state machine for formal emitted by nested ssm **/ + static void on_parsed_formal(DExpectSymbolSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr **/ static void on_parsed_expression(DExpectSymbolSsm & self, obj expr, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr followed by semicolon **/ diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectTypeSsm.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectTypeSsm.hpp index c8c4cc9f..9d6f153a 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectTypeSsm.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExpectTypeSsm.hpp @@ -60,6 +60,8 @@ namespace xo { static void on_parsed_symbol(DExpectTypeSsm & self, std::string_view sym, ParserStateMachine * p_psm); /** operate state machine for incoming type description @p td **/ static void on_parsed_typedescr(DExpectTypeSsm & self, TypeDescr td, ParserStateMachine * p_psm); + /** operate state machine for formal emitted by nested ssm **/ + static void on_parsed_formal(DExpectTypeSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr **/ static void on_parsed_expression(DExpectTypeSsm & self, obj expr, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr followed by semicolon **/ diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExprSeqState.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExprSeqState.hpp index 2a86db05..d958f1f8 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExprSeqState.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DExprSeqState.hpp @@ -60,6 +60,8 @@ namespace xo { static void on_parsed_symbol(DExprSeqState & self, std::string_view sym, ParserStateMachine * p_psm); /** operate state machine for incoming type description @p td **/ static void on_parsed_typedescr(DExprSeqState & self, TypeDescr td, ParserStateMachine * p_psm); + /** operate state machine for formal emitted by nested ssm **/ + static void on_parsed_formal(DExprSeqState & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr **/ static void on_parsed_expression(DExprSeqState & self, obj expr, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr followed by semicolon **/ diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DIfElseSsm.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DIfElseSsm.hpp index 2101b8e1..88a8b7d8 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DIfElseSsm.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DIfElseSsm.hpp @@ -60,6 +60,8 @@ namespace xo { static void on_parsed_symbol(DIfElseSsm & self, std::string_view sym, ParserStateMachine * p_psm); /** operate state machine for incoming type description @p td **/ static void on_parsed_typedescr(DIfElseSsm & self, TypeDescr td, ParserStateMachine * p_psm); + /** operate state machine for formal emitted by nested ssm **/ + static void on_parsed_formal(DIfElseSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr **/ static void on_parsed_expression(DIfElseSsm & self, obj expr, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr followed by semicolon **/ diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DLambdaSsm.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DLambdaSsm.hpp index 943400c5..02582d0b 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DLambdaSsm.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DLambdaSsm.hpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] + * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] * arguments: * --input [idl/ISyntaxStateMachine_DLambdaSsm.json5] * 2. jinja2 template for abstract facet .hpp file: @@ -60,6 +60,8 @@ namespace xo { static void on_parsed_symbol(DLambdaSsm & self, std::string_view sym, ParserStateMachine * p_psm); /** operate state machine for incoming type description @p td **/ static void on_parsed_typedescr(DLambdaSsm & self, TypeDescr td, ParserStateMachine * p_psm); + /** operate state machine for formal emitted by nested ssm **/ + static void on_parsed_formal(DLambdaSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr **/ static void on_parsed_expression(DLambdaSsm & self, obj expr, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr followed by semicolon **/ diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DProgressSsm.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DProgressSsm.hpp index 3d70afed..ee2dfbaf 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DProgressSsm.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_DProgressSsm.hpp @@ -60,6 +60,8 @@ namespace xo { static void on_parsed_symbol(DProgressSsm & self, std::string_view sym, ParserStateMachine * p_psm); /** operate state machine for incoming type description @p td **/ static void on_parsed_typedescr(DProgressSsm & self, TypeDescr td, ParserStateMachine * p_psm); + /** operate state machine for formal emitted by nested ssm **/ + static void on_parsed_formal(DProgressSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr **/ static void on_parsed_expression(DProgressSsm & self, obj expr, ParserStateMachine * p_psm); /** update state machine for incoming parsed expression @p expr followed by semicolon **/ diff --git a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_Xfer.hpp b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_Xfer.hpp index 36c2ff83..51ab0f30 100644 --- a/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_Xfer.hpp +++ b/xo-reader2/include/xo/reader2/ssm/ISyntaxStateMachine_Xfer.hpp @@ -61,6 +61,9 @@ namespace scm { void on_parsed_typedescr(Opaque data, TypeDescr td, ParserStateMachine * p_psm) override { return I::on_parsed_typedescr(_dcast(data), td, p_psm); } + void on_parsed_formal(Opaque data, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm) override { + return I::on_parsed_formal(_dcast(data), param_name, param_type, p_psm); + } void on_parsed_expression(Opaque data, obj expr, ParserStateMachine * p_psm) override { return I::on_parsed_expression(_dcast(data), expr, p_psm); } diff --git a/xo-reader2/include/xo/reader2/ssm/RSyntaxStateMachine.hpp b/xo-reader2/include/xo/reader2/ssm/RSyntaxStateMachine.hpp index fb1fb496..3de33f8e 100644 --- a/xo-reader2/include/xo/reader2/ssm/RSyntaxStateMachine.hpp +++ b/xo-reader2/include/xo/reader2/ssm/RSyntaxStateMachine.hpp @@ -65,6 +65,9 @@ public: void on_parsed_typedescr(TypeDescr td, ParserStateMachine * p_psm) { return O::iface()->on_parsed_typedescr(O::data(), td, p_psm); } + void on_parsed_formal(const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm) { + return O::iface()->on_parsed_formal(O::data(), param_name, param_type, p_psm); + } void on_parsed_expression(obj expr, ParserStateMachine * p_psm) { return O::iface()->on_parsed_expression(O::data(), expr, p_psm); } diff --git a/xo-reader2/src/reader2/DDefineSsm.cpp b/xo-reader2/src/reader2/DDefineSsm.cpp index 4676b3c8..65df6349 100644 --- a/xo-reader2/src/reader2/DDefineSsm.cpp +++ b/xo-reader2/src/reader2/DDefineSsm.cpp @@ -704,6 +704,17 @@ namespace xo { this->get_expect_str()); } + void + DDefineSsm::on_parsed_formal(const DUniqueString * param_name, + TypeDescr param_type, + ParserStateMachine * p_psm) + { + p_psm->illegal_parsed_formal("DDefineSsm::on_parsed_formal", + param_name, + param_type, + this->get_expect_str()); + } + void DDefineSsm::on_parsed_expression(obj expr, ParserStateMachine * p_psm) diff --git a/xo-reader2/src/reader2/DExpectExprSsm.cpp b/xo-reader2/src/reader2/DExpectExprSsm.cpp index 4f61df72..2a836e87 100644 --- a/xo-reader2/src/reader2/DExpectExprSsm.cpp +++ b/xo-reader2/src/reader2/DExpectExprSsm.cpp @@ -340,7 +340,7 @@ namespace xo { DExpectExprSsm::on_parsed_symbol(std::string_view sym, ParserStateMachine * p_psm) { - p_psm->illegal_input_on_symbol("DExpectExprSsm", + p_psm->illegal_input_on_symbol("DExpectExprSsm::on_parsed_symbol", sym, this->get_expect_str()); } @@ -349,11 +349,22 @@ namespace xo { DExpectExprSsm::on_parsed_typedescr(TypeDescr td, ParserStateMachine * p_psm) { - p_psm->illegal_input_on_typedescr("DExpectExprSsm", + p_psm->illegal_input_on_typedescr("DExpectExprSsm::on_parsed_typedescr", td, this->get_expect_str()); } + void + DExpectExprSsm::on_parsed_formal(const DUniqueString * param_name, + TypeDescr param_type, + ParserStateMachine * p_psm) + { + p_psm->illegal_parsed_formal("DExpectExprSsm::on_parsed_formal", + param_name, + param_type, + this->get_expect_str()); + } + void DExpectExprSsm::on_parsed_expression(obj expr, ParserStateMachine * p_psm) diff --git a/xo-reader2/src/reader2/DExpectFormalArgSsm.cpp b/xo-reader2/src/reader2/DExpectFormalArgSsm.cpp index 215c9471..eb174fc9 100644 --- a/xo-reader2/src/reader2/DExpectFormalArgSsm.cpp +++ b/xo-reader2/src/reader2/DExpectFormalArgSsm.cpp @@ -166,6 +166,10 @@ namespace xo { ParserStateMachine * p_psm) { if (fstate_ == formalstatetype::formal_0) { + // parsed symbol @c sym is stored in tokenizer memory; + // must be copied to storage with expression lifetime, + // hence call to intern_string() + this->fstate_ = formalstatetype::formal_1; this->name_ = p_psm->intern_string(sym); return; @@ -180,11 +184,34 @@ namespace xo { DExpectFormalArgSsm::on_parsed_typedescr(TypeDescr td, ParserStateMachine * p_psm) { + if (fstate_ == formalstatetype::formal_2) { + assert(name_); + + p_psm->pop_ssm(); + p_psm->on_parsed_formal(name_, td); + + return; + } + p_psm->illegal_input_on_typedescr("DExpectFormalArgSsm::on_parsed_typedescr", td, this->get_expect_str()); } + void + DExpectFormalArgSsm::on_parsed_formal(const DUniqueString * param_name, + TypeDescr param_type, + ParserStateMachine * p_psm) + { + // NOTE: (param_name,param_type) *produced* by this SSM, + // but never *consumed* + + p_psm->illegal_parsed_formal("DExpectFormalArgSsm::on_parsed_formal", + param_name, + param_type, + this->get_expect_str()); + } + void DExpectFormalArgSsm::on_parsed_expression(obj expr, ParserStateMachine * p_psm) diff --git a/xo-reader2/src/reader2/DExpectFormalArglistSsm.cpp b/xo-reader2/src/reader2/DExpectFormalArglistSsm.cpp index db8b1f6d..a5b77c4d 100644 --- a/xo-reader2/src/reader2/DExpectFormalArglistSsm.cpp +++ b/xo-reader2/src/reader2/DExpectFormalArglistSsm.cpp @@ -186,6 +186,17 @@ namespace xo { this->get_expect_str()); } + void + DExpectFormalArglistSsm::on_parsed_formal(const DUniqueString * param_name, + TypeDescr param_type, + ParserStateMachine * p_psm) + { + p_psm->illegal_parsed_formal("DExpectFormalArglistSsm::on_parsed_formal", + param_name, + param_type, + this->get_expect_str()); + } + void DExpectFormalArglistSsm::on_parsed_expression(obj expr, ParserStateMachine * p_psm) diff --git a/xo-reader2/src/reader2/DExpectSymbolSsm.cpp b/xo-reader2/src/reader2/DExpectSymbolSsm.cpp index 7a86e721..cee3a08c 100644 --- a/xo-reader2/src/reader2/DExpectSymbolSsm.cpp +++ b/xo-reader2/src/reader2/DExpectSymbolSsm.cpp @@ -73,6 +73,17 @@ namespace xo { this->get_expect_str()); } + void + DExpectSymbolSsm::on_parsed_formal(const DUniqueString * param_name, + TypeDescr param_type, + ParserStateMachine * p_psm) + { + p_psm->illegal_parsed_formal("DExpectSymbolSsm::on_parsed_formal", + param_name, + param_type, + this->get_expect_str()); + } + void DExpectSymbolSsm::on_parsed_expression(obj expr, ParserStateMachine * p_psm) diff --git a/xo-reader2/src/reader2/DExpectTypeSsm.cpp b/xo-reader2/src/reader2/DExpectTypeSsm.cpp index 8b151c5f..8f848269 100644 --- a/xo-reader2/src/reader2/DExpectTypeSsm.cpp +++ b/xo-reader2/src/reader2/DExpectTypeSsm.cpp @@ -247,7 +247,7 @@ namespace xo { td = Reflect::require(); if (!td) { - p_psm->illegal_input_on_token("DExpectTypeSsm", + p_psm->illegal_input_on_token("DExpectTypeSsm::on_symbol_token", tk, this->get_expect_str()); } @@ -260,7 +260,7 @@ namespace xo { DExpectTypeSsm::on_parsed_symbol(std::string_view sym, ParserStateMachine * p_psm) { - p_psm->illegal_input_on_symbol("ExpectTypeSsm", + p_psm->illegal_input_on_symbol("ExpectTypeSsm::on_parsed_symbol", sym, this->get_expect_str()); } @@ -269,11 +269,22 @@ namespace xo { DExpectTypeSsm::on_parsed_typedescr(TypeDescr td, ParserStateMachine * p_psm) { - p_psm->illegal_input_on_typedescr("ExpectTypeSsm", + p_psm->illegal_input_on_typedescr("ExpectTypeSsm::on_parsed_typedescr", td, this->get_expect_str()); } + void + DExpectTypeSsm::on_parsed_formal(const DUniqueString * param_name, + TypeDescr param_type, + ParserStateMachine * p_psm) + { + p_psm->illegal_parsed_formal("DExpectTypeSsm::on_parsed_formal", + param_name, + param_type, + this->get_expect_str()); + } + void DExpectTypeSsm::on_parsed_expression(obj expr, ParserStateMachine * p_psm) diff --git a/xo-reader2/src/reader2/DExprSeqState.cpp b/xo-reader2/src/reader2/DExprSeqState.cpp index 28c62354..5d9fe9b1 100644 --- a/xo-reader2/src/reader2/DExprSeqState.cpp +++ b/xo-reader2/src/reader2/DExprSeqState.cpp @@ -449,6 +449,17 @@ namespace xo { this->get_expect_str()); } + void + DExprSeqState::on_parsed_formal(const DUniqueString * param_name, + TypeDescr param_type, + ParserStateMachine * p_psm) + { + p_psm->illegal_parsed_formal("DExprSeqState::on_parsed_formal", + param_name, + param_type, + this->get_expect_str()); + } + void DExprSeqState::on_parsed_expression(obj expr, ParserStateMachine * p_psm) diff --git a/xo-reader2/src/reader2/DIfElseSsm.cpp b/xo-reader2/src/reader2/DIfElseSsm.cpp index eca02910..9f7d7167 100644 --- a/xo-reader2/src/reader2/DIfElseSsm.cpp +++ b/xo-reader2/src/reader2/DIfElseSsm.cpp @@ -510,6 +510,17 @@ namespace xo { 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 { diff --git a/xo-reader2/src/reader2/DLambdaSsm.cpp b/xo-reader2/src/reader2/DLambdaSsm.cpp index 1fda9547..f9fcd6ae 100644 --- a/xo-reader2/src/reader2/DLambdaSsm.cpp +++ b/xo-reader2/src/reader2/DLambdaSsm.cpp @@ -192,18 +192,6 @@ namespace xo { #ifdef NOT_YET - void - lambda_xs::on_lambda_token(const token_type & tk, - parserstatemachine * p_psm) - { - if (lmxs_type_ == lambdastatetype::lm_0) { - this->lmxs_type_ = lambdastatetype::lm_1; - expect_formal_arglist_xs::start(p_psm); - } else { - exprstate::on_lambda_token(tk, p_psm); - } - } - void lambda_xs::on_formal_arglist(const std::vector> & argl, parserstatemachine * p_psm) @@ -351,13 +339,14 @@ namespace xo { } void - DLambdaSsm::on_parsed_expression_with_semicolon(obj expr, - ParserStateMachine * p_psm) + DLambdaSsm::on_parsed_formal(const DUniqueString * param_name, + TypeDescr param_type, + ParserStateMachine * p_psm) { - p_psm->illegal_parsed_expression - ("DLambdaSsm::on_parsed_expression_with_semicolon", - expr, - this->get_expect_str()); + p_psm->illegal_parsed_formal("DLambdaSsm::on_parsed_formal", + param_name, + param_type, + this->get_expect_str()); } void @@ -369,6 +358,16 @@ namespace xo { this->get_expect_str()); } + void + DLambdaSsm::on_parsed_expression_with_semicolon(obj expr, + ParserStateMachine * p_psm) + { + p_psm->illegal_parsed_expression + ("DLambdaSsm::on_parsed_expression_with_semicolon", + expr, + this->get_expect_str()); + } + #ifdef NOT_YET void lambda_xs::on_expr(bp expr, diff --git a/xo-reader2/src/reader2/DProgressSsm.cpp b/xo-reader2/src/reader2/DProgressSsm.cpp index e773f9a7..1233c198 100644 --- a/xo-reader2/src/reader2/DProgressSsm.cpp +++ b/xo-reader2/src/reader2/DProgressSsm.cpp @@ -555,6 +555,17 @@ namespace xo { this->get_expect_str()); } + void + DProgressSsm::on_parsed_formal(const DUniqueString * param_name, + TypeDescr param_type, + ParserStateMachine * p_psm) + { + p_psm->illegal_parsed_formal("DProgressSsm::on_parsed_formal", + param_name, + param_type, + this->get_expect_str()); + } + void DProgressSsm::on_parsed_expression(obj expr, ParserStateMachine * p_psm) diff --git a/xo-reader2/src/reader2/IPrintable_DLambdaSsm.cpp b/xo-reader2/src/reader2/IPrintable_DLambdaSsm.cpp index 6cf5b29a..93a703aa 100644 --- a/xo-reader2/src/reader2/IPrintable_DLambdaSsm.cpp +++ b/xo-reader2/src/reader2/IPrintable_DLambdaSsm.cpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] + * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] * arguments: * --input [idl/IPrintable_DLambdaSsm.json5] * 2. jinja2 template for abstract facet .hpp file: diff --git a/xo-reader2/src/reader2/ISyntaxStateMachine_Any.cpp b/xo-reader2/src/reader2/ISyntaxStateMachine_Any.cpp index 4cfb72a7..2a16a292 100644 --- a/xo-reader2/src/reader2/ISyntaxStateMachine_Any.cpp +++ b/xo-reader2/src/reader2/ISyntaxStateMachine_Any.cpp @@ -52,6 +52,12 @@ ISyntaxStateMachine_Any::on_parsed_typedescr(Opaque, TypeDescr, ParserStateMachi _fatal(); } +auto +ISyntaxStateMachine_Any::on_parsed_formal(Opaque, const DUniqueString *, TypeDescr, ParserStateMachine *) -> void +{ + _fatal(); +} + auto ISyntaxStateMachine_Any::on_parsed_expression(Opaque, obj, ParserStateMachine *) -> void { diff --git a/xo-reader2/src/reader2/ISyntaxStateMachine_DDefineSsm.cpp b/xo-reader2/src/reader2/ISyntaxStateMachine_DDefineSsm.cpp index 85c2a8f0..7117484b 100644 --- a/xo-reader2/src/reader2/ISyntaxStateMachine_DDefineSsm.cpp +++ b/xo-reader2/src/reader2/ISyntaxStateMachine_DDefineSsm.cpp @@ -43,6 +43,11 @@ namespace xo { self.on_parsed_typedescr(td, p_psm); } auto + ISyntaxStateMachine_DDefineSsm::on_parsed_formal(DDefineSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm) -> void + { + self.on_parsed_formal(param_name, param_type, p_psm); + } + auto ISyntaxStateMachine_DDefineSsm::on_parsed_expression(DDefineSsm & self, obj expr, ParserStateMachine * p_psm) -> void { self.on_parsed_expression(expr, p_psm); diff --git a/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectExprSsm.cpp b/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectExprSsm.cpp index e545eedd..b0f5861d 100644 --- a/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectExprSsm.cpp +++ b/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectExprSsm.cpp @@ -43,6 +43,11 @@ namespace xo { self.on_parsed_typedescr(td, p_psm); } auto + ISyntaxStateMachine_DExpectExprSsm::on_parsed_formal(DExpectExprSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm) -> void + { + self.on_parsed_formal(param_name, param_type, p_psm); + } + auto ISyntaxStateMachine_DExpectExprSsm::on_parsed_expression(DExpectExprSsm & self, obj expr, ParserStateMachine * p_psm) -> void { self.on_parsed_expression(expr, p_psm); diff --git a/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectFormalArgSsm.cpp b/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectFormalArgSsm.cpp index ad5678a5..a242df29 100644 --- a/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectFormalArgSsm.cpp +++ b/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectFormalArgSsm.cpp @@ -43,6 +43,11 @@ namespace xo { self.on_parsed_typedescr(td, p_psm); } auto + ISyntaxStateMachine_DExpectFormalArgSsm::on_parsed_formal(DExpectFormalArgSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm) -> void + { + self.on_parsed_formal(param_name, param_type, p_psm); + } + auto ISyntaxStateMachine_DExpectFormalArgSsm::on_parsed_expression(DExpectFormalArgSsm & self, obj expr, ParserStateMachine * p_psm) -> void { self.on_parsed_expression(expr, p_psm); diff --git a/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectFormalArglistSsm.cpp b/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectFormalArglistSsm.cpp index 91738110..006d122b 100644 --- a/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectFormalArglistSsm.cpp +++ b/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectFormalArglistSsm.cpp @@ -43,6 +43,11 @@ namespace xo { self.on_parsed_typedescr(td, p_psm); } auto + ISyntaxStateMachine_DExpectFormalArglistSsm::on_parsed_formal(DExpectFormalArglistSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm) -> void + { + self.on_parsed_formal(param_name, param_type, p_psm); + } + auto ISyntaxStateMachine_DExpectFormalArglistSsm::on_parsed_expression(DExpectFormalArglistSsm & self, obj expr, ParserStateMachine * p_psm) -> void { self.on_parsed_expression(expr, p_psm); diff --git a/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectSymbolSsm.cpp b/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectSymbolSsm.cpp index 0a35bb71..b7f208e8 100644 --- a/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectSymbolSsm.cpp +++ b/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectSymbolSsm.cpp @@ -43,6 +43,11 @@ namespace xo { self.on_parsed_typedescr(td, p_psm); } auto + ISyntaxStateMachine_DExpectSymbolSsm::on_parsed_formal(DExpectSymbolSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm) -> void + { + self.on_parsed_formal(param_name, param_type, p_psm); + } + auto ISyntaxStateMachine_DExpectSymbolSsm::on_parsed_expression(DExpectSymbolSsm & self, obj expr, ParserStateMachine * p_psm) -> void { self.on_parsed_expression(expr, p_psm); diff --git a/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectTypeSsm.cpp b/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectTypeSsm.cpp index 4b6950ab..473bd4b7 100644 --- a/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectTypeSsm.cpp +++ b/xo-reader2/src/reader2/ISyntaxStateMachine_DExpectTypeSsm.cpp @@ -43,6 +43,11 @@ namespace xo { self.on_parsed_typedescr(td, p_psm); } auto + ISyntaxStateMachine_DExpectTypeSsm::on_parsed_formal(DExpectTypeSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm) -> void + { + self.on_parsed_formal(param_name, param_type, p_psm); + } + auto ISyntaxStateMachine_DExpectTypeSsm::on_parsed_expression(DExpectTypeSsm & self, obj expr, ParserStateMachine * p_psm) -> void { self.on_parsed_expression(expr, p_psm); diff --git a/xo-reader2/src/reader2/ISyntaxStateMachine_DExprSeqState.cpp b/xo-reader2/src/reader2/ISyntaxStateMachine_DExprSeqState.cpp index af5d3cc9..d11ab3b7 100644 --- a/xo-reader2/src/reader2/ISyntaxStateMachine_DExprSeqState.cpp +++ b/xo-reader2/src/reader2/ISyntaxStateMachine_DExprSeqState.cpp @@ -43,6 +43,11 @@ namespace xo { self.on_parsed_typedescr(td, p_psm); } auto + ISyntaxStateMachine_DExprSeqState::on_parsed_formal(DExprSeqState & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm) -> void + { + self.on_parsed_formal(param_name, param_type, p_psm); + } + auto ISyntaxStateMachine_DExprSeqState::on_parsed_expression(DExprSeqState & self, obj expr, ParserStateMachine * p_psm) -> void { self.on_parsed_expression(expr, p_psm); diff --git a/xo-reader2/src/reader2/ISyntaxStateMachine_DIfElseSsm.cpp b/xo-reader2/src/reader2/ISyntaxStateMachine_DIfElseSsm.cpp index 66633e88..39a3abb2 100644 --- a/xo-reader2/src/reader2/ISyntaxStateMachine_DIfElseSsm.cpp +++ b/xo-reader2/src/reader2/ISyntaxStateMachine_DIfElseSsm.cpp @@ -43,6 +43,11 @@ namespace xo { self.on_parsed_typedescr(td, p_psm); } auto + ISyntaxStateMachine_DIfElseSsm::on_parsed_formal(DIfElseSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm) -> void + { + self.on_parsed_formal(param_name, param_type, p_psm); + } + auto ISyntaxStateMachine_DIfElseSsm::on_parsed_expression(DIfElseSsm & self, obj expr, ParserStateMachine * p_psm) -> void { self.on_parsed_expression(expr, p_psm); diff --git a/xo-reader2/src/reader2/ISyntaxStateMachine_DLambdaSsm.cpp b/xo-reader2/src/reader2/ISyntaxStateMachine_DLambdaSsm.cpp index ac4b2d14..e59546c8 100644 --- a/xo-reader2/src/reader2/ISyntaxStateMachine_DLambdaSsm.cpp +++ b/xo-reader2/src/reader2/ISyntaxStateMachine_DLambdaSsm.cpp @@ -2,7 +2,7 @@ * * Generated automagically from ingredients: * 1. code generator: - * [/Users/roland/proj/xo-umbrella2/xo-facet/codegen/genfacet] + * [/home/roland/proj/xo-umbrella2-claude1/xo-facet/codegen/genfacet] * arguments: * --input [idl/ISyntaxStateMachine_DLambdaSsm.json5] * 2. jinja2 template for abstract facet .hpp file: @@ -32,7 +32,6 @@ namespace xo { { self.on_token(tk, p_psm); } - auto ISyntaxStateMachine_DLambdaSsm::on_parsed_symbol(DLambdaSsm & self, std::string_view sym, ParserStateMachine * p_psm) -> void { @@ -44,6 +43,11 @@ namespace xo { self.on_parsed_typedescr(td, p_psm); } auto + ISyntaxStateMachine_DLambdaSsm::on_parsed_formal(DLambdaSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm) -> void + { + self.on_parsed_formal(param_name, param_type, p_psm); + } + auto ISyntaxStateMachine_DLambdaSsm::on_parsed_expression(DLambdaSsm & self, obj expr, ParserStateMachine * p_psm) -> void { self.on_parsed_expression(expr, p_psm); @@ -57,4 +61,4 @@ namespace xo { } /*namespace scm*/ } /*namespace xo*/ -/* end ISyntaxStateMachine_DLambdaSsm.cpp */ +/* end ISyntaxStateMachine_DLambdaSsm.cpp */ \ No newline at end of file diff --git a/xo-reader2/src/reader2/ISyntaxStateMachine_DProgressSsm.cpp b/xo-reader2/src/reader2/ISyntaxStateMachine_DProgressSsm.cpp index 1fdd6c90..6fe3f822 100644 --- a/xo-reader2/src/reader2/ISyntaxStateMachine_DProgressSsm.cpp +++ b/xo-reader2/src/reader2/ISyntaxStateMachine_DProgressSsm.cpp @@ -43,6 +43,11 @@ namespace xo { self.on_parsed_typedescr(td, p_psm); } auto + ISyntaxStateMachine_DProgressSsm::on_parsed_formal(DProgressSsm & self, const DUniqueString * param_name, TypeDescr param_type, ParserStateMachine * p_psm) -> void + { + self.on_parsed_formal(param_name, param_type, p_psm); + } + auto ISyntaxStateMachine_DProgressSsm::on_parsed_expression(DProgressSsm & self, obj expr, ParserStateMachine * p_psm) -> void { self.on_parsed_expression(expr, p_psm); diff --git a/xo-reader2/src/reader2/ParserStateMachine.cpp b/xo-reader2/src/reader2/ParserStateMachine.cpp index 2d9e4970..911b594a 100644 --- a/xo-reader2/src/reader2/ParserStateMachine.cpp +++ b/xo-reader2/src/reader2/ParserStateMachine.cpp @@ -129,6 +129,17 @@ namespace xo { this->stack_->top().on_parsed_typedescr(td, this); } + void + ParserStateMachine::on_parsed_formal(const DUniqueString * sym, + TypeDescr td) + { + scope log(XO_DEBUG(debug_flag_), xtag("sym", std::string_view(*sym)), xtag("td", td)); + + assert(stack_); + + this->stack_->top().on_parsed_formal(sym, td, this); + } + void ParserStateMachine::on_parsed_expression(obj expr) { @@ -248,6 +259,31 @@ namespace xo { this->capture_error(ssm_name, errmsg); } + void + ParserStateMachine::illegal_parsed_formal(std::string_view ssm_name, + const DUniqueString * param_name, + TypeDescr param_type, + std::string_view expect_str) + { + // TODO: + // - want to write error message using DArena + // - need something like log_streambuf and/or tostr() that's arena-aware + + auto errmsg_string = tostr("Unexpected expression", + xtag("param_name", std::string_view(*param_name)), + xtag("param_type", param_type), + xtag("expecting", expect_str), + xtag("ssm", ssm_name), + xtag("via", "ParserStateMachine::illegal_parsed_expression")); + + assert(expr_alloc_); + + auto errmsg = DString::from_view(expr_alloc_, + std::string_view(errmsg_string)); + + this->capture_error(ssm_name, errmsg); + } + void ParserStateMachine::illegal_parsed_expression(std::string_view ssm_name, obj expr,