Skip to content

Commit 0342855

Browse files
committed
[NFC] Debride Pattern.h of Implicit Tri-State
Remove all of this in favor of explicit constructors to preserve the one-liners, or distribute the setImplicit() calls to the callsites if necessary.
1 parent 8280606 commit 0342855

18 files changed

+159
-179
lines changed

include/swift/AST/Pattern.h

Lines changed: 91 additions & 87 deletions
Large diffs are not rendered by default.

lib/AST/Pattern.cpp

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -367,33 +367,29 @@ Identifier NamedPattern::getBoundName() const {
367367

368368
/// Allocate a new pattern that matches a tuple.
369369
TuplePattern *TuplePattern::create(ASTContext &C, SourceLoc lp,
370-
ArrayRef<TuplePatternElt> elts, SourceLoc rp,
371-
Optional<bool> implicit) {
372-
if (!implicit.hasValue())
373-
implicit = !lp.isValid();
374-
370+
ArrayRef<TuplePatternElt> elts,
371+
SourceLoc rp) {
375372
unsigned n = elts.size();
376373
void *buffer = C.Allocate(totalSizeToAlloc<TuplePatternElt>(n),
377374
alignof(TuplePattern));
378-
TuplePattern *pattern = ::new (buffer) TuplePattern(lp, n, rp, *implicit);
375+
TuplePattern *pattern = ::new (buffer) TuplePattern(lp, n, rp);
379376
std::uninitialized_copy(elts.begin(), elts.end(),
380377
pattern->getTrailingObjects<TuplePatternElt>());
381378
return pattern;
382379
}
383380

384381
Pattern *TuplePattern::createSimple(ASTContext &C, SourceLoc lp,
385382
ArrayRef<TuplePatternElt> elements,
386-
SourceLoc rp,
387-
Optional<bool> implicit) {
383+
SourceLoc rp) {
388384
assert(lp.isValid() == rp.isValid());
389385

390386
if (elements.size() == 1 &&
391387
elements[0].getPattern()->getBoundName().empty()) {
392388
auto &first = const_cast<TuplePatternElt&>(elements.front());
393-
return new (C) ParenPattern(lp, first.getPattern(), rp, implicit);
389+
return new (C) ParenPattern(lp, first.getPattern(), rp);
394390
}
395391

396-
return create(C, lp, elements, rp, implicit);
392+
return create(C, lp, elements, rp);
397393
}
398394

399395
SourceRange TuplePattern::getSourceRange() const {
@@ -406,11 +402,8 @@ SourceRange TuplePattern::getSourceRange() const {
406402
Fields.back().getPattern()->getEndLoc() };
407403
}
408404

409-
TypedPattern::TypedPattern(Pattern *pattern, TypeRepr *tr,
410-
Optional<bool> implicit)
405+
TypedPattern::TypedPattern(Pattern *pattern, TypeRepr *tr)
411406
: Pattern(PatternKind::Typed), SubPattern(pattern), PatTypeRepr(tr) {
412-
if (implicit ? *implicit : tr && !tr->getSourceRange().isValid())
413-
setImplicit();
414407
Bits.TypedPattern.IsPropagatedType = false;
415408
}
416409

@@ -450,13 +443,10 @@ SourceRange TypedPattern::getSourceRange() const {
450443

451444
/// Construct an ExprPattern.
452445
ExprPattern::ExprPattern(Expr *e, bool isResolved, Expr *matchExpr,
453-
VarDecl *matchVar,
454-
Optional<bool> implicit)
446+
VarDecl *matchVar)
455447
: Pattern(PatternKind::Expr), SubExprAndIsResolved(e, isResolved),
456448
MatchExpr(matchExpr), MatchVar(matchVar) {
457449
assert(!matchExpr || e->isImplicit() == matchExpr->isImplicit());
458-
if (implicit.hasValue() ? *implicit : e->isImplicit())
459-
setImplicit();
460450
}
461451

462452
SourceLoc ExprPattern::getLoc() const {

lib/Parse/ParseExpr.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2597,7 +2597,7 @@ parseClosureSignatureIfPresent(SourceRange &bracketRange,
25972597
VD->getAttrs().add(new (Context) ReferenceOwnershipAttr(
25982598
SourceRange(ownershipLocStart, ownershipLocEnd), ownershipKind));
25992599

2600-
auto pattern = new (Context) NamedPattern(VD, /*implicit*/true);
2600+
auto pattern = NamedPattern::createImplicit(Context, VD);
26012601

26022602
auto *PBD = PatternBindingDecl::create(
26032603
Context, /*StaticLoc*/ SourceLoc(), StaticSpellingKind::None,

lib/Parse/ParsePattern.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -968,7 +968,7 @@ ParserResult<Pattern> Parser::parsePattern() {
968968
auto VD = new (Context) VarDecl(
969969
/*IsStatic*/false, introducer, /*IsCaptureList*/false,
970970
consumeToken(tok::kw__), Identifier(), CurDeclContext);
971-
return makeParserResult(new (Context) NamedPattern(VD, /*implicit*/true));
971+
return makeParserResult(NamedPattern::createImplicit(Context, VD));
972972
}
973973
PatternCtx.setCreateSyntax(SyntaxKind::WildcardPattern);
974974
return makeParserResult(new (Context) AnyPattern(consumeToken(tok::kw__)));

lib/Parse/ParseStmt.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1093,7 +1093,8 @@ static void parseGuardedPattern(Parser &P, GuardedPattern &result,
10931093
var->setImplicit();
10941094
auto namePattern = new (P.Context) NamedPattern(var);
10951095
auto varPattern = new (P.Context) VarPattern(loc, /*isLet*/true,
1096-
namePattern, /*implicit*/true);
1096+
namePattern);
1097+
varPattern->setImplicit();
10971098
patternResult = makeParserResult(varPattern);
10981099
}
10991100

@@ -1483,7 +1484,7 @@ Parser::parseStmtConditionElement(SmallVectorImpl<StmtConditionElement> &result,
14831484

14841485
if (ThePattern.isNonNull()) {
14851486
auto *P = new (Context) VarPattern(IntroducerLoc, wasLet,
1486-
ThePattern.get(), /*impl*/false);
1487+
ThePattern.get());
14871488
ThePattern = makeParserResult(Status, P);
14881489
}
14891490

lib/Sema/BuilderTransform.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -895,7 +895,7 @@ class BuilderClosureRewriter
895895

896896
// Form a new pattern binding to bind the temporary variable to the
897897
// transformed expression.
898-
auto pattern = new (ctx) NamedPattern(temporaryVar,/*implicit=*/true);
898+
auto pattern = NamedPattern::createImplicit(ctx, temporaryVar);
899899
pattern->setType(temporaryVar->getType());
900900

901901
auto pbd = PatternBindingDecl::create(

lib/Sema/DerivedConformanceCodable.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -596,8 +596,7 @@ deriveBodyEncodable_encode(AbstractFunctionDecl *encodeDecl, void *) {
596596

597597
// Full `let container = encoder.container(keyedBy: CodingKeys.self)`
598598
// binding.
599-
auto *containerPattern = new (C) NamedPattern(containerDecl,
600-
/*implicit=*/true);
599+
auto *containerPattern = NamedPattern::createImplicit(C, containerDecl);
601600
auto *bindingDecl = PatternBindingDecl::createImplicit(
602601
C, StaticSpellingKind::None, containerPattern, callExpr, funcDC);
603602
statements.push_back(bindingDecl);
@@ -815,8 +814,7 @@ deriveBodyDecodable_init(AbstractFunctionDecl *initDecl, void *) {
815814

816815
// Full `let container = decoder.container(keyedBy: CodingKeys.self)`
817816
// binding.
818-
auto *containerPattern = new (C) NamedPattern(containerDecl,
819-
/*implicit=*/true);
817+
auto *containerPattern = NamedPattern::createImplicit(C, containerDecl);
820818
auto *bindingDecl = PatternBindingDecl::createImplicit(
821819
C, StaticSpellingKind::None, containerPattern, tryExpr, funcDC);
822820
statements.push_back(bindingDecl);

lib/Sema/DerivedConformanceCodingKey.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,8 +298,7 @@ deriveBodyCodingKey_init_stringValue(AbstractFunctionDecl *initDecl, void *) {
298298
/*case body var decls*/ None));
299299
}
300300

301-
auto *anyPat = new (C) AnyPattern(SourceLoc());
302-
anyPat->setImplicit();
301+
auto *anyPat = AnyPattern::createImplicit(C);
303302
auto dfltLabelItem = CaseLabelItem::getDefault(anyPat);
304303

305304
auto *dfltReturnStmt = new (C) FailStmt(SourceLoc(), SourceLoc());

lib/Sema/DerivedConformanceComparable.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -172,9 +172,8 @@ deriveBodyComparable_enum_hasAssociatedValues_lt(AbstractFunctionDecl *ltDecl, v
172172
}
173173

174174
// case (.<elt>(let l0, let l1, ...), .<elt>(let r0, let r1, ...))
175-
auto caseTuplePattern = TuplePattern::create(C, SourceLoc(), {
176-
TuplePatternElt(lhsElemPat), TuplePatternElt(rhsElemPat) },
177-
SourceLoc());
175+
auto caseTuplePattern = TuplePattern::createImplicit(C, {
176+
TuplePatternElt(lhsElemPat), TuplePatternElt(rhsElemPat) });
178177
caseTuplePattern->setImplicit();
179178

180179
auto labelItem = CaseLabelItem(caseTuplePattern);
@@ -215,8 +214,7 @@ deriveBodyComparable_enum_hasAssociatedValues_lt(AbstractFunctionDecl *ltDecl, v
215214
// We only generate this if the enum has more than one case. If it has exactly
216215
// one case, then that single case statement is already exhaustive.
217216
if (elementCount > 1) {
218-
auto defaultPattern = new (C) AnyPattern(SourceLoc());
219-
defaultPattern->setImplicit();
217+
auto defaultPattern = AnyPattern::createImplicit(C);
220218
auto defaultItem = CaseLabelItem::getDefault(defaultPattern);
221219
auto body = deriveBodyComparable_enum_noAssociatedValues_lt(ltDecl, nullptr).first;
222220
cases.push_back(CaseStmt::create(C, CaseParentKind::Switch, SourceLoc(),

lib/Sema/DerivedConformanceDifferentiable.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ getOrSynthesizeTangentVectorStruct(DerivedConformance &derived, Identifier id) {
376376
auto memberAssocContextualType =
377377
parentDC->mapTypeIntoContext(memberAssocInterfaceType);
378378
newMember->setInterfaceType(memberAssocInterfaceType);
379-
Pattern *memberPattern = new (C) NamedPattern(newMember, /*implicit*/ true);
379+
Pattern *memberPattern = NamedPattern::createImplicit(C, newMember);
380380
memberPattern->setType(memberAssocContextualType);
381381
memberPattern = TypedPattern::createImplicit(C, memberPattern,
382382
memberAssocContextualType);

0 commit comments

Comments
 (0)