Skip to content

Commit 00119bc

Browse files
authored
Merge pull request #24319 from rintaro/5.1-04-24-2019-astprint-print-opaquetype
[5.1 04-24-2019][ASTPrinter] Print opaque type using ArchetypeType::getExistentialType()
2 parents 951c132 + dccf1ac commit 00119bc

File tree

2 files changed

+25
-22
lines changed

2 files changed

+25
-22
lines changed

lib/AST/ASTPrinter.cpp

Lines changed: 13 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3412,20 +3412,18 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
34123412
bool isSimple = T->hasSimpleTypeRepr();
34133413
if (isSimple && T->is<OpaqueTypeArchetypeType>()) {
34143414
auto opaqueTy = T->castTo<OpaqueTypeArchetypeType>();
3415-
auto opaqueDecl = opaqueTy->getDecl();
3416-
if (!opaqueDecl->hasName()) {
3417-
switch (Options.OpaqueReturnTypePrinting) {
3418-
case PrintOptions::OpaqueReturnTypePrintingMode::StableReference:
3419-
case PrintOptions::OpaqueReturnTypePrintingMode::Description:
3420-
isSimple = true;
3421-
break;
3422-
case PrintOptions::OpaqueReturnTypePrintingMode::WithOpaqueKeyword:
3423-
isSimple = false;
3424-
break;
3425-
case PrintOptions::OpaqueReturnTypePrintingMode::WithoutOpaqueKeyword: {
3426-
isSimple = opaqueTy->getConformsTo().size() < 2;
3427-
}
3428-
}
3415+
switch (Options.OpaqueReturnTypePrinting) {
3416+
case PrintOptions::OpaqueReturnTypePrintingMode::StableReference:
3417+
case PrintOptions::OpaqueReturnTypePrintingMode::Description:
3418+
isSimple = true;
3419+
break;
3420+
case PrintOptions::OpaqueReturnTypePrintingMode::WithOpaqueKeyword:
3421+
isSimple = false;
3422+
break;
3423+
case PrintOptions::OpaqueReturnTypePrintingMode::WithoutOpaqueKeyword: {
3424+
isSimple = opaqueTy->getExistentialType()->hasSimpleTypeRepr();
3425+
break;
3426+
}
34293427
}
34303428
}
34313429

@@ -4207,14 +4205,7 @@ class TypePrinter : public TypeVisitor<TypePrinter> {
42074205
Printer << "some ";
42084206
LLVM_FALLTHROUGH;
42094207
case PrintOptions::OpaqueReturnTypePrintingMode::WithoutOpaqueKeyword: {
4210-
SmallVector<Type, 2> types;
4211-
for (auto proto : T->getConformsTo())
4212-
types.push_back(proto->TypeDecl::getDeclaredInterfaceType());
4213-
4214-
// Create and visit temporary ProtocolCompositionType.
4215-
auto composition =
4216-
ProtocolCompositionType::get(T->getASTContext(), types, false);
4217-
visit(composition);
4208+
visit(T->getExistentialType());
42184209
return;
42194210
}
42204211
case PrintOptions::OpaqueReturnTypePrintingMode::StableReference: {
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// RUN: %swift-ide-test -print-swift-file-interface -source-filename %s
2+
3+
public class Base {}
4+
// CHECK: public class Base {
5+
public protocol Proto {}
6+
// CHECK: public protocol Proto {
7+
}
8+
public func foo() -> some Base & Proto {
9+
// CHECK: public func foo() -> some Base & Proto
10+
class Derived: Base, Proto {}
11+
return Derived()
12+
}

0 commit comments

Comments
 (0)