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();