5
5
// RUN: %FileCheck %s --input-file %t/Names.symbols.json
6
6
// RUN: %FileCheck %s --input-file %t/Names.symbols.json --check-prefix=FUNC
7
7
// RUN: %FileCheck %s --input-file %t/Names.symbols.json --check-prefix=INNERTYPE
8
- // RUN: %FileCheck %s --input-file %t/Names.symbols.json --check-prefix=INNERTYPEALIAS
9
8
// RUN: %FileCheck %s --input-file %t/Names.symbols.json --check-prefix=INNERENUM
10
9
// RUN: %FileCheck %s --input-file %t/Names.symbols.json --check-prefix=INNERCASE
11
10
12
11
// RUN: %FileCheck %s --input-file %t/
[email protected] --check-prefix=EXT_INNERTYPE
13
12
// RUN: %FileCheck %s --input-file %t/
[email protected] --check-prefix=EXT_INNERENUM
14
13
14
+ // RUN: %FileCheck %s --input-file %t/Names.symbols.json --check-prefix=INNERTYPEALIAS
15
+ // RUN: %FileCheck %s --input-file %t/Names.symbols.json --check-prefix=INNERTYPEALIAS_INNERINNERTYPE
16
+
17
+ // RUN: %FileCheck %s --input-file %t/
[email protected] --check-prefix=EXT_INNERTYPEALIAS
18
+ // RUN: %FileCheck %s --input-file %t/
[email protected] --check-prefix=EXT_INNERTYPEALIAS_INNERINNERTYPE
19
+
15
20
public struct MyStruct {
16
21
public struct InnerStruct { }
17
22
@@ -24,6 +29,28 @@ public struct MyStruct {
24
29
}
25
30
}
26
31
32
+ public extension MyStruct . InnerTypeAlias {
33
+ struct InnerInnerStruct { }
34
+ }
35
+
36
+ import ExternalNames
37
+
38
+ public extension ExternalStruct . InnerStruct {
39
+ func foo( ) { }
40
+ }
41
+
42
+ public extension ExternalStruct . InnerTypeAlias {
43
+ func bar( ) { }
44
+ }
45
+
46
+ public extension ExternalStruct . InnerEnum {
47
+ func foo( ) { }
48
+ }
49
+
50
+ public extension ExternalStruct . InnerTypeAlias {
51
+ struct InnerInnerStruct { }
52
+ }
53
+
27
54
// CHECK-LABEL: "precise": "s:5Names8MyStructV"
28
55
// CHECK: names
29
56
// CHECK-NEXT: "title": "MyStruct"
@@ -36,10 +63,6 @@ public struct MyStruct {
36
63
// INNERTYPE: names
37
64
// INNERTYPE-NEXT: "title": "MyStruct.InnerStruct"
38
65
39
- // INNERTYPEALIAS-LABEL: "precise": "s:5Names8MyStructV14InnerTypeAliasa"
40
- // INNERTYPEALIAS: names
41
- // INNERTYPEALIAS-NEXT: "title": "MyStruct.InnerTypeAlias"
42
-
43
66
// INNERENUM-LABEL: "precise": "s:5Names8MyStructV9InnerEnumO",
44
67
// INNERENUM: names
45
68
// INNERENUM-NEXT: "title": "MyStruct.InnerEnum"
@@ -48,21 +71,38 @@ public struct MyStruct {
48
71
// INNERCASE: names
49
72
// INNERCASE-NEXT: "title": "MyStruct.InnerEnum.InnerCase",
50
73
51
-
52
- import ExternalNames
53
-
54
- public extension ExternalStruct . InnerStruct {
55
- func foo( ) { }
56
- }
57
-
58
- public extension ExternalStruct . InnerEnum {
59
- func foo( ) { }
60
- }
61
-
62
74
// EXT_INNERTYPE-LABEL: "precise": "s:e:s:13ExternalNames0A6StructV05InnerC0V0B0E3fooyyF"
63
75
// EXT_INNERTYPE: names
64
76
// EXT_INNERTYPE-NEXT: "title": "ExternalStruct.InnerStruct"
65
77
66
78
// EXT_INNERENUM-LABEL: "precise": "s:e:s:13ExternalNames0A6StructV9InnerEnumO0B0E3fooyyF",
67
79
// EXT_INNERENUM: names
68
80
// EXT_INNERENUM-NEXT: "title": "ExternalStruct.InnerEnum"
81
+
82
+
83
+ // The typealias symbol itself should use the name of the typealias
84
+
85
+ // INNERTYPEALIAS-LABEL: "precise": "s:5Names8MyStructV14InnerTypeAliasa"
86
+ // INNERTYPEALIAS: names
87
+ // INNERTYPEALIAS-NEXT: "title": "MyStruct.InnerTypeAlias"
88
+
89
+ // Types declared in extensions to typealiases should always use the name of their
90
+ // original (aliased) parent type
91
+
92
+ // INNERTYPEALIAS_INNERINNERTYPE-LABEL: "precise": "s:5Names8MyStructV05InnerC0V0ddC0V"
93
+ // INNERTYPEALIAS_INNERINNERTYPE: names
94
+ // INNERTYPEALIAS_INNERINNERTYPE-NEXT: "title": "MyStruct.InnerStruct.InnerInnerStruct"
95
+
96
+ // Extension symbols which extend a typealias should use the name of the original
97
+ // (aliased) type
98
+
99
+ // EXT_INNERTYPEALIAS-LABEL: "precise": "s:e:s:13ExternalNames0A6StructV05InnerC0V0B0E3baryyF"
100
+ // EXT_INNERTYPEALIAS: names
101
+ // EXT_INNERTYPEALIAS-NEXT: "title": "ExternalStruct.InnerStruct"
102
+
103
+ // Symbols declared in an extension to a typealias should also use the name of the original
104
+ // (aliased) type
105
+
106
+ // EXT_INNERTYPEALIAS_INNERINNERTYPE-LABEL: "precise": "s:13ExternalNames0A6StructV05InnerC0V0B0E0ddC0V"
107
+ // EXT_INNERTYPEALIAS_INNERINNERTYPE: names
108
+ // EXT_INNERTYPEALIAS_INNERINNERTYPE-NEXT: "title": "ExternalStruct.InnerStruct.InnerInnerStruct"
0 commit comments