@@ -450,8 +450,9 @@ class ResolvePattern : public ASTVisitor<ResolvePattern,
450
450
if (ume->getName ().getBaseName ().isSpecial ())
451
451
return nullptr ;
452
452
453
- return new (Context) EnumElementPattern (ume->getDotLoc (), ume->getNameLoc (),
454
- ume->getName (), nullptr , ume, DC);
453
+ return EnumElementPattern::create (ume->getDotLoc (), ume->getNameLoc (),
454
+ ume->getName (), ume,
455
+ /* subPattern*/ nullptr , DC);
455
456
}
456
457
457
458
// Member syntax 'T.Element' forms a pattern if 'T' is an enum and the
@@ -491,9 +492,9 @@ class ResolvePattern : public ASTVisitor<ResolvePattern,
491
492
auto *base =
492
493
TypeExpr::createForMemberDecl (repr, ude->getNameLoc (), enumDecl);
493
494
base->setType (MetatypeType::get (ty));
494
- return new (Context)
495
- EnumElementPattern (base, ude->getDotLoc (), ude-> getNameLoc () ,
496
- ude-> getName (), referencedElement, nullptr , DC);
495
+ return EnumElementPattern::create (base, ude-> getDotLoc (), ude-> getNameLoc (),
496
+ ude->getName (), referencedElement ,
497
+ /* subPattern */ nullptr , DC);
497
498
}
498
499
499
500
// A DeclRef 'E' that refers to an enum element forms an EnumElementPattern.
@@ -506,9 +507,9 @@ class ResolvePattern : public ASTVisitor<ResolvePattern,
506
507
auto enumTy = elt->getParentEnum ()->getDeclaredTypeInContext ();
507
508
auto *base = TypeExpr::createImplicit (enumTy, Context);
508
509
509
- return new (Context)
510
- EnumElementPattern (base, SourceLoc (), de-> getNameLoc () ,
511
- elt-> createNameRef (), elt, nullptr , DC);
510
+ return EnumElementPattern::create (base, SourceLoc (), de-> getNameLoc (),
511
+ elt-> createNameRef (), elt ,
512
+ /* subPattern */ nullptr , DC);
512
513
}
513
514
Pattern *visitUnresolvedDeclRefExpr (UnresolvedDeclRefExpr *ude) {
514
515
// FIXME: This shouldn't be needed. It is only necessary because of the
@@ -523,9 +524,9 @@ class ResolvePattern : public ASTVisitor<ResolvePattern,
523
524
auto enumTy = enumDecl->getDeclaredTypeInContext ();
524
525
auto *base = TypeExpr::createImplicit (enumTy, Context);
525
526
526
- return new (Context)
527
- EnumElementPattern (base, SourceLoc (), ude->getNameLoc () ,
528
- ude-> getName (), referencedElement, nullptr , DC);
527
+ return EnumElementPattern::create (base, SourceLoc (), ude-> getNameLoc (),
528
+ ude->getName (), referencedElement ,
529
+ /* subPattern */ nullptr , DC);
529
530
}
530
531
531
532
@@ -617,9 +618,9 @@ class ResolvePattern : public ASTVisitor<ResolvePattern,
617
618
assert (!repr->hasGenericArgList () && " should be handled above" );
618
619
619
620
auto *subPattern = composeTupleOrParenPattern (ce->getArgs ());
620
- return new (Context) EnumElementPattern (
621
- baseTE, SourceLoc (), repr-> getNameLoc (), repr->getNameRef (),
622
- referencedElement, subPattern, DC);
621
+ return EnumElementPattern::create (baseTE, SourceLoc (), repr-> getNameLoc (),
622
+ repr->getNameRef (), referencedElement ,
623
+ subPattern, DC);
623
624
}
624
625
};
625
626
@@ -1061,13 +1062,9 @@ NullablePtr<Pattern> TypeChecker::trySimplifyExprPattern(ExprPattern *EP,
1061
1062
if (auto *NLE = dyn_cast<NilLiteralExpr>(EP->getSubExpr ())) {
1062
1063
if (patternTy->getOptionalObjectType ()) {
1063
1064
auto *NoneEnumElement = ctx.getOptionalNoneDecl ();
1064
- auto *BaseTE = TypeExpr::createImplicit (patternTy, ctx);
1065
- auto *EEP = new (ctx)
1066
- EnumElementPattern (BaseTE, NLE->getLoc (), DeclNameLoc (NLE->getLoc ()),
1067
- NoneEnumElement->createNameRef (), NoneEnumElement,
1068
- nullptr , EP->getDeclContext ());
1069
- EEP->setType (patternTy);
1070
- return EEP;
1065
+ return EnumElementPattern::createImplicit (
1066
+ patternTy, NLE->getLoc (), DeclNameLoc (NLE->getLoc ()), NoneEnumElement,
1067
+ /* subPattern*/ nullptr , EP->getDeclContext ());
1071
1068
} else {
1072
1069
// ...but for non-optional types it can never match! Diagnose it.
1073
1070
ctx.Diags
@@ -1388,14 +1385,12 @@ Pattern *TypeChecker::coercePatternToType(
1388
1385
if (numExtraOptionals > 0 ) {
1389
1386
Pattern *sub = IP;
1390
1387
auto extraOpts =
1391
- llvm::drop_begin (inputTypeOptionals, castTypeOptionals.size ());
1388
+ llvm::drop_end (inputTypeOptionals, castTypeOptionals.size ());
1392
1389
for (auto extraOptTy : llvm::reverse (extraOpts)) {
1393
1390
auto some = Context.getOptionalSomeDecl ();
1394
- auto *base = TypeExpr::createImplicit (extraOptTy, Context);
1395
- sub = new (Context) EnumElementPattern (
1396
- base, IP->getStartLoc (), DeclNameLoc (IP->getEndLoc ()),
1397
- some->createNameRef (), nullptr , sub, dc);
1398
- sub->setImplicit ();
1391
+ sub = EnumElementPattern::createImplicit (extraOptTy, IP->getStartLoc (),
1392
+ DeclNameLoc (IP->getEndLoc ()),
1393
+ some, sub, dc);
1399
1394
}
1400
1395
1401
1396
P = sub;
0 commit comments