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 **/ /** formal parameter name **/
const DUniqueString * name_ = nullptr; const DUniqueString * name_ = nullptr;
#ifdef NOT_YET
/** formal parameter type (if specified) **/ /** formal parameter type (if specified) **/
TypeDescr td_ = nullptr; TypeDescr td_ = nullptr;
#endif
}; };
} /*namespace scm*/ } /*namespace scm*/
} /*namespace xo*/ } /*namespace xo*/

View file

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

View file

@ -215,7 +215,7 @@ namespace xo {
/** Walkthrough parsing input equivalent to: /** Walkthrough parsing input equivalent to:
* *
* lambda ; * lambda (n : i64;
* *
**/ **/
@ -243,11 +243,10 @@ namespace xo {
REQUIRE(result.is_incomplete()); 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("parser", &parser));
log && log(xtag("result", result)); log && log(xtag("result", result));
@ -256,6 +255,31 @@ namespace xo {
REQUIRE(result.is_incomplete()); 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")); auto & result = parser.on_token(Token::i64_token("777"));