Skip to content

Commit 48847da

Browse files
committed
Added the expression cases of the form 'visit...Expr()'
Part of Issue #61601
1 parent 3ed0932 commit 48847da

File tree

8 files changed

+478
-33
lines changed

8 files changed

+478
-33
lines changed

lib/AST/ASTPrinter.cpp

Lines changed: 247 additions & 17 deletions
Large diffs are not rendered by default.

test/attr/accessibility_print.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,14 +211,14 @@ public extension FE_PublicClass {
211211

212212
// CHECK-LABEL: internal func GA_localTypes()
213213
func GA_localTypes() {
214-
// CHECK-SRC: private struct Local {
214+
// CHECK-SRC: struct Local {
215215
struct Local {
216216
// CHECK-SRC: internal let x
217217
let x = 0
218218
}
219219
_ = Local()
220220

221-
// CHECK-SRC: private enum LocalEnum {
221+
// CHECK-SRC: enum LocalEnum {
222222
enum LocalEnum {
223223
// CHECK-SRC: {{^}} case A
224224
case A, B

test/decl/enum/derived_hashable_equatable.swift

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ enum Simple: Hashable {
88
case b
99

1010
// CHECK: @_implements(Equatable, ==(_:_:)) internal static func __derived_enum_equals(_ a: Simple, _ b: Simple) -> Bool {
11-
// CHECK-NEXT: private var index_a: Int
11+
// CHECK-NEXT: var index_a: Int
1212
// CHECK-NEXT: switch a {
1313
// CHECK-NEXT: case .a:
1414
// CHECK-NEXT: index_a = 0
1515
// CHECK-NEXT: case .b:
1616
// CHECK-NEXT: index_a = 1
1717
// CHECK-NEXT: }
18-
// CHECK-NEXT: private var index_b: Int
18+
// CHECK-NEXT: var index_b: Int
1919
// CHECK-NEXT: switch b {
2020
// CHECK-NEXT: case .a:
2121
// CHECK-NEXT: index_b = 0
@@ -26,7 +26,7 @@ enum Simple: Hashable {
2626
// CHECK-NEXT: }
2727

2828
// CHECK: internal func hash(into hasher: inout Hasher) {
29-
// CHECK-NEXT: private var discriminator: Int
29+
// CHECK-NEXT: var discriminator: Int
3030
// CHECK-NEXT: switch self {
3131
// CHECK-NEXT: case .a:
3232
// CHECK-NEXT: discriminator = 0
@@ -101,14 +101,14 @@ enum HasUnavailableElement: Hashable {
101101
case b
102102

103103
// CHECK: @_implements(Equatable, ==(_:_:)) internal static func __derived_enum_equals(_ a: HasUnavailableElement, _ b: HasUnavailableElement) -> Bool {
104-
// CHECK-NEXT: private var index_a: Int
104+
// CHECK-NEXT: var index_a: Int
105105
// CHECK-NEXT: switch a {
106106
// CHECK-NEXT: case .a:
107107
// CHECK-NEXT: index_a = 0
108108
// CHECK-NEXT: case .b:
109109
// CHECK-NEXT: _diagnoseUnavailableCodeReached{{.*}}()
110110
// CHECK-NEXT: }
111-
// CHECK-NEXT: private var index_b: Int
111+
// CHECK-NEXT: var index_b: Int
112112
// CHECK-NEXT: switch b {
113113
// CHECK-NEXT: case .a:
114114
// CHECK-NEXT: index_b = 0
@@ -119,7 +119,7 @@ enum HasUnavailableElement: Hashable {
119119
// CHECK-NEXT: }
120120

121121
// CHECK: internal func hash(into hasher: inout Hasher) {
122-
// CHECK-NEXT: private var discriminator: Int
122+
// CHECK-NEXT: var discriminator: Int
123123
// CHECK-NEXT: switch self {
124124
// CHECK-NEXT: case .a:
125125
// CHECK-NEXT: discriminator = 0
@@ -185,14 +185,14 @@ enum UnavailableEnum: Hashable {
185185
case b
186186

187187
// CHECK: @_implements(Equatable, ==(_:_:)) internal static func __derived_enum_equals(_ a: UnavailableEnum, _ b: UnavailableEnum) -> Bool {
188-
// CHECK-NEXT: private var index_a: Int
188+
// CHECK-NEXT: var index_a: Int
189189
// CHECK-NEXT: switch a {
190190
// CHECK-NEXT: case .a:
191191
// CHECK-NEXT: index_a = 0
192192
// CHECK-NEXT: case .b:
193193
// CHECK-NEXT: index_a = 1
194194
// CHECK-NEXT: }
195-
// CHECK-NEXT: private var index_b: Int
195+
// CHECK-NEXT: var index_b: Int
196196
// CHECK-NEXT: switch b {
197197
// CHECK-NEXT: case .a:
198198
// CHECK-NEXT: index_b = 0
@@ -203,7 +203,7 @@ enum UnavailableEnum: Hashable {
203203
// CHECK-NEXT: }
204204

205205
// CHECK: internal func hash(into hasher: inout Hasher) {
206-
// CHECK-NEXT: private var discriminator: Int
206+
// CHECK-NEXT: var discriminator: Int
207207
// CHECK-NEXT: switch self {
208208
// CHECK-NEXT: case .a:
209209
// CHECK-NEXT: discriminator = 0

test/decl/enum/derived_hashable_equatable_macos.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ enum HasElementsWithAvailability: Hashable {
2525
case introduced10_50
2626

2727
// CHECK: @_implements(Equatable, ==(_:_:)) internal static func __derived_enum_equals(_ a: HasElementsWithAvailability, _ b: HasElementsWithAvailability) -> Bool {
28-
// CHECK-NEXT: private var index_a: Int
28+
// CHECK-NEXT: var index_a: Int
2929
// CHECK-NEXT: switch a {
3030
// CHECK-NEXT: case .alwaysAvailable:
3131
// CHECK-NEXT: index_a = 0
@@ -40,7 +40,7 @@ enum HasElementsWithAvailability: Hashable {
4040
// CHECK-NEXT: case .introduced10_50:
4141
// CHECK-NEXT: index_a = 2
4242
// CHECK-NEXT: }
43-
// CHECK-NEXT: private var index_b: Int
43+
// CHECK-NEXT: var index_b: Int
4444
// CHECK-NEXT: switch b {
4545
// CHECK-NEXT: case .alwaysAvailable:
4646
// CHECK-NEXT: index_b = 0
@@ -59,7 +59,7 @@ enum HasElementsWithAvailability: Hashable {
5959
// CHECK-NEXT: }
6060

6161
// CHECK: internal func hash(into hasher: inout Hasher) {
62-
// CHECK-NEXT: private var discriminator: Int
62+
// CHECK-NEXT: var discriminator: Int
6363
// CHECK-NEXT: switch self {
6464
// CHECK-NEXT: case .alwaysAvailable:
6565
// CHECK-NEXT: discriminator = 0

test/expr/print/conditions.swift

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,23 @@ repeat {
3636
// CHECK: repeat {
3737
// CHECK: b += 1
3838
// CHECK: } while b < 10
39+
40+
var p = (17 > 7 ? true : false)
41+
// CHECK: @_hasInitialValue internal var p: (Bool) = (17 > 7 ? true : false)
42+
43+
var x: Int = 3
44+
var y: Bool = x is Int
45+
// CHECK: @_hasInitialValue internal var y: Bool = x is Int
46+
47+
enum SomeError: Error {
48+
case errorType
49+
}
50+
51+
func someThrowingFunc() throws -> SomeError {
52+
throw SomeError.errorType
53+
}
54+
55+
var tryExpr = try? someThrowingFunc()
56+
// CHECK: @_hasInitialValue internal var tryExpr: SomeError? = try? someThrowingFunc()
57+
58+
var tryForceExpr = try! someThrowingFunc()

test/expr/print/func_closures.swift

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
// RUN: %target-swift-frontend -print-ast -disable-availability-checking %s 2>&1 | %FileCheck %s
2+
3+
func fetch() async throws -> String {
4+
}
5+
// CHECK: internal func fetch() async throws -> String {
6+
// CHECK: }
7+
8+
let fn = { (x: Int) in
9+
}
10+
// CHECK: @_hasInitialValue internal let fn: (_ x: Int) -> () = { (x: Int) in
11+
// CHECK: }
12+
13+
let fn1 = {}
14+
// CHECK: @_hasInitialValue internal let fn1: () -> () = { () in
15+
// CHECK: }
16+
17+
let fn2: (Int) -> Void = { x in }
18+
// CHECK: @_hasInitialValue internal let fn2: (Int) -> Void = { (x: Int) in
19+
// CHECK: }
20+
21+
let fn3: (Int, Int) -> Void = { x, y in }
22+
// CHECK: @_hasInitialValue internal let fn3: (Int, Int) -> Void = { (x: Int, y: Int) in
23+
// CHECK: }
24+
25+
let fn4: (Int, Int) -> Void = { (x, y) in }
26+
// CHECK: @_hasInitialValue internal let fn4: (Int, Int) -> Void = { (x: Int, y: Int) in
27+
// CHECK: }
28+
29+
let fn5 = { (x: String, y: Int) in }
30+
// CHECK: @_hasInitialValue internal let fn5: (_ x: String, _ y: Int) -> () = { (x: String, y: Int) in
31+
// CHECK: }
32+
33+
let fn6: (Int) -> Int = { x -> Int in x }
34+
// CHECK: @_hasInitialValue internal let fn6: (Int) -> Int = { (x: Int) -> Int in
35+
// CHECK: return x
36+
// CHECK: }
37+
38+
let fn7: (Int, Int) -> Int = { (x, y) -> Int in x + y }
39+
// CHECK: @_hasInitialValue internal let fn7: (Int, Int) -> Int = { (x: Int, y: Int) -> Int in
40+
// CHECK: return x + y
41+
// CHECK: }
42+
43+
let fn8 = { (x: Int, y: Int) -> Int in x + y }
44+
// CHECK: @_hasInitialValue internal let fn8: (_ x: Int, _ y: Int) -> Int = { (x: Int, y: Int) -> Int in
45+
// CHECK: return x + y
46+
// CHECK: }
47+
48+
let fn9 = { () -> Int in 0 }
49+
// CHECK: @_hasInitialValue internal let fn9: () -> Int = { () -> Int in
50+
// CHECK: return 0
51+
// CHECK: }
52+
53+
let fn10 = { () in }
54+
// CHECK: @_hasInitialValue internal let fn10: () -> () = { () in
55+
// CHECK: }

test/expr/print/misc_expr.swift

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
// RUN: %target-swift-frontend -print-ast -disable-objc-attr-requires-foundation-module -enable-objc-interop %s 2>&1 | %FileCheck %s
2+
3+
var x = 0.0
4+
5+
type(of: x)
6+
// CHECK: type(of: x)
7+
8+
class A {
9+
var x: Int = 3
10+
init() {
11+
}
12+
}
13+
14+
class B: A {
15+
override init() {
16+
super.init()
17+
super.x = 2;
18+
}
19+
}
20+
// CHECK: @_inheritsConvenienceInitializers internal class B : A {
21+
// CHECK: override internal init() {
22+
// CHECK: super.init()
23+
// CHECK: super.x = 2
24+
// CHECK: }
25+
// CHECK: @objc deinit {
26+
// CHECK: }
27+
// CHECK: }
28+
29+
var a: [Int] = [1, 3, 2];
30+
31+
for i in 0...2 {
32+
a[i] = i;
33+
}
34+
// CHECK: for i in 0 ... 2 {
35+
// CHECK: a[i] = i
36+
// CHECK: }
37+
38+
let y: Double = 0 as Double
39+
// CHECK: @_hasInitialValue internal let y: Double = 0 as Double
40+
41+
var stringToInt: Int? = Int("1");
42+
43+
var forceInt: Int = stringToInt!
44+
// CHECK: @_hasInitialValue internal var forceInt: Int = stringToInt!
45+
46+
var prefixUnaryExpr: Int = -a[1];
47+
// CHECK: @_hasInitialValue internal var prefixUnaryExpr: Int = -a[1]
48+
var postfixUnaryExpr: Int = stringToInt!
49+
// CHECK: @_hasInitialValue internal var postfixUnaryExpr: Int = stringToInt!
50+
51+
class MyID {
52+
var num = 1
53+
}
54+
55+
class SomeJSON {
56+
var id: MyID?
57+
}
58+
59+
let cnt = SomeJSON().id?.num
60+
// CHECK: @_hasInitialValue internal let cnt: Int? = SomeJSON().id?.num
61+
62+
struct User {
63+
let name: String
64+
let email: String
65+
let address: Address?
66+
let role: Role
67+
}
68+
69+
struct Address {
70+
let street: String
71+
}
72+
73+
enum Role {
74+
case admin
75+
case member
76+
case guest
77+
78+
var permissions: [Permission] {
79+
switch self {
80+
case .admin:
81+
return [.create, .read, .update, .delete]
82+
case .member:
83+
return [.create, .read]
84+
case .guest:
85+
return [.read]
86+
}
87+
}
88+
}
89+
90+
enum Permission {
91+
case create
92+
case read
93+
case update
94+
case delete
95+
}
96+
97+
var user = User(
98+
name: "Swift",
99+
email: "http://www.swift.org",
100+
address: nil,
101+
role: .admin
102+
)
103+
104+
105+
let userRoleKeyPath = \User.role
106+
// CHECK: @_hasInitialValue internal let userRoleKeyPath: KeyPath<User, Role> = \User
107+
108+
let role = user[keyPath: userRoleKeyPath]
109+
// CHECK: @_hasInitialValue internal let role: Role = user[keyPath: userRoleKeyPath]
110+
111+
struct FakeColor: _ExpressibleByColorLiteral {
112+
init(_colorLiteralRed: Float, green: Float, blue: Float, alpha: Float) {}
113+
}
114+
typealias _ColorLiteralType = FakeColor
115+
116+
let myColor = #colorLiteral(red: 0.292, green: 0.081, blue: 0.6, alpha: 255)
117+
// CHECK: @_hasInitialValue internal let myColor: FakeColor = #colorLiteral(red: 0.292, green: 0.081, blue: 0.6, alpha: 255)
118+
119+
enum FileNames {
120+
static let main = FileNames.file(#file)
121+
// CHECK: @_hasInitialValue internal static let main: FileNames = FileNames.file(#file)
122+
case file(String)
123+
}
124+
125+
class C {
126+
@objc
127+
var foo = 0
128+
}
129+
130+
func foo(_ x: AnyObject) {
131+
let y = x.foo
132+
}
133+
// CHECK: internal func foo(_ x: AnyObject) {
134+
// CHECK: @_hasInitialValue let y: Int? = x.foo
135+
// CHECK: }
136+
137+
struct S {
138+
func foo() {}
139+
}
140+
let fn = S.foo

test/expr/print/protocol.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ func cast(_ a: Any) {
1919
let forced = a as! Archivable
2020
}
2121
// CHECK: internal func cast(_ a: Any) {
22-
// CHECK: @_hasInitialValue private let conditional: (any Archivable)? = a as? any Archivable
23-
// CHECK: @_hasInitialValue private let forced: any Archivable = a as! any Archivable
22+
// CHECK: @_hasInitialValue let conditional: (any Archivable)? = a as? any Archivable
23+
// CHECK: @_hasInitialValue let forced: any Archivable = a as! any Archivable
2424
// CHECK: }

0 commit comments

Comments
 (0)