xo-reader2: handle parsed typedescr + use in DDefineSsm

This commit is contained in:
Roland Conybeare 2026-01-21 12:14:35 -05:00
commit 7d33440ecb
26 changed files with 231 additions and 37 deletions

View file

@ -420,7 +420,7 @@ namespace xo {
DDefineSsm::on_parsed_symbol(std::string_view sym_name,
ParserStateMachine * p_psm)
{
if (this->defstate_ == defexprstatetype::def_1) {
if (defstate_ == defexprstatetype::def_1) {
this->defstate_ = defexprstatetype::def_2;
const DUniqueString * sym
@ -460,6 +460,32 @@ namespace xo {
this->get_expect_str());
}
void
DDefineSsm::on_parsed_typedescr(TypeDescr td,
ParserStateMachine * p_psm)
{
scope log(XO_DEBUG(true), xtag("td", td));
if (defstate_ == defexprstatetype::def_3) {
this->defstate_ = defexprstatetype::def_4;
// note: not present in x0-reader/ version
def_expr_.assign_valuetype(td);
#ifdef NOT_YET
this->cvt_expr_ = ConvertExpr::make(td, nullptr);
def_expr_->assign_rhs(cvt_expr_);
#endif
log && log("STUB: ConvertExpr not implemented, TypeDescr not captured");
return;
}
p_psm->illegal_input_on_typedescr("DDefineSsm::on_parsed_typedescr",
td,
this->get_expect_str());
}
void
DDefineSsm::on_symbol_token(const Token & tk,
ParserStateMachine * p_psm)

View file

@ -56,6 +56,24 @@ namespace xo {
return "symbol";
}
void
DExpectSymbolSsm::on_parsed_symbol(std::string_view sym,
ParserStateMachine * p_psm)
{
p_psm->illegal_input_on_symbol("DExpectSymbolSsm::on_parsed_symbol",
sym,
this->get_expect_str());
}
void
DExpectSymbolSsm::on_parsed_typedescr(TypeDescr td,
ParserStateMachine * p_psm)
{
p_psm->illegal_input_on_typedescr("DExpectSymbolSsm::on_parsed_typedescr",
td,
this->get_expect_str());
}
void
DExpectSymbolSsm::on_symbol_token(const Token & tk,
ParserStateMachine * p_psm)
@ -104,15 +122,6 @@ namespace xo {
this->get_expect_str());
}
void
DExpectSymbolSsm::on_parsed_symbol(std::string_view sym,
ParserStateMachine * p_psm)
{
p_psm->illegal_input_on_symbol("DExpectSymbolSsm::on_parsed_symbol",
sym,
this->get_expect_str());
}
bool
DExpectSymbolSsm::pretty(const ppindentinfo & ppii) const
{

View file

@ -115,10 +115,7 @@ namespace xo {
}
p_psm->pop_ssm();
log && log("STUB: missing on_typedescr() call");
//p_psm->on_typedescr(td);
p_psm->on_parsed_typedescr(td);
}
void
@ -130,6 +127,15 @@ namespace xo {
this->get_expect_str());
}
void
DExpectTypeSsm::on_parsed_typedescr(TypeDescr td,
ParserStateMachine * p_psm)
{
p_psm->illegal_input_on_typedescr("ExpectTypeSsm",
td,
this->get_expect_str());
}
bool
DExpectTypeSsm::pretty(const ppindentinfo & ppii) const
{

View file

@ -178,6 +178,15 @@ namespace xo {
this->get_expect_str());
}
void
DExprSeqState::on_parsed_typedescr(TypeDescr td,
ParserStateMachine * p_psm)
{
p_psm->illegal_input_on_typedescr("DExprSeqState::on_parsed_typedescr",
td,
this->get_expect_str());
}
bool
DExprSeqState::pretty(const ppindentinfo & ppii) const
{

View file

@ -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_DExpectTypeSsm.json5]
* 2. jinja2 template for abstract facet .hpp file:

View file

@ -64,6 +64,12 @@ ISyntaxStateMachine_Any::on_parsed_symbol(Opaque, std::string_view, ParserStateM
_fatal();
}
auto
ISyntaxStateMachine_Any::on_parsed_typedescr(Opaque, TypeDescr, ParserStateMachine *) -> void
{
_fatal();
}
} /*namespace scm*/
} /*namespace xo*/

View file

@ -52,6 +52,11 @@ namespace xo {
{
self.on_parsed_symbol(sym, p_psm);
}
auto
ISyntaxStateMachine_DDefineSsm::on_parsed_typedescr(DDefineSsm & self, TypeDescr td, ParserStateMachine * p_psm) -> void
{
self.on_parsed_typedescr(td, p_psm);
}
} /*namespace scm*/
} /*namespace xo*/

View file

@ -52,6 +52,11 @@ namespace xo {
{
self.on_parsed_symbol(sym, p_psm);
}
auto
ISyntaxStateMachine_DExpectSymbolSsm::on_parsed_typedescr(DExpectSymbolSsm & self, TypeDescr td, ParserStateMachine * p_psm) -> void
{
self.on_parsed_typedescr(td, p_psm);
}
} /*namespace scm*/
} /*namespace xo*/

View file

@ -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_DExpectTypeSsm.json5]
* 2. jinja2 template for abstract facet .hpp file:
@ -52,6 +52,11 @@ namespace xo {
{
self.on_parsed_symbol(sym, p_psm);
}
auto
ISyntaxStateMachine_DExpectTypeSsm::on_parsed_typedescr(DExpectTypeSsm & self, TypeDescr td, ParserStateMachine * p_psm) -> void
{
self.on_parsed_typedescr(td, p_psm);
}
} /*namespace scm*/
} /*namespace xo*/

View file

@ -52,6 +52,11 @@ namespace xo {
{
self.on_parsed_symbol(sym, p_psm);
}
auto
ISyntaxStateMachine_DExprSeqState::on_parsed_typedescr(DExprSeqState & self, TypeDescr td, ParserStateMachine * p_psm) -> void
{
self.on_parsed_typedescr(td, p_psm);
}
} /*namespace scm*/
} /*namespace xo*/

View file

@ -113,6 +113,16 @@ namespace xo {
this->stack_->top().on_parsed_symbol(sym, this);
}
void
ParserStateMachine::on_parsed_typedescr(TypeDescr td)
{
scope log(XO_DEBUG(debug_flag_), xtag("td", td));
assert(stack_);
this->stack_->top().on_parsed_typedescr(td, this);
}
void
ParserStateMachine::on_token(const Token & tk)
{
@ -271,6 +281,29 @@ namespace xo {
this->capture_error(ssm_name, errmsg);
}
void
ParserStateMachine::illegal_input_on_typedescr(std::string_view ssm_name,
TypeDescr td,
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 type-description for parsing state",
xtag("td", td),
xtag("expecting", expect_str),
xtag("ssm", ssm_name),
xtag("via", "ParserStateMachine::illegal_input_on_typedescr"));
assert(expr_alloc_);
auto errmsg = DString::from_view(expr_alloc_,
std::string_view(errmsg_string));
this->capture_error(ssm_name, errmsg);
}
} /*namespace scm*/
} /*namespace xo*/