Skip to content

Commit acc8a7e

Browse files
authored
Merge pull request #64970 from hamishknight/patty
2 parents cd439ba + 1b0f3de commit acc8a7e

9 files changed

+31
-27
lines changed

include/swift/AST/Pattern.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,9 +365,11 @@ class NamedPattern : public Pattern {
365365
explicit NamedPattern(VarDecl *Var)
366366
: Pattern(PatternKind::Named), Var(Var) { }
367367

368-
static NamedPattern *createImplicit(ASTContext &Ctx, VarDecl *Var) {
368+
static NamedPattern *createImplicit(ASTContext &Ctx, VarDecl *Var,
369+
Type ty = Type()) {
369370
auto *NP = new (Ctx) NamedPattern(Var);
370371
NP->setImplicit();
372+
NP->setType(ty);
371373
return NP;
372374
}
373375

lib/AST/ASTVerifier.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -486,7 +486,7 @@ class Verifier : public ASTWalker {
486486
return true;
487487
}
488488
bool shouldVerifyChecked(Stmt *S) { return true; }
489-
bool shouldVerifyChecked(Pattern *S) { return S->hasType(); }
489+
bool shouldVerifyChecked(Pattern *S) { return true; }
490490
bool shouldVerifyChecked(Decl *S) { return true; }
491491

492492
// Only verify functions if they have bodies we can safely walk.
@@ -582,8 +582,14 @@ class Verifier : public ASTWalker {
582582
return;
583583
}
584584
}
585+
void verifyChecked(Pattern *P) {
586+
if (!P->hasType()) {
587+
Out << "pattern has no type\n";
588+
P->dump(Out);
589+
abort();
590+
}
591+
}
585592
void verifyChecked(Stmt *S) {}
586-
void verifyChecked(Pattern *P) { }
587593
void verifyChecked(Decl *D) {}
588594

589595
void verifyChecked(Type type) {

lib/Sema/CodeSynthesisDistributedActor.cpp

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -99,9 +99,7 @@ static VarDecl *addImplicitDistributedActorIDProperty(
9999
propDecl->copyFormalAccessFrom(nominal, /*sourceIsParentContext*/ true);
100100
propDecl->setInterfaceType(propertyType);
101101

102-
Pattern *propPat = NamedPattern::createImplicit(C, propDecl);
103-
propPat->setType(propertyType);
104-
102+
Pattern *propPat = NamedPattern::createImplicit(C, propDecl, propertyType);
105103
propPat = TypedPattern::createImplicit(C, propPat, propertyType);
106104
propPat->setType(propertyType);
107105

@@ -151,9 +149,7 @@ static VarDecl *addImplicitDistributedActorActorSystemProperty(
151149
propDecl->copyFormalAccessFrom(nominal, /*sourceIsParentContext*/ true);
152150
propDecl->setInterfaceType(propertyType);
153151

154-
Pattern *propPat = NamedPattern::createImplicit(C, propDecl);
155-
propPat->setType(propertyType);
156-
152+
Pattern *propPat = NamedPattern::createImplicit(C, propDecl, propertyType);
157153
propPat = TypedPattern::createImplicit(C, propPat, propertyType);
158154
propPat->setType(propertyType);
159155

lib/Sema/DerivedConformanceDifferentiable.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -419,8 +419,8 @@ getOrSynthesizeTangentVectorStruct(DerivedConformance &derived, Identifier id) {
419419
auto memberTanType =
420420
getTangentVectorInterfaceType(memberContextualType, parentDC);
421421
tangentProperty->setInterfaceType(memberTanType);
422-
Pattern *memberPattern = NamedPattern::createImplicit(C, tangentProperty);
423-
memberPattern->setType(memberTanType);
422+
Pattern *memberPattern =
423+
NamedPattern::createImplicit(C, tangentProperty, memberTanType);
424424
memberPattern =
425425
TypedPattern::createImplicit(C, memberPattern, memberTanType);
426426
memberPattern->setType(memberTanType);

lib/Sema/DerivedConformanceEquatableHashable.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -920,8 +920,8 @@ static ValueDecl *deriveHashable_hashValue(DerivedConformance &derived) {
920920
derived.Nominal->isActor())
921921
hashValueDecl->getAttrs().add(new (C) NonisolatedAttr(/*IsImplicit*/ true));
922922

923-
Pattern *hashValuePat = NamedPattern::createImplicit(C, hashValueDecl);
924-
hashValuePat->setType(intType);
923+
Pattern *hashValuePat =
924+
NamedPattern::createImplicit(C, hashValueDecl, intType);
925925
hashValuePat = TypedPattern::createImplicit(C, hashValuePat, intType);
926926
hashValuePat->setType(intType);
927927

lib/Sema/DerivedConformances.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -554,8 +554,8 @@ DerivedConformance::declareDerivedProperty(SynthesizedIntroducer intro,
554554
propDecl->copyFormalAccessFrom(Nominal, /*sourceIsParentContext*/ true);
555555
propDecl->setInterfaceType(propertyInterfaceType);
556556

557-
Pattern *propPat = NamedPattern::createImplicit(Context, propDecl);
558-
propPat->setType(propertyContextType);
557+
Pattern *propPat =
558+
NamedPattern::createImplicit(Context, propDecl, propertyContextType);
559559

560560
propPat = TypedPattern::createImplicit(Context, propPat, propertyContextType);
561561
propPat->setType(propertyContextType);
@@ -759,8 +759,7 @@ DeclRefExpr *DerivedConformance::convertEnumToIndex(SmallVectorImpl<ASTNode> &st
759759
indexVar->setImplicit();
760760

761761
// generate: var indexVar
762-
Pattern *indexPat = NamedPattern::createImplicit(C, indexVar);
763-
indexPat->setType(intType);
762+
Pattern *indexPat = NamedPattern::createImplicit(C, indexVar, intType);
764763
indexPat = TypedPattern::createImplicit(C, indexPat, intType);
765764
indexPat->setType(intType);
766765
auto *indexBind = PatternBindingDecl::createImplicit(

lib/Sema/PCMacro.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -518,7 +518,7 @@ class Instrumenter : InstrumenterBase {
518518
VD->setInterfaceType(MaybeLoadInitExpr->getType()->mapTypeOutOfContext());
519519
VD->setImplicit();
520520

521-
NamedPattern *NP = NamedPattern::createImplicit(Context, VD);
521+
NamedPattern *NP = NamedPattern::createImplicit(Context, VD, VD->getType());
522522
PatternBindingDecl *PBD = PatternBindingDecl::createImplicit(
523523
Context, StaticSpellingKind::None, NP, MaybeLoadInitExpr, TypeCheckDC);
524524

lib/Sema/PlaygroundTransform.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -760,7 +760,7 @@ class Instrumenter : InstrumenterBase {
760760
VD->setInterfaceType(MaybeLoadInitExpr->getType()->mapTypeOutOfContext());
761761
VD->setImplicit();
762762

763-
NamedPattern *NP = NamedPattern::createImplicit(Context, VD);
763+
NamedPattern *NP = NamedPattern::createImplicit(Context, VD, VD->getType());
764764
PatternBindingDecl *PBD = PatternBindingDecl::createImplicit(
765765
Context, StaticSpellingKind::None, NP, MaybeLoadInitExpr, TypeCheckDC);
766766

lib/Sema/TypeCheckStorage.cpp

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1485,8 +1485,7 @@ synthesizeLazyGetterBody(AccessorDecl *Get, VarDecl *VD, VarDecl *Storage,
14851485
Tmp1VD->setInterfaceType(VD->getValueInterfaceType());
14861486
Tmp1VD->setImplicit();
14871487

1488-
auto *Named = NamedPattern::createImplicit(Ctx, Tmp1VD);
1489-
Named->setType(Tmp1VD->getType());
1488+
auto *Named = NamedPattern::createImplicit(Ctx, Tmp1VD, Tmp1VD->getType());
14901489
auto *Let =
14911490
BindingPattern::createImplicit(Ctx, VarDecl::Introducer::Let, Named);
14921491
Let->setType(Named->getType());
@@ -1551,7 +1550,8 @@ synthesizeLazyGetterBody(AccessorDecl *Get, VarDecl *VD, VarDecl *Storage,
15511550
InitValue = new (Ctx) LazyInitializerExpr(InitValue);
15521551
InitValue->setType(initType);
15531552

1554-
Pattern *Tmp2PBDPattern = NamedPattern::createImplicit(Ctx, Tmp2VD);
1553+
Pattern *Tmp2PBDPattern =
1554+
NamedPattern::createImplicit(Ctx, Tmp2VD, Tmp2VD->getType());
15551555
Tmp2PBDPattern =
15561556
TypedPattern::createImplicit(Ctx, Tmp2PBDPattern, Tmp2VD->getType());
15571557

@@ -1794,7 +1794,8 @@ synthesizeObservedSetterBody(AccessorDecl *Set, TargetImpl target,
17941794
SourceLoc(), Ctx.getIdentifier("tmp"), Set);
17951795
OldValue->setImplicit();
17961796
OldValue->setInterfaceType(VD->getValueInterfaceType());
1797-
auto *tmpPattern = NamedPattern::createImplicit(Ctx, OldValue);
1797+
auto *tmpPattern =
1798+
NamedPattern::createImplicit(Ctx, OldValue, OldValue->getType());
17981799
auto *tmpPBD = PatternBindingDecl::createImplicit(
17991800
Ctx, StaticSpellingKind::None, tmpPattern, OldValueExpr, Set);
18001801
SetterBody.push_back(tmpPBD);
@@ -2619,8 +2620,8 @@ LazyStoragePropertyRequest::evaluate(Evaluator &evaluator,
26192620

26202621
// Create the pattern binding decl for the storage decl. This will get
26212622
// default initialized to nil.
2622-
Pattern *PBDPattern = NamedPattern::createImplicit(Context, Storage);
2623-
PBDPattern->setType(StorageTy);
2623+
Pattern *PBDPattern =
2624+
NamedPattern::createImplicit(Context, Storage, StorageTy);
26242625
PBDPattern = TypedPattern::createImplicit(Context, PBDPattern, StorageTy);
26252626
auto *InitExpr = new (Context) NilLiteralExpr(SourceLoc(), /*Implicit=*/true);
26262627
InitExpr->setType(Storage->getType());
@@ -3032,8 +3033,8 @@ PropertyWrapperInitializerInfoRequest::evaluate(Evaluator &evaluator,
30323033
PropertyWrapperValuePlaceholderExpr *wrappedValue = nullptr;
30333034

30343035
auto createPBD = [&](VarDecl *singleVar) -> PatternBindingDecl * {
3035-
Pattern *pattern = NamedPattern::createImplicit(ctx, singleVar);
3036-
pattern->setType(singleVar->getType());
3036+
Pattern *pattern =
3037+
NamedPattern::createImplicit(ctx, singleVar, singleVar->getType());
30373038
pattern = TypedPattern::createImplicit(ctx, pattern, singleVar->getType());
30383039
PatternBindingDecl *pbd = PatternBindingDecl::createImplicit(
30393040
ctx, var->getCorrectStaticSpelling(), pattern, /*init*/nullptr,

0 commit comments

Comments
 (0)