Skip to content

Commit 21f37d7

Browse files
committed
Add some preliminary tests for TypeDecoder/ASTDemangler
1 parent a14f345 commit 21f37d7

File tree

5 files changed

+428
-0
lines changed

5 files changed

+428
-0
lines changed

test/TypeDecoder/existentials.swift

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
// RUN: %empty-directory(%t)
2+
3+
// RUN: %target-build-swift -emit-executable %s -g -o %t/existentials -emit-module
4+
// RUN: sed -ne '/\/\/ *DEMANGLE: /s/\/\/ *DEMANGLE: *//p' < %s > %t/input
5+
// RUN: %lldb-moduleimport-test %t/existentials -type-from-mangled=%t/input | %FileCheck %s
6+
7+
func blackHole(_: Any...) {}
8+
9+
protocol P {}
10+
protocol Q {}
11+
class C {}
12+
13+
class D : C, P, Q {}
14+
15+
do {
16+
let e0: Any = D()
17+
let e1: AnyObject = D()
18+
19+
let e2: P = D()
20+
let e4: P & C = D()
21+
let e3: P & AnyObject = D()
22+
23+
let e5: P & Q = D()
24+
let e6: P & Q & C = D()
25+
let e7: P & Q & AnyObject = D()
26+
27+
blackHole(e0, e1, e2, e3, e4, e5, e6, e7)
28+
}
29+
30+
do {
31+
let e0: Any.Type = D.self
32+
let e1: AnyObject.Type = D.self
33+
34+
let e2: P.Type = D.self
35+
let e4: (P & C).Type = D.self
36+
let e3: (P & AnyObject).Type = D.self
37+
38+
let e5: (P & Q).Type = D.self
39+
let e6: (P & Q & C).Type = D.self
40+
let e7: (P & Q & AnyObject).Type = D.self
41+
42+
blackHole(e0, e1, e2, e3, e4, e5, e6, e7)
43+
}
44+
45+
do {
46+
let e0: Any.Protocol = Any.self
47+
let e1: AnyObject.Protocol = AnyObject.self
48+
49+
let e2: P.Protocol = P.self
50+
let e4: (P & C).Protocol = (P & C).self
51+
let e3: (P & AnyObject).Protocol = (P & AnyObject).self
52+
53+
let e5: (P & Q).Protocol = (P & Q).self
54+
let e6: (P & Q & C).Protocol = (P & Q & C).self
55+
let e7: (P & Q & AnyObject).Protocol = (P & Q & AnyObject).self
56+
57+
blackHole(e0, e1, e2, e3, e4, e5, e6, e7)
58+
}
59+
60+
// DEMANGLE: $sypD
61+
// DEMANGLE: $syXlD
62+
// DEMANGLE: $s12existentials1P_pD
63+
// DEMANGLE: $s12existentials1P_AA1CCXcD
64+
// DEMANGLE: $s12existentials1P_XlD
65+
// DEMANGLE: $s12existentials1P_AA1QpD
66+
// DEMANGLE: $s12existentials1P_AA1QAA1CCXcD
67+
// DEMANGLE: $s12existentials1P_AA1QXlD
68+
69+
// CHECK: Any
70+
// CHECK: AnyObject
71+
// CHECK: P
72+
// CHECK: C & P
73+
// CHECK: P & AnyObject
74+
// CHECK: P & Q
75+
// CHECK: C & P & Q
76+
// CHECK: P & Q & AnyObject
77+
78+
// DEMANGLE: $sypXpD
79+
// DEMANGLE: $syXlXpD
80+
// DEMANGLE: $s12existentials1P_pXpD
81+
// DEMANGLE: $s12existentials1P_XlXpD
82+
// DEMANGLE: $s12existentials1P_AA1CCXcXpD
83+
// DEMANGLE: $s12existentials1P_AA1QpXpD
84+
// DEMANGLE: $s12existentials1P_AA1QAA1CCXcXpD
85+
// DEMANGLE: $s12existentials1P_AA1QXlXpD
86+
87+
// CHECK: Any.Type
88+
// CHECK: AnyObject.Type
89+
// CHECK: P.Type
90+
// CHECK: (P & AnyObject).Type
91+
// CHECK: (C & P).Type
92+
// CHECK: (P & Q).Type
93+
// CHECK: (C & P & Q).Type
94+
// CHECK: (P & Q & AnyObject).Type
95+
96+
// DEMANGLE: $sypmD
97+
// DEMANGLE: $syXlmD
98+
// DEMANGLE: $s12existentials1P_pmD
99+
// DEMANGLE: $s12existentials1P_AA1CCXcmD
100+
// DEMANGLE: $s12existentials1P_XlmD
101+
// DEMANGLE: $s12existentials1P_AA1QpmD
102+
// DEMANGLE: $s12existentials1P_AA1QAA1CCXcmD
103+
// DEMANGLE: $s12existentials1P_AA1QXlmD
104+
105+
// CHECK: Any.Protocol
106+
// CHECK: AnyObject.Protocol
107+
// CHECK: P.Protocol
108+
// CHECK: (C & P).Protocol
109+
// CHECK: (P & AnyObject).Protocol
110+
// CHECK: (P & Q).Protocol
111+
// CHECK: (C & P & Q).Protocol
112+
// CHECK: (P & Q & AnyObject).Protocol

