@@ -450,8 +450,9 @@ class ResolvePattern : public ASTVisitor<ResolvePattern,
450450 if (ume->getName ().getBaseName ().isSpecial ())
451451 return nullptr ;
452452
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);
455456 }
456457
457458 // Member syntax 'T.Element' forms a pattern if 'T' is an enum and the
@@ -491,9 +492,9 @@ class ResolvePattern : public ASTVisitor<ResolvePattern,
491492 auto *base =
492493 TypeExpr::createForMemberDecl (repr, ude->getNameLoc (), enumDecl);
493494 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);
497498 }
498499
499500 // A DeclRef 'E' that refers to an enum element forms an EnumElementPattern.
@@ -506,9 +507,9 @@ class ResolvePattern : public ASTVisitor<ResolvePattern,
506507 auto enumTy = elt->getParentEnum ()->getDeclaredTypeInContext ();
507508 auto *base = TypeExpr::createImplicit (enumTy, Context);
508509
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);
512513 }
513514 Pattern *visitUnresolvedDeclRefExpr (UnresolvedDeclRefExpr *ude) {
514515 // FIXME: This shouldn't be needed. It is only necessary because of the
@@ -523,9 +524,9 @@ class ResolvePattern : public ASTVisitor<ResolvePattern,
523524 auto enumTy = enumDecl->getDeclaredTypeInContext ();
524525 auto *base = TypeExpr::createImplicit (enumTy, Context);
525526
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);
529530 }
530531
531532
@@ -617,9 +618,9 @@ class ResolvePattern : public ASTVisitor<ResolvePattern,
617618 assert (!repr->hasGenericArgList () && " should be handled above" );
618619
619620 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);
623624 }
624625};
625626
@@ -1061,13 +1062,9 @@ NullablePtr<Pattern> TypeChecker::trySimplifyExprPattern(ExprPattern *EP,
10611062 if (auto *NLE = dyn_cast<NilLiteralExpr>(EP->getSubExpr ())) {
10621063 if (patternTy->getOptionalObjectType ()) {
10631064 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 ());
10711068 } else {
10721069 // ...but for non-optional types it can never match! Diagnose it.
10731070 ctx.Diags
@@ -1388,14 +1385,12 @@ Pattern *TypeChecker::coercePatternToType(
13881385 if (numExtraOptionals > 0 ) {
13891386 Pattern *sub = IP;
13901387 auto extraOpts =
1391- llvm::drop_begin (inputTypeOptionals, castTypeOptionals.size ());
1388+ llvm::drop_end (inputTypeOptionals, castTypeOptionals.size ());
13921389 for (auto extraOptTy : llvm::reverse (extraOpts)) {
13931390 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);
13991394 }
14001395
14011396 P = sub;
0 commit comments