Skip to content

Commit 4c5cc21

Browse files
authored
Merge pull request swiftlang#40592 from CodaFi/build-back-better
[NFC] Refactor Pattern Binding Application in Result Builders
2 parents c92f2a2 + d37032f commit 4c5cc21

File tree

1 file changed

+5
-28
lines changed

1 file changed

+5
-28
lines changed

lib/Sema/BuilderTransform.cpp

Lines changed: 5 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1109,31 +1109,6 @@ class BuilderClosureRewriter
11091109
elements.push_back(pbd);
11101110
}
11111111

1112-
/// Produce a final type-checked pattern binding.
1113-
void finishPatternBindingDecl(PatternBindingDecl *patternBinding) {
1114-
for (unsigned index : range(patternBinding->getNumPatternEntries())) {
1115-
// Find the solution application target for this.
1116-
auto knownTarget =
1117-
*solution.getConstraintSystem().getSolutionApplicationTarget(
1118-
{patternBinding, index});
1119-
1120-
// Rewrite the target.
1121-
auto resultTarget = rewriteTarget(knownTarget);
1122-
if (!resultTarget)
1123-
continue;
1124-
1125-
// FIXME: It's unfortunate that we're duplicating code from CSApply here.
1126-
// If there were a request for the fully-typechecked initializer of a
1127-
// pattern binding we may be able to eliminate the duplication here.
1128-
patternBinding->setPattern(
1129-
index, resultTarget->getInitializationPattern(),
1130-
resultTarget->getDeclContext(),
1131-
/*isFullyValidated=*/true);
1132-
patternBinding->setInit(index, resultTarget->getAsExpr());
1133-
patternBinding->setInitializerChecked(index);
1134-
}
1135-
}
1136-
11371112
public:
11381113
BuilderClosureRewriter(
11391114
const Solution &solution,
@@ -1238,9 +1213,11 @@ class BuilderClosureRewriter
12381213

12391214
// Handle pattern bindings.
12401215
if (auto patternBinding = dyn_cast<PatternBindingDecl>(decl)) {
1241-
finishPatternBindingDecl(patternBinding);
1242-
TypeChecker::typeCheckDecl(decl);
1243-
newElements.push_back(decl);
1216+
auto resultTarget = rewriteTarget(SolutionApplicationTarget{patternBinding});
1217+
assert(resultTarget.hasValue()
1218+
&& "Could not rewrite pattern binding entries!");
1219+
TypeChecker::typeCheckDecl(resultTarget->getAsPatternBinding());
1220+
newElements.push_back(resultTarget->getAsPatternBinding());
12441221
continue;
12451222
}
12461223

0 commit comments

Comments
 (0)