xo-reader2: lambda ssm progress. incremental [WIP]

This commit is contained in:
Roland Conybeare 2026-01-29 10:16:52 -05:00
commit 2a149d371c
3 changed files with 48 additions and 7 deletions

View file

@ -140,8 +140,10 @@ 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*/

View file

@ -146,6 +146,12 @@ namespace xo {
DExpectFormalArgSsm::on_parsed_symbol(std::string_view sym,
ParserStateMachine * p_psm)
{
if (fstate_ == formalstatetype::formal_0) {
this->fstate_ = formalstatetype::formal_1;
this->name_ = p_psm->intern_string(sym);
return;
}
p_psm->illegal_input_on_symbol("DExpectFormalArgSsm::on_parsed_symbol",
sym,
this->get_expect_str());
@ -230,9 +236,18 @@ namespace xo {
bool
DExpectFormalArgSsm::pretty(const ppindentinfo & ppii) const {
return ppii.pps()->pretty_struct
(ppii,
"DExpectFormalArgSsm");
if (name_) {
return ppii.pps()->pretty_struct
(ppii,
"DExpectFormalArgSsm",
refrtag("fstate", fstate_),
refrtag("name", std::string_view(*name_)));
} else {
return ppii.pps()->pretty_struct
(ppii,
"DExpectFormalArgSsm",
refrtag("fstate", fstate_));
}
}
} /*namespace scm*/

View file

@ -215,7 +215,7 @@ namespace xo {
/** Walkthrough parsing input equivalent to:
*
* lambda ;
* lambda (n : i64;
*
**/
@ -243,11 +243,10 @@ namespace xo {
REQUIRE(result.is_incomplete());
}
#ifdef NOT_YET
{
auto & result = parser.on_token(Token::then_token());
auto & result = parser.on_token(Token::symbol_token("n"));
log && log("after then token:");
log && log("after symbol(n) token:");
log && log(xtag("parser", &parser));
log && log(xtag("result", result));
@ -256,6 +255,31 @@ namespace xo {
REQUIRE(result.is_incomplete());
}
{
auto & result = parser.on_token(Token::colon_token());
log && log("after colon token:");
log && log(xtag("parser", &parser));
log && log(xtag("result", result));
REQUIRE(parser.has_incomplete_expr() == true);
REQUIRE(!result.is_error());
REQUIRE(result.is_incomplete());
}
{
auto & result = parser.on_token(Token::symbol_token("i64"));
log && log("after symbol(i64) token:");
log && log(xtag("parser", &parser));
log && log(xtag("result", result));
REQUIRE(parser.has_incomplete_expr() == true);
REQUIRE(!result.is_error());
REQUIRE(result.is_incomplete());
}
#ifdef NOT_YET
{
auto & result = parser.on_token(Token::i64_token("777"));