mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
Sema: Record result builder transforms in the trail
This commit is contained in:
@@ -1211,15 +1211,7 @@ ConstraintSystem::matchResultBuilder(AnyFunctionRef fn, Type builderType,
|
||||
transformInfo.transformedBody = transformedBody->second;
|
||||
|
||||
// Record the transformation.
|
||||
assert(
|
||||
std::find_if(
|
||||
resultBuilderTransformed.begin(), resultBuilderTransformed.end(),
|
||||
[&](const std::pair<AnyFunctionRef, AppliedBuilderTransform> &elt) {
|
||||
return elt.first == fn;
|
||||
}) == resultBuilderTransformed.end() &&
|
||||
"already transformed this body along this path!?!");
|
||||
resultBuilderTransformed.insert(
|
||||
std::make_pair(fn, std::move(transformInfo)));
|
||||
recordResultBuilderTransform(fn, std::move(transformInfo));
|
||||
|
||||
if (generateConstraints(fn, transformInfo.transformedBody))
|
||||
return getTypeMatchFailure(locator);
|
||||
@@ -1227,6 +1219,22 @@ ConstraintSystem::matchResultBuilder(AnyFunctionRef fn, Type builderType,
|
||||
return getTypeMatchSuccess();
|
||||
}
|
||||
|
||||
void ConstraintSystem::recordResultBuilderTransform(AnyFunctionRef fn,
|
||||
AppliedBuilderTransform transformInfo) {
|
||||
bool inserted = resultBuilderTransformed.insert(
|
||||
std::make_pair(fn, std::move(transformInfo))).second;
|
||||
ASSERT(inserted);
|
||||
|
||||
if (solverState)
|
||||
recordChange(SolverTrail::Change::recordedResultBuilderTransform(fn));
|
||||
}
|
||||
|
||||
/// Undo the above change.
|
||||
void ConstraintSystem::removeResultBuilderTransform(AnyFunctionRef fn) {
|
||||
bool erased = resultBuilderTransformed.erase(fn);
|
||||
ASSERT(erased);
|
||||
}
|
||||
|
||||
namespace {
|
||||
class ReturnStmtFinder : public ASTWalker {
|
||||
std::vector<ReturnStmt *> ReturnStmts;
|
||||
|
||||
Reference in New Issue
Block a user