Skip to content

Commit 990d155

Browse files
committed
[AST] Split up PatternBindingDecl::setPattern
Most clients only want to set one of the two parameters, split it into `setPattern` and `setInitContext` (the latter of which now handles calling `setBinding`).
1 parent 8485740 commit 990d155

File tree

9 files changed

+21
-23
lines changed

9 files changed

+21
-23
lines changed

include/swift/AST/Decl.h

+8-3
Original file line numberDiff line numberDiff line change
@@ -2314,9 +2314,7 @@ class PatternBindingDecl final : public Decl,
23142314
return getPatternList()[i].getPattern();
23152315
}
23162316

2317-
void setPattern(unsigned i, Pattern *Pat,
2318-
PatternBindingInitializer *InitContext,
2319-
bool isFullyValidated = false);
2317+
void setPattern(unsigned i, Pattern *P, bool isFullyValidated = false);
23202318

23212319
bool isFullyValidated(unsigned i) const {
23222320
return getPatternList()[i].isFullyValidated();
@@ -2326,6 +2324,13 @@ class PatternBindingDecl final : public Decl,
23262324
return getPatternList()[i].getInitContext();
23272325
}
23282326

2327+
void setInitContext(unsigned i, PatternBindingInitializer *init) {
2328+
if (init) {
2329+
init->setBinding(this, i);
2330+
}
2331+
getMutablePatternList()[i].setInitContext(init);
2332+
}
2333+
23292334
CaptureInfo getCaptureInfo(unsigned i) const {
23302335
return getPatternList()[i].getCaptureInfo();
23312336
}

lib/AST/ASTWalker.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ class Traversal : public ASTVisitor<Traversal, Expr*, Stmt*,
202202

203203
for (auto idx : range(PBD->getNumPatternEntries())) {
204204
if (Pattern *Pat = doIt(PBD->getPattern(idx)))
205-
PBD->setPattern(idx, Pat, PBD->getInitContext(idx));
205+
PBD->setPattern(idx, Pat);
206206
else
207207
return true;
208208

lib/AST/Decl.cpp

+5-8
Original file line numberDiff line numberDiff line change
@@ -1932,12 +1932,11 @@ PatternBindingDecl::create(ASTContext &Ctx, SourceLoc StaticLoc,
19321932
if (!initContext && !Parent->isLocalContext())
19331933
initContext = PatternBindingInitializer::create(Parent);
19341934

1935-
if (initContext)
1936-
initContext->setBinding(PBD, idx);
1937-
19381935
// We need to call setPattern to ensure the VarDecls in the pattern have
1939-
// the PatternBindingDecl set as their parent, and to setup the context.
1940-
PBD->setPattern(idx, PBD->getPattern(idx), initContext);
1936+
// the PatternBindingDecl set as their parent. We also need to call
1937+
// setInitContext to setup the context.
1938+
PBD->setPattern(idx, PBD->getPattern(idx));
1939+
PBD->setInitContext(idx, initContext);
19411940
}
19421941
return PBD;
19431942
}
@@ -2238,12 +2237,10 @@ PatternBindingDecl::getCheckedPatternBindingEntry(unsigned i) const {
22382237
}
22392238

22402239
void PatternBindingDecl::setPattern(unsigned i, Pattern *P,
2241-
PatternBindingInitializer *InitContext,
22422240
bool isFullyValidated) {
22432241
auto PatternList = getMutablePatternList();
22442242
PatternList[i].setPattern(P);
2245-
PatternList[i].setInitContext(InitContext);
2246-
2243+
22472244
// Make sure that any VarDecl's contained within the pattern know about this
22482245
// PatternBindingDecl as their parent.
22492246
if (P) {

lib/Sema/CSApply.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -9477,7 +9477,6 @@ ExprWalker::rewriteTarget(SyntacticElementTarget target) {
94779477
// this is important for subsequent call to typeCheckDecl
94789478
// because otherwise it would try to re-typecheck pattern.
94799479
patternBinding->setPattern(index, pattern,
9480-
patternBinding->getInitContext(index),
94819480
/*isFullyValidated=*/true);
94829481

94839482
if (patternBinding->isExplicitlyInitialized(index) ||

lib/Sema/CSGen.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -4857,8 +4857,7 @@ bool ConstraintSystem::generateConstraints(
48574857

48584858
// Reset binding to point to the resolved pattern. This is required
48594859
// before calling `forPatternBindingDecl`.
4860-
patternBinding->setPattern(index, pattern,
4861-
patternBinding->getInitContext(index));
4860+
patternBinding->setPattern(index, pattern);
48624861

48634862
auto contextualPattern =
48644863
ContextualPattern::forPatternBindingDecl(patternBinding, index);

lib/Sema/CSSyntacticElement.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -715,8 +715,7 @@ class SyntacticElementConstraintGenerator
715715

716716
// Reset binding to point to the resolved pattern. This is required
717717
// before calling `forPatternBindingDecl`.
718-
patternBinding->setPattern(index, pattern,
719-
patternBinding->getInitContext(index));
718+
patternBinding->setPattern(index, pattern);
720719

721720
patterns.push_back(makeElement(
722721
patternBinding,

lib/Sema/TypeCheckConstraints.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -896,7 +896,7 @@ bool TypeChecker::typeCheckPatternBinding(PatternBindingDecl *PBD,
896896
return true;
897897
}
898898

899-
PBD->setPattern(patternNumber, pattern, initContext);
899+
PBD->setPattern(patternNumber, pattern);
900900
PBD->setInit(patternNumber, init);
901901

902902
if (hadError)

lib/Sema/TypeCheckStorage.cpp

+1-2
Original file line numberDiff line numberDiff line change
@@ -411,8 +411,7 @@ const PatternBindingEntry *PatternBindingEntryRequest::evaluate(
411411
return &pbe;
412412
}
413413

414-
binding->setPattern(entryNumber, pattern,
415-
binding->getInitContext(entryNumber));
414+
binding->setPattern(entryNumber, pattern);
416415

417416
// Validate 'static'/'class' on properties in nominal type decls.
418417
auto StaticSpelling = binding->getStaticSpelling();

lib/Serialization/Deserialization.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -4362,9 +4362,9 @@ class DeclDeserializer {
43624362
binding->setImplicit();
43634363

43644364
for (unsigned i = 0; i != patterns.size(); ++i) {
4365-
DeclContext *initContext = MF.getDeclContext(patterns[i].second);
4366-
binding->setPattern(i, patterns[i].first,
4367-
cast_or_null<PatternBindingInitializer>(initContext));
4365+
binding->setPattern(i, patterns[i].first);
4366+
if (auto *context = MF.getDeclContext(patterns[i].second))
4367+
binding->setInitContext(i, cast<PatternBindingInitializer>(context));
43684368
}
43694369

43704370
return binding;

0 commit comments

Comments
 (0)