xo-reader2: construct LambdaExpr to complete LambdaSsm + utest

This commit is contained in:
Roland Conybeare 2026-02-01 00:16:37 -05:00
commit 6a932912e3
8 changed files with 76 additions and 11 deletions

View file

@ -11,6 +11,7 @@
#include "DExpectExprSsm.hpp"
#include "ParserStateMachine.hpp"
#include "syntaxstatetype.hpp"
#include <xo/expression2/detail/IExpression_DLambdaExpr.hpp>
#include <xo/expression2/DVariable.hpp>
#include <xo/expression2/detail/IExpression_DVariable.hpp>
//#include <xo/expression2/symtab/ISymbolTable_DLocalSymtab.hpp>
@ -336,17 +337,23 @@ namespace xo {
DLambdaSsm::on_parsed_expression(obj<AExpression> expr,
ParserStateMachine * p_psm)
{
if (lm_state_ == lambdastatetype::lm_4) {
if (lmstate_ == lambdastatetype::lm_4) {
this->lmstate_ = lambdastatetype::lm_5;
this->body_ = expr;
// assemble lambda
obj<AExpression,DLambda> lm_expr = DLambda::make(p_psm->expr_alloc(),
xxx typeref,
xxx name,
local_symtab_,
body_);
auto prefix = TypeRef::prefix_type::from_chars("lm");
TypeRef tref = TypeRef::dwim(prefix, nullptr);
const DUniqueString * name = p_psm->gensym("lambda");
auto lm_expr = obj<AExpression,DLambdaExpr>
(DLambdaExpr::make(p_psm->expr_alloc(),
tref,
name,
local_symtab_,
body_));
p_psm->pop_ssm(); // this lambda
p_psm->on_parsed_expression(lm_expr);

View file

@ -90,6 +90,12 @@ namespace xo {
return stringtable_.intern(str);
}
const DUniqueString *
ParserStateMachine::gensym(std::string_view str)
{
return stringtable_.gensym(str);
}
void
ParserStateMachine::push_local_symtab(DLocalSymtab * symtab)
{