@@ -7012,16 +7012,17 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
70127012 Printer << " each " ;
70137013 }
70147014
7015- void printArchetypeCommon (Type interfaceTy, ArchetypeType *archetypeTy ) {
7015+ void printArchetypeCommon (Type interfaceTy, GenericEnvironment *env ) {
70167016 if (auto *paramTy = interfaceTy->getAs <GenericTypeParamType>()) {
7017- assert (archetypeTy->isRoot ());
7018-
70197017 if (Options.AlternativeTypeNames ) {
7020- auto found = Options.AlternativeTypeNames ->find (CanType (archetypeTy));
7021- if (found != Options.AlternativeTypeNames ->end ()) {
7022- if (paramTy->isParameterPack ()) printEach ();
7023- Printer << found->second .str ();
7024- return ;
7018+ auto archetypeTy = env->mapTypeIntoContext (paramTy)->getAs <GenericTypeParamType>();
7019+ if (archetypeTy) {
7020+ auto found = Options.AlternativeTypeNames ->find (CanType (archetypeTy));
7021+ if (found != Options.AlternativeTypeNames ->end ()) {
7022+ if (paramTy->isParameterPack ()) printEach ();
7023+ Printer << found->second .str ();
7024+ return ;
7025+ }
70257026 }
70267027 }
70277028
@@ -7030,18 +7031,18 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
70307031 }
70317032
70327033 auto *memberTy = interfaceTy->castTo <DependentMemberType>();
7033- if (memberTy->getBase ()->is <GenericTypeParamType>())
7034- visitParentType (archetypeTy-> getRoot ( ));
7034+ if (auto *paramTy = memberTy->getBase ()->getAs <GenericTypeParamType>())
7035+ visitParentType (env-> mapTypeIntoContext (paramTy ));
70357036 else {
7036- printArchetypeCommon (memberTy->getBase (), archetypeTy-> getRoot () );
7037+ printArchetypeCommon (memberTy->getBase (), env );
70377038 Printer << " ." ;
70387039 }
70397040
70407041 printDependentMember (memberTy);
70417042 }
70427043
70437044 void visitPrimaryArchetypeType (PrimaryArchetypeType *T) {
7044- printArchetypeCommon (T->getInterfaceType (), T);
7045+ printArchetypeCommon (T->getInterfaceType (), T-> getGenericEnvironment () );
70457046 }
70467047
70477048 void visitOpaqueTypeArchetypeType (OpaqueTypeArchetypeType *T) {
@@ -7050,7 +7051,7 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
70507051
70517052 if (!paramTy) {
70527053 assert (interfaceTy->is <DependentMemberType>());
7053- printArchetypeCommon (interfaceTy, T);
7054+ printArchetypeCommon (interfaceTy, T-> getGenericEnvironment () );
70547055 return ;
70557056 }
70567057
@@ -7135,7 +7136,7 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
71357136 }
71367137
71377138 void visitPackArchetypeType (PackArchetypeType *T) {
7138- printArchetypeCommon (T->getInterfaceType (), T);
7139+ printArchetypeCommon (T->getInterfaceType (), T-> getGenericEnvironment () );
71397140 }
71407141
71417142 void visitGenericTypeParamType (GenericTypeParamType *T) {
0 commit comments