@@ -120,8 +120,9 @@ TypeRepr *TypeRepr::getWithoutParens() const {
120
120
}
121
121
122
122
bool TypeRepr::isSimpleUnqualifiedIdentifier (Identifier identifier) const {
123
- if (auto *identTR = dyn_cast<SimpleIdentTypeRepr>(this )) {
124
- if (identTR->getNameRef ().getBaseIdentifier () == identifier) {
123
+ if (auto *unqualIdentTR = dyn_cast<UnqualifiedIdentTypeRepr>(this )) {
124
+ if (!unqualIdentTR->hasGenericArgList () &&
125
+ unqualIdentTR->getNameRef ().getBaseIdentifier () == identifier) {
125
126
return true ;
126
127
}
127
128
}
@@ -130,8 +131,9 @@ bool TypeRepr::isSimpleUnqualifiedIdentifier(Identifier identifier) const {
130
131
}
131
132
132
133
bool TypeRepr::isSimpleUnqualifiedIdentifier (StringRef str) const {
133
- if (auto *identTR = dyn_cast<SimpleIdentTypeRepr>(this )) {
134
- if (identTR->getNameRef ().getBaseIdentifier ().is (str)) {
134
+ if (auto *unqualIdentTR = dyn_cast<UnqualifiedIdentTypeRepr>(this )) {
135
+ if (!unqualIdentTR->hasGenericArgList () &&
136
+ unqualIdentTR->getNameRef ().getBaseIdentifier ().is (str)) {
135
137
return true ;
136
138
}
137
139
}
@@ -241,17 +243,16 @@ unsigned DeclRefTypeRepr::getNumGenericArgs() const {
241
243
}
242
244
243
245
bool DeclRefTypeRepr::hasGenericArgList () const {
244
- return Bits.DeclRefTypeRepr .NumGenericArgs ||
245
- Bits.DeclRefTypeRepr .HasAngleBrackets ;
246
+ return (getNumGenericArgs () != 0 ) || hasAngleBrackets ();
246
247
}
247
248
248
249
ArrayRef<TypeRepr *> DeclRefTypeRepr::getGenericArgs () const {
249
250
if (getNumGenericArgs () == 0 ) {
250
251
return {};
251
252
}
252
253
253
- if (auto *genericITR = dyn_cast<GenericIdentTypeRepr >(this )) {
254
- return genericITR ->getGenericArgs ();
254
+ if (auto *unqualIdentTR = dyn_cast<UnqualifiedIdentTypeRepr >(this )) {
255
+ return unqualIdentTR ->getGenericArgs ();
255
256
}
256
257
257
258
return cast<MemberTypeRepr>(this )->getGenericArgs ();
@@ -266,8 +267,8 @@ SourceRange DeclRefTypeRepr::getAngleBrackets() const {
266
267
return SourceRange ();
267
268
}
268
269
269
- if (auto *genericITR = dyn_cast<GenericIdentTypeRepr >(this )) {
270
- return genericITR ->getAngleBrackets ();
270
+ if (auto *unqualIdentTR = dyn_cast<UnqualifiedIdentTypeRepr >(this )) {
271
+ return unqualIdentTR ->getAngleBrackets ();
271
272
}
272
273
273
274
return cast<MemberTypeRepr>(this )->getAngleBrackets ();
@@ -277,6 +278,15 @@ SourceLoc DeclRefTypeRepr::getLocImpl() const {
277
278
return NameLoc.getBaseNameLoc ();
278
279
}
279
280
281
+ SourceLoc DeclRefTypeRepr::getEndLocImpl () const {
282
+ const auto range = getAngleBrackets ();
283
+ if (range.isValid ()) {
284
+ return range.End ;
285
+ }
286
+
287
+ return getNameLoc ().getEndLoc ();
288
+ }
289
+
280
290
static void printTypeRepr (const TypeRepr *TyR, ASTPrinter &Printer,
281
291
const PrintOptions &Opts) {
282
292
if (TyR == nullptr )
@@ -476,46 +486,60 @@ TupleTypeRepr *TupleTypeRepr::createEmpty(const ASTContext &C,
476
486
return create (C, {}, Parens);
477
487
}
478
488
489
+ UnqualifiedIdentTypeRepr::UnqualifiedIdentTypeRepr (DeclNameRef Name,
490
+ DeclNameLoc NameLoc)
491
+ : DeclRefTypeRepr(TypeReprKind::UnqualifiedIdent, Name, NameLoc,
492
+ /* NumGenericArgs=*/ 0 ,
493
+ /* HasAngleBrackets=*/ false ) {}
494
+
495
+ UnqualifiedIdentTypeRepr::UnqualifiedIdentTypeRepr (
496
+ DeclNameRef Name, DeclNameLoc NameLoc, ArrayRef<TypeRepr *> GenericArgs,
497
+ SourceRange AngleBrackets)
498
+ : DeclRefTypeRepr(TypeReprKind::UnqualifiedIdent, Name, NameLoc,
499
+ /* NumGenericArgs=*/ GenericArgs.size(),
500
+ /* HasAngleBrackets=*/ AngleBrackets.isValid()) {
501
+ if (AngleBrackets.isValid ()) {
502
+ *getTrailingObjects<SourceRange>() = AngleBrackets;
503
+ }
504
+
505
+ #ifndef NDEBUG
506
+ for (auto *repr : GenericArgs) {
507
+ assert (repr);
508
+ }
509
+ #endif
510
+
511
+ if (!GenericArgs.empty ()) {
512
+ std::uninitialized_copy (GenericArgs.begin (), GenericArgs.end (),
513
+ getTrailingObjects<TypeRepr *>());
514
+ }
515
+ }
516
+
479
517
UnqualifiedIdentTypeRepr *UnqualifiedIdentTypeRepr::create (const ASTContext &C,
480
518
DeclNameLoc NameLoc,
481
519
DeclNameRef Name) {
482
- return new (C) SimpleIdentTypeRepr (NameLoc, Name );
520
+ return new (C) UnqualifiedIdentTypeRepr (Name, NameLoc );
483
521
}
484
522
485
523
UnqualifiedIdentTypeRepr *UnqualifiedIdentTypeRepr::create (
486
524
const ASTContext &C, DeclNameLoc NameLoc, DeclNameRef Name,
487
525
ArrayRef<TypeRepr *> GenericArgs, SourceRange AngleBrackets) {
488
- if (AngleBrackets.isInvalid () && GenericArgs.empty ()) {
489
- return new (C) SimpleIdentTypeRepr (NameLoc, Name);
490
- }
491
-
492
- return GenericIdentTypeRepr::create (C, NameLoc, Name, GenericArgs,
493
- AngleBrackets);
526
+ const auto size = totalSizeToAlloc<TypeRepr *, SourceRange>(
527
+ GenericArgs.size (), AngleBrackets.isValid () ? 1 : 0 );
528
+ auto *mem = C.Allocate (size, alignof (UnqualifiedIdentTypeRepr));
529
+ return new (mem)
530
+ UnqualifiedIdentTypeRepr (Name, NameLoc, GenericArgs, AngleBrackets);
494
531
}
495
532
496
- GenericIdentTypeRepr::GenericIdentTypeRepr (DeclNameLoc Loc, DeclNameRef Id,
497
- ArrayRef<TypeRepr *> GenericArgs,
498
- SourceRange AngleBrackets)
499
- : UnqualifiedIdentTypeRepr(TypeReprKind::GenericIdent, Loc, Id,
500
- /* NumGenericArgs=*/ GenericArgs.size(),
501
- /* HasAngleBrackets=*/ AngleBrackets.isValid()),
502
- AngleBrackets(AngleBrackets) {
503
- #ifndef NDEBUG
504
- for (auto arg : GenericArgs)
505
- assert (arg != nullptr );
506
- #endif
507
- std::uninitialized_copy (GenericArgs.begin (), GenericArgs.end (),
508
- getTrailingObjects<TypeRepr *>());
533
+ ArrayRef<TypeRepr *> UnqualifiedIdentTypeRepr::getGenericArgs () const {
534
+ return {getTrailingObjects<TypeRepr *>(), getNumGenericArgs ()};
509
535
}
510
536
511
- GenericIdentTypeRepr *GenericIdentTypeRepr::create (const ASTContext &C,
512
- DeclNameLoc Loc,
513
- DeclNameRef Id,
514
- ArrayRef<TypeRepr*> GenericArgs,
515
- SourceRange AngleBrackets) {
516
- auto size = totalSizeToAlloc<TypeRepr*>(GenericArgs.size ());
517
- auto mem = C.Allocate (size, alignof (GenericIdentTypeRepr));
518
- return new (mem) GenericIdentTypeRepr (Loc, Id, GenericArgs, AngleBrackets);
537
+ SourceRange UnqualifiedIdentTypeRepr::getAngleBrackets () const {
538
+ if (hasAngleBrackets ()) {
539
+ return *getTrailingObjects<SourceRange>();
540
+ }
541
+
542
+ return SourceRange ();
519
543
}
520
544
521
545
MemberTypeRepr::MemberTypeRepr (TypeRepr *Base, DeclNameRef Name,
@@ -532,6 +556,12 @@ MemberTypeRepr::MemberTypeRepr(TypeRepr *Base, DeclNameRef Name,
532
556
*getTrailingObjects<SourceRange>() = AngleBrackets;
533
557
}
534
558
559
+ #ifndef NDEBUG
560
+ for (auto *repr : GenericArgs) {
561
+ assert (repr);
562
+ }
563
+ #endif
564
+
535
565
if (!GenericArgs.empty ()) {
536
566
std::uninitialized_copy (GenericArgs.begin (), GenericArgs.end (),
537
567
getTrailingObjects<TypeRepr *>());
@@ -589,15 +619,6 @@ SourceLoc MemberTypeRepr::getStartLocImpl() const {
589
619
return getBase ()->getStartLoc ();
590
620
}
591
621
592
- SourceLoc MemberTypeRepr::getEndLocImpl () const {
593
- const auto range = getAngleBrackets ();
594
- if (range.isValid ()) {
595
- return range.End ;
596
- }
597
-
598
- return getNameLoc ().getEndLoc ();
599
- }
600
-
601
622
PackTypeRepr::PackTypeRepr (SourceLoc keywordLoc, SourceRange braceLocs,
602
623
ArrayRef<TypeRepr*> elements)
603
624
: TypeRepr(TypeReprKind::Pack),
0 commit comments