Skip to content

Commit 96fdbe1

Browse files
committed
Check root archetypes in a few more places.
This makes more code agnostic to the presence of NestedArchetypeType.
1 parent ca2c44d commit 96fdbe1

File tree

4 files changed

+18
-13
lines changed

4 files changed

+18
-13
lines changed

lib/AST/ASTPrinter.cpp

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4841,17 +4841,19 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
48414841
return isSimpleUnderPrintOptions(typealias->getSinglyDesugaredType());
48424842
} else if (auto opaque =
48434843
dyn_cast<OpaqueTypeArchetypeType>(T.getPointer())) {
4844-
switch (Options.OpaqueReturnTypePrinting) {
4845-
case PrintOptions::OpaqueReturnTypePrintingMode::StableReference:
4846-
case PrintOptions::OpaqueReturnTypePrintingMode::Description:
4847-
return true;
4848-
case PrintOptions::OpaqueReturnTypePrintingMode::WithOpaqueKeyword:
4849-
return opaque->getDecl()->hasExplicitGenericParams();
4850-
case PrintOptions::OpaqueReturnTypePrintingMode::WithoutOpaqueKeyword:
4851-
return opaque->getDecl()->hasExplicitGenericParams() ||
4852-
isSimpleUnderPrintOptions(opaque->getExistentialType());
4844+
if (opaque->isRoot()) {
4845+
switch (Options.OpaqueReturnTypePrinting) {
4846+
case PrintOptions::OpaqueReturnTypePrintingMode::StableReference:
4847+
case PrintOptions::OpaqueReturnTypePrintingMode::Description:
4848+
return true;
4849+
case PrintOptions::OpaqueReturnTypePrintingMode::WithOpaqueKeyword:
4850+
return opaque->getDecl()->hasExplicitGenericParams();
4851+
case PrintOptions::OpaqueReturnTypePrintingMode::WithoutOpaqueKeyword:
4852+
return opaque->getDecl()->hasExplicitGenericParams() ||
4853+
isSimpleUnderPrintOptions(opaque->getExistentialType());
4854+
}
4855+
llvm_unreachable("bad opaque-return-type printing mode");
48534856
}
4854-
llvm_unreachable("bad opaque-return-type printing mode");
48554857
} else if (auto existential = dyn_cast<ExistentialType>(T.getPointer())) {
48564858
if (!Options.PrintExplicitAny)
48574859
return isSimpleUnderPrintOptions(existential->getConstraintType());

lib/AST/DiagnosticEngine.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -709,7 +709,9 @@ static void formatDiagnosticArgument(StringRef Modifier,
709709
type = type->getWithoutSyntaxSugar();
710710
}
711711

712-
if (needsQualification && isa<OpaqueTypeArchetypeType>(type.getPointer())) {
712+
if (needsQualification &&
713+
isa<OpaqueTypeArchetypeType>(type.getPointer()) &&
714+
cast<ArchetypeType>(type.getPointer())->isRoot()) {
713715
auto opaqueTypeDecl = type->castTo<OpaqueTypeArchetypeType>()->getDecl();
714716

715717
llvm::SmallString<256> NamingDeclText;

lib/AST/GenericEnvironment.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -340,7 +340,7 @@ GenericEnvironment::getOrCreateArchetypeFromInterfaceType(Type depType) {
340340
result = NestedArchetypeType::getNew(ctx, depMemTy,
341341
requirements.protos, superclass,
342342
requirements.layout, this);
343-
} else if (genericParam->isTypeSequence()) {
343+
} else if (requirements.anchor->getRootGenericParam()->isTypeSequence()) {
344344
result = SequenceArchetypeType::get(ctx, this, requirements.anchor,
345345
requirements.protos, superclass,
346346
requirements.layout);

lib/IDE/CodeCompletion.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2442,7 +2442,8 @@ class CompletionLookup final : public swift::VisibleDeclConsumer {
24422442
// and not both.
24432443
if (auto *archetypeType = t->getAs<ArchetypeType>()) {
24442444
// Don't erase opaque archetype.
2445-
if (isa<OpaqueTypeArchetypeType>(archetypeType))
2445+
if (isa<OpaqueTypeArchetypeType>(archetypeType) &&
2446+
archetypeType->isRoot())
24462447
return t;
24472448

24482449
auto protos = archetypeType->getConformsTo();

0 commit comments

Comments
 (0)