From fdfe2e7270e32c735b6ad8e8d657807f81fc4a8d Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Wed, 3 Jul 2024 14:31:47 -0400 Subject: [PATCH] xo-expression: unify variables within each lambda layer --- src/expression/Lambda.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/expression/Lambda.cpp b/src/expression/Lambda.cpp index b2e4d1f3..30b579cf 100644 --- a/src/expression/Lambda.cpp +++ b/src/expression/Lambda.cpp @@ -110,6 +110,28 @@ namespace xo { var_map[arg->name()] = arg; } + + body_ = body_->xform_layer + ([&var_map](ref::brw x) -> ref::rp + { + if (x->extype() == exprtype::variable) { + ref::brw var = Variable::from(x); + + auto ix = var_map.find(var->name()); + if (ix == var_map.end()) { + /* add to var_map */ + + var_map[var->name()] = var.get(); + + return var.get(); + } else { + /* substitute already-encountered var_map[] member */ + return ix->second; + } + } else { + return x.get(); + } + }); } this->type_str_ = ss.str();