@@ -6233,8 +6233,7 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
6233
6233
6234
6234
void visitOpenedArchetypeType (OpenedArchetypeType *T) {
6235
6235
if (auto parent = T->getParent ()) {
6236
- visitParentType (parent);
6237
- printArchetypeCommon (T, getAbstractTypeParamDecl (T));
6236
+ printArchetypeCommon (T);
6238
6237
return ;
6239
6238
}
6240
6239
@@ -6243,8 +6242,20 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
6243
6242
visit (T->getExistentialType ());
6244
6243
}
6245
6244
6246
- void printArchetypeCommon (ArchetypeType *T,
6247
- const AbstractTypeParamDecl *Decl) {
6245
+ void printDependentMember (DependentMemberType *T) {
6246
+ if (auto *const Assoc = T->getAssocType ()) {
6247
+ if (Options.ProtocolQualifiedDependentMemberTypes ) {
6248
+ Printer << " [" ;
6249
+ Printer.printName (Assoc->getProtocol ()->getName ());
6250
+ Printer << " ]" ;
6251
+ }
6252
+ Printer.printTypeRef (T, Assoc, T->getName ());
6253
+ } else {
6254
+ Printer.printName (T->getName ());
6255
+ }
6256
+ }
6257
+
6258
+ void printArchetypeCommon (ArchetypeType *T) {
6248
6259
if (Options.AlternativeTypeNames ) {
6249
6260
auto found = Options.AlternativeTypeNames ->find (T->getCanonicalType ());
6250
6261
if (found != Options.AlternativeTypeNames ->end ()) {
@@ -6253,36 +6264,22 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
6253
6264
}
6254
6265
}
6255
6266
6256
- const auto Name = T->getName ();
6257
- if (Name.empty ()) {
6258
- Printer << " <anonymous>" ;
6259
- } else if (Decl) {
6260
- Printer.printTypeRef (T, Decl, Name);
6267
+ auto interfaceType = T->getInterfaceType ();
6268
+ if (auto *dependentMember = interfaceType->getAs <DependentMemberType>()) {
6269
+ visitParentType (T->getParent ());
6270
+ printDependentMember (dependentMember);
6261
6271
} else {
6262
- Printer. printName (Name );
6272
+ visit (interfaceType );
6263
6273
}
6264
6274
}
6265
6275
6266
- static AbstractTypeParamDecl *getAbstractTypeParamDecl (ArchetypeType *T) {
6267
- if (auto gp = T->getInterfaceType ()->getAs <GenericTypeParamType>()) {
6268
- return gp->getDecl ();
6269
- }
6270
-
6271
- auto depMemTy = T->getInterfaceType ()->castTo <DependentMemberType>();
6272
- return depMemTy->getAssocType ();
6273
- }
6274
-
6275
6276
void visitPrimaryArchetypeType (PrimaryArchetypeType *T) {
6276
- if (auto parent = T->getParent ())
6277
- visitParentType (parent);
6278
-
6279
- printArchetypeCommon (T, getAbstractTypeParamDecl (T));
6277
+ printArchetypeCommon (T);
6280
6278
}
6281
6279
6282
6280
void visitOpaqueTypeArchetypeType (OpaqueTypeArchetypeType *T) {
6283
6281
if (auto parent = T->getParent ()) {
6284
- visitParentType (parent);
6285
- printArchetypeCommon (T, getAbstractTypeParamDecl (T));
6282
+ printArchetypeCommon (T);
6286
6283
return ;
6287
6284
}
6288
6285
@@ -6359,9 +6356,7 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
6359
6356
}
6360
6357
6361
6358
void visitSequenceArchetypeType (SequenceArchetypeType *T) {
6362
- if (auto parent = T->getParent ())
6363
- visitParentType (parent);
6364
- printArchetypeCommon (T, getAbstractTypeParamDecl (T));
6359
+ printArchetypeCommon (T);
6365
6360
}
6366
6361
6367
6362
void visitGenericTypeParamType (GenericTypeParamType *T) {
@@ -6419,16 +6414,7 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
6419
6414
6420
6415
void visitDependentMemberType (DependentMemberType *T) {
6421
6416
visitParentType (T->getBase ());
6422
- if (auto *const Assoc = T->getAssocType ()) {
6423
- if (Options.ProtocolQualifiedDependentMemberTypes ) {
6424
- Printer << " [" ;
6425
- Printer.printName (Assoc->getProtocol ()->getName ());
6426
- Printer << " ]" ;
6427
- }
6428
- Printer.printTypeRef (T, Assoc, T->getName ());
6429
- } else {
6430
- Printer.printName (T->getName ());
6431
- }
6417
+ printDependentMember (T);
6432
6418
}
6433
6419
6434
6420
#define REF_STORAGE (Name, name, ...) \
0 commit comments