Skip to content

Commit 150be31

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 48b6e31 commit 150be31

File tree

9 files changed

+21
-23
lines changed

9 files changed

+21
-23
lines changed

include/swift/AST/Decl.h

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2318,9 +2318,7 @@ class PatternBindingDecl final : public Decl,
23182318
return getPatternList()[i].getPattern();
23192319
}
23202320

2321-
void setPattern(unsigned i, Pattern *Pat,
2322-
PatternBindingInitializer *InitContext,
2323-
bool isFullyValidated = false);
2321+
void setPattern(unsigned i, Pattern *P, bool isFullyValidated = false);
23242322

23252323
bool isFullyValidated(unsigned i) const {
23262324
return getPatternList()[i].isFullyValidated();
@@ -2330,6 +2328,13 @@ class PatternBindingDecl final : public Decl,
23302328
return getPatternList()[i].getInitContext();
23312329
}
23322330

2331+
void setInitContext(unsigned i, PatternBindingInitializer *init) {
2332+
if (init) {
2333+
init->setBinding(this, i);
2334+
}
2335+
getMutablePatternList()[i].setInitContext(init);
2336+
}
2337+
23332338
CaptureInfo getCaptureInfo(unsigned i) const {
23342339
return getPatternList()[i].getCaptureInfo();
23352340
}

lib/AST/ASTWalker.cpp

Lines changed: 1 addition & 1 deletion
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

Lines changed: 5 additions & 8 deletions
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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9525,7 +9525,6 @@ ExprWalker::rewriteTarget(SyntacticElementTarget target) {
95259525
// this is important for subsequent call to typeCheckDecl
95269526
// because otherwise it would try to re-typecheck pattern.
95279527
patternBinding->setPattern(index, pattern,
9528-
patternBinding->getInitContext(index),
95299528
/*isFullyValidated=*/true);
95309529

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

lib/Sema/CSGen.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4838,8 +4838,7 @@ bool ConstraintSystem::generateConstraints(
48384838

48394839
// Reset binding to point to the resolved pattern. This is required
48404840
// before calling `forPatternBindingDecl`.
4841-
patternBinding->setPattern(index, pattern,
4842-
patternBinding->getInitContext(index));
4841+
patternBinding->setPattern(index, pattern);
48434842

48444843
auto contextualPattern =
48454844
ContextualPattern::forPatternBindingDecl(patternBinding, index);

lib/Sema/CSSyntacticElement.cpp

Lines changed: 1 addition & 2 deletions
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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -880,7 +880,7 @@ bool TypeChecker::typeCheckPatternBinding(PatternBindingDecl *PBD,
880880
return true;
881881
}
882882

883-
PBD->setPattern(patternNumber, pattern, initContext);
883+
PBD->setPattern(patternNumber, pattern);
884884
PBD->setInit(patternNumber, init);
885885

886886
if (hadError)

lib/Sema/TypeCheckStorage.cpp

Lines changed: 1 addition & 2 deletions
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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4360,9 +4360,9 @@ class DeclDeserializer {
43604360
binding->setImplicit();
43614361

43624362
for (unsigned i = 0; i != patterns.size(); ++i) {
4363-
DeclContext *initContext = MF.getDeclContext(patterns[i].second);
4364-
binding->setPattern(i, patterns[i].first,
4365-
cast_or_null<PatternBindingInitializer>(initContext));
4363+
binding->setPattern(i, patterns[i].first);
4364+
if (auto *context = MF.getDeclContext(patterns[i].second))
4365+
binding->setInitContext(i, cast<PatternBindingInitializer>(context));
43664366
}
43674367

43684368
return binding;

0 commit comments

Comments
 (0)