@@ -1211,22 +1211,30 @@ ConstraintSystem::matchResultBuilder(AnyFunctionRef fn, Type builderType,
12111211 transformInfo.transformedBody = transformedBody->second ;
12121212
12131213 // Record the transformation.
1214- assert (
1215- std::find_if (
1216- resultBuilderTransformed.begin (), resultBuilderTransformed.end (),
1217- [&](const std::pair<AnyFunctionRef, AppliedBuilderTransform> &elt) {
1218- return elt.first == fn;
1219- }) == resultBuilderTransformed.end () &&
1220- " already transformed this body along this path!?!" );
1221- resultBuilderTransformed.insert (
1222- std::make_pair (fn, std::move (transformInfo)));
1214+ recordResultBuilderTransform (fn, std::move (transformInfo));
12231215
12241216 if (generateConstraints (fn, transformInfo.transformedBody ))
12251217 return getTypeMatchFailure (locator);
12261218
12271219 return getTypeMatchSuccess ();
12281220}
12291221
1222+ void ConstraintSystem::recordResultBuilderTransform (AnyFunctionRef fn,
1223+ AppliedBuilderTransform transformInfo) {
1224+ bool inserted = resultBuilderTransformed.insert (
1225+ std::make_pair (fn, std::move (transformInfo))).second ;
1226+ ASSERT (inserted);
1227+
1228+ if (solverState)
1229+ recordChange (SolverTrail::Change::recordedResultBuilderTransform (fn));
1230+ }
1231+
1232+ // / Undo the above change.
1233+ void ConstraintSystem::removeResultBuilderTransform (AnyFunctionRef fn) {
1234+ bool erased = resultBuilderTransformed.erase (fn);
1235+ ASSERT (erased);
1236+ }
1237+
12301238namespace {
12311239class ReturnStmtFinder : public ASTWalker {
12321240 std::vector<ReturnStmt *> ReturnStmts;
0 commit comments