@@ -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-
11371112public:
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