test/TypeDecoder/nominal_types.swift

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// RUN: %empty-directory(%t)
2+
3+
// RUN: %target-build-swift -emit-executable %s -g -o %t/nominal_types -emit-module
4+
// RUN: sed -ne '/\/\/ *DEMANGLE: /s/\/\/ *DEMANGLE: *//p' < %s > %t/input
5+
// RUN: %lldb-moduleimport-test %t/nominal_types -type-from-mangled=%t/input | %FileCheck %s
6+
7+
struct Outer {
8+
enum Inner {
9+
case a
10+
init() { fatalError() }
11+
}
12+
enum GenericInner<T, U> {
13+
case a
14+
init() { fatalError() }
15+
}
16+
}
17+
18+
enum GenericOuter<T, U> {
19+
case a
20+
init() { fatalError() }
21+
22+
struct Inner {}
23+
struct GenericInner<T, U> {}
24+
}
25+
26+
func blackHole(_: Any...) {}
27+
28+
do {
29+
let x1 = Outer()
30+
let x2 = Outer.Inner()
31+
let x3 = Outer.GenericInner<Int, String>()
32+
33+
blackHole(x1, x2, x3)
34+
}
35+
36+
do {
37+
let x1 = GenericOuter<Int, String>()
38+
let x2 = GenericOuter<Int, String>.Inner()
39+
let x3 = GenericOuter<Int, String>.GenericInner<Float, Double>()
40+
41+
blackHole(x1, x2, x3)
42+
}
43+
44+
// DEMANGLE: $s13nominal_types5OuterVD
45+
// CHECK: Outer
46+
47+
// DEMANGLE: $s13nominal_types5OuterV5InnerOD
48+
// CHECK: Outer.Inner
49+
50+
// DEMANGLE: $s13nominal_types5OuterV12GenericInnerOy_SiSSGD
51+
// DEMANGLE: $s13nominal_types5OuterV12GenericInnerOy_xq_GD
52+
// CHECK: Outer.GenericInner<Int, String>
53+
// CHECK: Outer.GenericInner<τ_0_0, τ_0_1>
54+
55+
// DEMANGLE: $s13nominal_types12GenericOuterO5InnerVyxq__GD
56+
// DEMANGLE: $s13nominal_types12GenericOuterO0C5InnerVyxq__qd__qd_0_GD
57+
// CHECK: GenericOuter<τ_0_0, τ_0_1>.Inner
58+
// CHECK: GenericOuter<τ_0_0, τ_0_1>.GenericInner<τ_1_0, τ_1_1>
59+
60+
// DEMANGLE: $s13nominal_types12GenericOuterO5InnerVySiSS_GD
61+
// DEMANGLE: $s13nominal_types12GenericOuterO0C5InnerVySiSS_SfSdGD
62+
// CHECK: GenericOuter<Int, String>.Inner
63+
// CHECK: GenericOuter<Int, String>.GenericInner<Float, Double>
64+
65+
// DEMANGLE: $s13nominal_types12GenericOuterOyxq_GD
66+
// DEMANGLE: $s13nominal_types12GenericOuterOySiSSGD
67+
// CHECK: GenericOuter<τ_0_0, τ_0_1>
68+
// CHECK: GenericOuter<Int, String>

test/TypeDecoder/objc_classes.swift

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
// RUN: %empty-directory(%t)
2+
3+
// RUN: %target-build-swift -emit-executable %s -g -o %t/objc_classes -emit-module
4+
// RUN: sed -ne '/\/\/ *DEMANGLE: /s/\/\/ *DEMANGLE: *//p' < %s > %t/input
5+
// RUN: %lldb-moduleimport-test-with-sdk %t/objc_classes -type-from-mangled=%t/input | %FileCheck %s
6+
7+
// REQUIRES: objc_interop
8+
9+
import Foundation
10+
11+
func blackHole(_: Any...) {}
12+
13+
@objc protocol OurObjCProtocol {}
14+
class OurObjCClass : NSObject, OurObjCProtocol {}
15+
16+
do {
17+
let x1: NSSet = NSSet()
18+
let x2: NSFastEnumeration = x1
19+
let x3: OurObjCProtocol = OurObjCClass()
20+
21+
blackHole(x1, x2, x3)
22+
}
23+
24+
do {
25+
let x1: NSSet.Type = NSSet.self
26+
let x2: NSFastEnumeration.Type = x1
27+
let x3: OurObjCProtocol.Type = OurObjCClass.self
28+
29+
blackHole(x1, x2, x3)
30+
}
31+
32+
do {
33+
let x1: NSFastEnumeration.Protocol = NSFastEnumeration.self
34+
let x2: OurObjCProtocol.Protocol = OurObjCProtocol.self
35+
36+
blackHole(x1, x2)
37+
}
38+
39+
// DEMANGLE: $sSo5NSSetCD
40+
// DEMANGLE: $sSo17NSFastEnumeration_pD
41+
// DEMANGLE: $s12objc_classes15OurObjCProtocol_pD
42+
43+
// CHECK: NSSet
44+
// CHECK: NSFastEnumeration
45+
// CHECK: OurObjCProtocol
46+
47+
// DEMANGLE: $sSo5NSSetCmD
48+
// DEMANGLE: $sSo5NSSetCXMTD
49+
// DEMANGLE: $sSo17NSFastEnumeration_pXpD
50+
// DEMANGLE: $s12objc_classes15OurObjCProtocol_pXpD
51+
52+
// CHECK: NSSet.Type
53+
54+
// FIXME: we drop the metatype representation here
55+
// CHECK: NSSet.Type
56+
57+
// CHECK: NSFastEnumeration.Type
58+
// CHECK: OurObjCProtocol.Type
59+
60+
// DEMANGLE: $sSo17NSFastEnumeration_pmD
61+
// DEMANGLE: $s12objc_classes15OurObjCProtocol_pmD
62+
63+
// CHECK: NSFastEnumeration.Protocol
64+
// CHECK: OurObjCProtocol.Protocol

0 commit comments

Comments
 (0)