@@ -6289,8 +6289,7 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
6289
6289
6290
6290
void visitOpenedArchetypeType (OpenedArchetypeType *T) {
6291
6291
if (auto parent = T->getParent ()) {
6292
- visitParentType (parent);
6293
- printArchetypeCommon (T, getAbstractTypeParamDecl (T));
6292
+ printArchetypeCommon (T);
6294
6293
return ;
6295
6294
}
6296
6295
@@ -6299,8 +6298,20 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
6299
6298
visit (T->getExistentialType ());
6300
6299
}
6301
6300
6302
- void printArchetypeCommon (ArchetypeType *T,
6303
- const AbstractTypeParamDecl *Decl) {
6301
+ void printDependentMember (DependentMemberType *T) {
6302
+ if (auto *const Assoc = T->getAssocType ()) {
6303
+ if (Options.ProtocolQualifiedDependentMemberTypes ) {
6304
+ Printer << " [" ;
6305
+ Printer.printName (Assoc->getProtocol ()->getName ());
6306
+ Printer << " ]" ;
6307
+ }
6308
+ Printer.printTypeRef (T, Assoc, T->getName ());
6309
+ } else {
6310
+ Printer.printName (T->getName ());
6311
+ }
6312
+ }
6313
+
6314
+ void printArchetypeCommon (ArchetypeType *T) {
6304
6315
if (Options.AlternativeTypeNames ) {
6305
6316
auto found = Options.AlternativeTypeNames ->find (T->getCanonicalType ());
6306
6317
if (found != Options.AlternativeTypeNames ->end ()) {
@@ -6309,36 +6320,22 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
6309
6320
}
6310
6321
}
6311
6322
6312
- const auto Name = T->getName ();
6313
- if (Name.empty ()) {
6314
- Printer << " <anonymous>" ;
6315
- } else if (Decl) {
6316
- Printer.printTypeRef (T, Decl, Name);
6323
+ auto interfaceType = T->getInterfaceType ();
6324
+ if (auto *dependentMember = interfaceType->getAs <DependentMemberType>()) {
6325
+ visitParentType (T->getParent ());
6326
+ printDependentMember (dependentMember);
6317
6327
} else {
6318
- Printer. printName (Name );
6328
+ visit (interfaceType );
6319
6329
}
6320
6330
}
6321
6331
6322
- static AbstractTypeParamDecl *getAbstractTypeParamDecl (ArchetypeType *T) {
6323
- if (auto gp = T->getInterfaceType ()->getAs <GenericTypeParamType>()) {
6324
- return gp->getDecl ();
6325
- }
6326
-
6327
- auto depMemTy = T->getInterfaceType ()->castTo <DependentMemberType>();
6328
- return depMemTy->getAssocType ();
6329
- }
6330
-
6331
6332
void visitPrimaryArchetypeType (PrimaryArchetypeType *T) {
6332
- if (auto parent = T->getParent ())
6333
- visitParentType (parent);
6334
-
6335
- printArchetypeCommon (T, getAbstractTypeParamDecl (T));
6333
+ printArchetypeCommon (T);
6336
6334
}
6337
6335
6338
6336
void visitOpaqueTypeArchetypeType (OpaqueTypeArchetypeType *T) {
6339
6337
if (auto parent = T->getParent ()) {
6340
- visitParentType (parent);
6341
- printArchetypeCommon (T, getAbstractTypeParamDecl (T));
6338
+ printArchetypeCommon (T);
6342
6339
return ;
6343
6340
}
6344
6341
@@ -6415,9 +6412,7 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
6415
6412
}
6416
6413
6417
6414
void visitSequenceArchetypeType (SequenceArchetypeType *T) {
6418
- if (auto parent = T->getParent ())
6419
- visitParentType (parent);
6420
- printArchetypeCommon (T, getAbstractTypeParamDecl (T));
6415
+ printArchetypeCommon (T);
6421
6416
}
6422
6417
6423
6418
void visitGenericTypeParamType (GenericTypeParamType *T) {
@@ -6475,16 +6470,7 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
6475
6470
6476
6471
void visitDependentMemberType (DependentMemberType *T) {
6477
6472
visitParentType (T->getBase ());
6478
- if (auto *const Assoc = T->getAssocType ()) {
6479
- if (Options.ProtocolQualifiedDependentMemberTypes ) {
6480
- Printer << " [" ;
6481
- Printer.printName (Assoc->getProtocol ()->getName ());
6482
- Printer << " ]" ;
6483
- }
6484
- Printer.printTypeRef (T, Assoc, T->getName ());
6485
- } else {
6486
- Printer.printName (T->getName ());
6487
- }
6473
+ printDependentMember (T);
6488
6474
}
6489
6475
6490
6476
#define REF_STORAGE (Name, name, ...) \
0 commit comments