func foo() -> Int{ var aaa = 1 + 2 aaa = aaa + 3 if aaa == 3 { aaa = 4 } return aaa } func foo1() -> Int { return 0 } class C { func foo() {} } struct S { func foo() {} } func foo2() { let a = 3 var b = a.bigEndian let c = a.byteSwapped b = b.bigEndian.bigEndian.byteSwapped print(b + c) } struct S1 { var a = 3 func foo() -> Int { return 0 } mutating func increment() -> S1 { a = a + 1 return self } } func foo3(s: inout S1) -> Int { let b = s.a let c = s.foo() + b s = s.increment() return c + b } func foo4(s: S1) -> Int { let b = s.a let c = s.foo() + b return c + b } class C1 { func getC() -> C1 { return self } func take(another : C1) -> C1 {return another } let c = C1() } func foo5(c : C1) -> C1 { let a = c.c.getC().c.getC().getC().getC() let b = a.c.c.c.c.getC().getC() let d = a.c.getC().getC().c.c return a.take(another: b).take(another: d) } func foo6() -> Int { let a = { () -> Int in let a = 3 var b = a.bigEndian let c = a.byteSwapped b = b.bigEndian.bigEndian.byteSwapped print(b + c) return { () -> Int in let a = 3 var b = a.bigEndian let c = a.byteSwapped b = b.bigEndian.bigEndian.byteSwapped print(b + c) return 1 }() }() return a } func foo7(a : Int) -> Int { switch a { case 1: return 0 case 2: return 1 default: return a } } func foo8(a : [Int]) { for v in a { if v > 3 { break } if v < 3 { continue } } var i : Int i = 0 repeat { print(i) i = i + 1 if i < 10 { continue } if i > 80 { break } } while i < 100 } func foo9(_ a: Int, _ b: Int) -> Int { if a == b { return 0 } switch a { case 1: foo9(1, 2) foo9(1, 2) return foo9(2, 4) default: foo9(1, 2) foo9(1, 2) return foo9(2, 4) } return 0 } func testInout(_ a : inout Int) { var b = a + 1 + 1 b = b + 1 testInout(&b) } func test_no_pattern_binding(_ parameters: [String: Any]) -> String { var components: [(String, String)] = [] for key in parameters.keys.sorted(by: <) { } return components.map { "\($0)=\($1)" }.joined(separator: "&") } func testExpressionVariables() -> Int { func bar() -> Int { let x = 5 let y = 6 return x + y } return bar() } func testDefer() { defer { } } // https://github.com/apple/swift/issues/55404 func testPropertyWrapper() { @propertyWrapper public struct Wrapper { public var wrappedValue: String init(_ wrappedValue: String) { self.wrappedValue = wrappedValue } } public struct MyStruct { @Wrapper("something") public static var somevar: String public static var someothervar: Int } } // RUN: %target-swift-ide-test -range -pos=8:1 -end-pos 8:32 -source-filename %s | %FileCheck %s -check-prefix=CHECK1 // RUN: %target-swift-ide-test -range -pos=9:1 -end-pos 9:26 -source-filename %s | %FileCheck %s -check-prefix=CHECK2 // RUN: %target-swift-ide-test -range -pos=10:1 -end-pos 10:27 -source-filename %s | %FileCheck %s -check-prefix=CHECK3 // RUN: %target-swift-ide-test -range -pos=3:1 -end-pos=4:26 -source-filename %s | %FileCheck %s -check-prefix=CHECK4 // RUN: %target-swift-ide-test -range -pos=3:1 -end-pos=5:13 -source-filename %s | %FileCheck %s -check-prefix=CHECK5 // RUN: %target-swift-ide-test -range -pos=4:1 -end-pos=5:13 -source-filename %s | %FileCheck %s -check-prefix=CHECK6 // RUN: %target-swift-ide-test -range -pos=14:1 -end-pos=17:15 -source-filename %s | %FileCheck %s -check-prefix=CHECK7 // RUN: %target-swift-ide-test -range -pos=31:1 -end-pos=33:15 -source-filename %s | %FileCheck %s -check-prefix=CHECK8 // RUN: %target-swift-ide-test -range -pos=37:1 -end-pos=39:15 -source-filename %s | %FileCheck %s -check-prefix=CHECK9 // RUN: %target-swift-ide-test -range -pos=49:1 -end-pos=50:34 -source-filename %s | %FileCheck %s -check-prefix=CHECK10 // RUN: %target-swift-ide-test -range -pos=49:1 -end-pos=51:32 -source-filename %s | %FileCheck %s -check-prefix=CHECK11 // RUN: %target-swift-ide-test -range -pos=49:1 -end-pos=52:45 -source-filename %s | %FileCheck %s -check-prefix=CHECK12 // RUN: %target-swift-ide-test -range -pos=57:1 -end-pos=61:17 -source-filename %s | %FileCheck %s -check-prefix=CHECK13 // RUN: %target-swift-ide-test -range -pos=57:1 -end-pos=69:8 -source-filename %s | %FileCheck %s -check-prefix=CHECK14 // RUN: %target-swift-ide-test -range -pos=63:1 -end-pos=66:44 -source-filename %s | %FileCheck %s -check-prefix=CHECK15 // RUN: %target-swift-ide-test -range -pos=63:1 -end-pos=68:15 -source-filename %s | %FileCheck %s -check-prefix=CHECK16 // RUN: %target-swift-ide-test -range -pos=67:1 -end-pos=67:19 -source-filename %s | %FileCheck %s -check-prefix=CHECK17 // RUN: %target-swift-ide-test -range -pos=76:1 -end-pos=79:13 -source-filename %s | %FileCheck %s -check-prefix=CHECK18 // RUN: %target-swift-ide-test -range -pos=76:1 -end-pos=77:13 -source-filename %s | %FileCheck %s -check-prefix=CHECK19 // RUN: %target-swift-ide-test -range -pos=78:1 -end-pos=81:13 -source-filename %s | %FileCheck %s -check-prefix=CHECK20 // RUN: %target-swift-ide-test -range -pos=87:1 -end-pos=89:6 -source-filename %s | %FileCheck %s -check-prefix=CHECK21 // RUN: %target-swift-ide-test -range -pos=90:1 -end-pos=92:6 -source-filename %s | %FileCheck %s -check-prefix=CHECK22 // RUN: %target-swift-ide-test -range -pos=99:1 -end-pos=101:6 -source-filename %s | %FileCheck %s -check-prefix=CHECK23 // RUN: %target-swift-ide-test -range -pos=102:1 -end-pos=104:6 -source-filename %s | %FileCheck %s -check-prefix=CHECK24 // RUN: %target-swift-ide-test -range -pos=87:1 -end-pos=92:6 -source-filename %s | %FileCheck %s -check-prefix=CHECK25 // RUN: %target-swift-ide-test -range -pos=97:1 -end-pos=104:6 -source-filename %s | %FileCheck %s -check-prefix=CHECK26 // RUN: %target-swift-ide-test -range -pos=109:6 -end-pos=111:4 -source-filename %s | %FileCheck %s -check-prefix=CHECK-INVALID // RUN: %target-swift-ide-test -range -pos=114:1 -end-pos=115:15 -source-filename %s | %FileCheck %s -check-prefix=CHECK27 // RUN: %target-swift-ide-test -range -pos=118:1 -end-pos=119:15 -source-filename %s | %FileCheck %s -check-prefix=CHECK27 // RUN: %target-swift-ide-test -range -pos=126:11 -end-pos=126:12 -source-filename %s | %FileCheck %s -check-prefix=CHECK-INT-LVALUE // RUN: %target-swift-ide-test -range -pos=126:11 -end-pos=126:20 -source-filename %s | %FileCheck %s -check-prefix=CHECK-INT // RUN: %target-swift-ide-test -range -pos=127:7 -end-pos=127:8 -source-filename %s | %FileCheck %s -check-prefix=CHECK-INT-LVALUE // RUN: %target-swift-ide-test -range -pos=127:3 -end-pos=127:4 -source-filename %s | %FileCheck %s -check-prefix=CHECK-INT-LVALUE // RUN: %target-swift-ide-test -range -pos=128:13 -end-pos=128:15 -source-filename %s | %FileCheck %s -check-prefix=CHECK-INT-INOUT // RUN: %target-swift-ide-test -range -pos=118:1 -end-pos=120:22 -source-filename %s | %FileCheck %s -check-prefix=CHECK-INT // RUN: %target-swift-ide-test -range -pos=133:1 -end-pos=135:65 -source-filename %s | %FileCheck %s -check-prefix=CHECK-NO-PATTERN // RUN: %target-swift-ide-test -range -pos=142:12 -end-pos=142:17 -source-filename %s | %FileCheck %s -check-prefix=CHECK-X-Y // RUN: %target-swift-ide-test -range -pos=147:1 -end-pos=150:1 -source-filename %s | %FileCheck %s -check-prefix=CHECK-INVALID // RUN: %target-swift-ide-test -range -pos=163:5 -end-pos=164:38 -source-filename %s | %FileCheck %s -check-prefix=CHECK-PROPERTY-WRAPPER // CHECK-NO-PATTERN: MultiStatement // CHECK-NO-PATTERN-NEXT: for key in parameters.keys.sorted(by: <) { // CHECK-NO-PATTERN-NEXT: } // CHECK-NO-PATTERN-NEXT: return components.map { "\($0)=\($1)" }.joined(separator: "&") // CHECK-NO-PATTERN-NEXT: String // CHECK-NO-PATTERN-NEXT: swift_ide_test.(file).test_no_pattern_binding(_:) // CHECK-NO-PATTERN-NEXT: keyfalse // CHECK-NO-PATTERN-NEXT: parameters[String : Any] // CHECK-NO-PATTERN-NEXT: components[(String, String)] // CHECK-NO-PATTERN-NEXT: $0String // CHECK-NO-PATTERN-NEXT: $1String // CHECK-NO-PATTERN-NEXT: 2 // CHECK-NO-PATTERN-NEXT: // CHECK-INVALID: Invalid // CHECK-INT: Int // CHECK-INT-LVALUE: @lvalue Int // CHECK-INT-INOUT: inout Int // CHECK1: SingleDecl // CHECK1-NEXT: func foo1() -> Int { return 0 } // CHECK1-NEXT: swift_ide_test.(file) // CHECK1-NEXT: foo1false // CHECK1-NEXT: 1 // CHECK1-NEXT: // CHECK2: SingleDecl // CHECK2-NEXT: class C { func foo() {} } // CHECK2-NEXT: swift_ide_test.(file) // CHECK2-NEXT: Cfalse // CHECK2-NEXT: foofalse // CHECK2-NEXT: 1 // CHECK2-NEXT: // CHECK3: SingleDecl // CHECK3-NEXT: struct S { func foo() {} } // CHECK3-NEXT: swift_ide_test.(file) // CHECK3-NEXT: Sfalse // CHECK3-NEXT: foofalse // CHECK3-NEXT: 1 // CHECK3-NEXT: // CHECK4: MultiStatement // CHECK4-NEXT: aaa = aaa + 3 // CHECK4-NEXT: if aaa == 3 { aaa = 4 } // CHECK4-NEXT: Void // CHECK4-NEXT: swift_ide_test.(file).foo() // CHECK4-NEXT: aaa@lvalue Int // CHECK4-NEXT: 2 // CHECK4-NEXT: // CHECK5: MultiStatement // CHECK5-NEXT: aaa = aaa + 3 // CHECK5-NEXT: if aaa == 3 { aaa = 4 } // CHECK5-NEXT: return aaa // CHECK5-NEXT: Int // CHECK5-NEXT: swift_ide_test.(file).foo() // CHECK5-NEXT: aaa@lvalue Int // CHECK5-NEXT: 3 // CHECK5-NEXT: // CHECK6: MultiStatement // CHECK6-NEXT: if aaa == 3 { aaa = 4 } // CHECK6-NEXT: return aaa // CHECK6-NEXT: Int // CHECK6-NEXT: swift_ide_test.(file).foo() // CHECK6-NEXT: aaa@lvalue Int // CHECK6-NEXT: 2 // CHECK6-NEXT: // CHECK7: MultiStatement // CHECK7-NEXT: var b = a.bigEndian // CHECK7-NEXT: let c = a.byteSwapped // CHECK7-NEXT: b = b.bigEndian.bigEndian.byteSwapped // CHECK7-NEXT: print(b + c) // CHECK7-NEXT: Void // CHECK7-NEXT: swift_ide_test.(file).foo2() // CHECK7-NEXT: bfalse // CHECK7-NEXT: cfalse // CHECK7-NEXT: aInt // CHECK7-NEXT: b@lvalue Int // CHECK7-NEXT: cInt // CHECK7-NEXT: 4 // CHECK7-NEXT: // CHECK8: MultiStatement // CHECK8-NEXT: let c = s.foo() + b // CHECK8-NEXT: s = s.increment() // CHECK8-NEXT: return c + b // CHECK8-NEXT: Int // CHECK8-NEXT: swift_ide_test.(file).foo3(s:) // CHECK8-NEXT: cfalse // CHECK8-NEXT: s@lvalue S1 // CHECK8-NEXT: bInt // CHECK8-NEXT: cInt // CHECK8-NEXT: 3 // CHECK8-NEXT: // CHECK9: MultiStatement // CHECK9-NEXT: let b = s.a // CHECK9-NEXT: let c = s.foo() + b // CHECK9-NEXT: return c + b // CHECK9-NEXT: Int // CHECK9-NEXT: swift_ide_test.(file).foo4(s:) // CHECK9-NEXT: bfalse // CHECK9-NEXT: cfalse // CHECK9-NEXT: sS1 // CHECK9-NEXT: bInt // CHECK9-NEXT: cInt // CHECK9-NEXT: 3 // CHECK9-NEXT: // CHECK10: MultiStatement // CHECK10-NEXT: let a = c.c.getC().c.getC().getC().getC() // CHECK10-NEXT: let b = a.c.c.c.c.getC().getC() // CHECK10-NEXT: Void // CHECK10-NEXT: swift_ide_test.(file).foo5(c:) // CHECK10-NEXT: atrue // CHECK10-NEXT: btrue // CHECK10-NEXT: cC1 // CHECK10-NEXT: aC1 // CHECK10-NEXT: 2 // CHECK10-NEXT: // CHECK11: MultiStatement // CHECK11-NEXT: let a = c.c.getC().c.getC().getC().getC() // CHECK11-NEXT: let b = a.c.c.c.c.getC().getC() // CHECK11-NEXT: let d = a.c.getC().getC().c.c // CHECK11-NEXT: Void // CHECK11-NEXT: swift_ide_test.(file).foo5(c:) // CHECK11-NEXT: atrue // CHECK11-NEXT: btrue // CHECK11-NEXT: dtrue // CHECK11-NEXT: cC1 // CHECK11-NEXT: aC1 // CHECK11-NEXT: 3 // CHECK11-NEXT: // CHECK12: MultiStatement // CHECK12-NEXT: let a = c.c.getC().c.getC().getC().getC() // CHECK12-NEXT: let b = a.c.c.c.c.getC().getC() // CHECK12-NEXT: let d = a.c.getC().getC().c.c // CHECK12-NEXT: return a.take(another: b).take(another: d) // CHECK12-NEXT: C1 // CHECK12-NEXT: swift_ide_test.(file).foo5(c:) // CHECK12-NEXT: afalse // CHECK12-NEXT: bfalse // CHECK12-NEXT: dfalse // CHECK12-NEXT: cC1 // CHECK12-NEXT: aC1 // CHECK12-NEXT: bC1 // CHECK12-NEXT: dC1 // CHECK12-NEXT: 4 // CHECK12-NEXT: // CHECK13: MultiStatement // CHECK13-NEXT: let a = 3 // CHECK13-NEXT: var b = a.bigEndian // CHECK13-NEXT: let c = a.byteSwapped // CHECK13-NEXT: b = b.bigEndian.bigEndian.byteSwapped // CHECK13-NEXT: print(b + c) // CHECK13-NEXT: Void // CHECK13-NEXT: swift_ide_test.(file).foo6().explicit closure discriminator={{[0-9]+}} // CHECK13-NEXT: afalse // CHECK13-NEXT: bfalse // CHECK13-NEXT: cfalse // CHECK13-NEXT: aInt // CHECK13-NEXT: b@lvalue Int // CHECK13-NEXT: cInt // CHECK13-NEXT: 5 // CHECK13-NEXT: // CHECK14: MultiStatement // CHECK14-NEXT: let a = 3 // CHECK14-NEXT: var b = a.bigEndian // CHECK14-NEXT: let c = a.byteSwapped // CHECK14-NEXT: b = b.bigEndian.bigEndian.byteSwapped // CHECK14-NEXT: print(b + c) // CHECK14-NEXT: return { () -> Int in // CHECK14-NEXT: let a = 3 // CHECK14-NEXT: var b = a.bigEndian // CHECK14-NEXT: let c = a.byteSwapped // CHECK14-NEXT: b = b.bigEndian.bigEndian.byteSwapped // CHECK14-NEXT: print(b + c) // CHECK14-NEXT: return 1 // CHECK14-NEXT: }() // CHECK14-NEXT: Int // CHECK14-NEXT: swift_ide_test.(file).foo6().explicit closure discriminator={{[0-9]+}} // CHECK14-NEXT: afalse // CHECK14-NEXT: bfalse // CHECK14-NEXT: cfalse // CHECK14-NEXT: afalse // CHECK14-NEXT: bfalse // CHECK14-NEXT: cfalse // CHECK14-NEXT: aInt // CHECK14-NEXT: b@lvalue Int // CHECK14-NEXT: cInt // CHECK14-NEXT: aInt // CHECK14-NEXT: b@lvalue Int // CHECK14-NEXT: cInt // CHECK14-NEXT: 6 // CHECK14-NEXT: // CHECK15: MultiStatement // CHECK15-NEXT: let a = 3 // CHECK15-NEXT: var b = a.bigEndian // CHECK15-NEXT: let c = a.byteSwapped // CHECK15-NEXT: b = b.bigEndian.bigEndian.byteSwapped // CHECK15-NEXT: Void // CHECK15-NEXT: swift_ide_test.(file).foo6().explicit closure discriminator={{[0-9]+}}.explicit closure discriminator={{[0-9]+}} // CHECK15-NEXT: afalse // CHECK15-NEXT: btrue // CHECK15-NEXT: ctrue // CHECK15-NEXT: aInt // CHECK15-NEXT: b@lvalue Int // CHECK15-NEXT: 4 // CHECK15-NEXT: // CHECK16: MultiStatement // CHECK16-NEXT: let a = 3 // CHECK16-NEXT: var b = a.bigEndian // CHECK16-NEXT: let c = a.byteSwapped // CHECK16-NEXT: b = b.bigEndian.bigEndian.byteSwapped // CHECK16-NEXT: print(b + c) // CHECK16-NEXT: return 1 // CHECK16-NEXT: Int // CHECK16-NEXT: swift_ide_test.(file).foo6().explicit closure discriminator={{[0-9]+}}.explicit closure discriminator={{[0-9]+}} // CHECK16-NEXT: afalse // CHECK16-NEXT: bfalse // CHECK16-NEXT: cfalse // CHECK16-NEXT: aInt // CHECK16-NEXT: b@lvalue Int // CHECK16-NEXT: cInt // CHECK16-NEXT: 6 // CHECK16-NEXT: // CHECK17: SingleExpression // CHECK17-NEXT: print(b + c) // CHECK17-NEXT: () // CHECK17-NEXT: swift_ide_test.(file).foo6().explicit closure discriminator={{[0-9]+}}.explicit closure discriminator={{[0-9]+}} // CHECK17-NEXT: bInt // CHECK17-NEXT: cInt // CHECK17-NEXT: 1 // CHECK17-NEXT: // CHECK18: MultiStatement // CHECK18-NEXT: case 1: // CHECK18-NEXT: return 0 // CHECK18-NEXT: case 2: // CHECK18-NEXT: return 1 // CHECK18-NEXT: Void // CHECK18-NEXT: swift_ide_test.(file).foo7(a:) // CHECK18-NEXT: Multi // CHECK18-NEXT: 2 // CHECK18-NEXT: // CHECK19: SingleStatement // CHECK19-NEXT: case 1: // CHECK19-NEXT: return 0 // CHECK19-NEXT: Void // CHECK19-NEXT: swift_ide_test.(file).foo7(a:) // CHECK19-NEXT: 1 // CHECK19-NEXT: // CHECK20: MultiStatement // CHECK20-NEXT: case 2: // CHECK20-NEXT: return 1 // CHECK20-NEXT: default: // CHECK20-NEXT: return a // CHECK20-NEXT: Void // CHECK20-NEXT: swift_ide_test.(file).foo7(a:) // CHECK20-NEXT: Multi // CHECK20-NEXT: aInt // CHECK20-NEXT: 2 // CHECK20-NEXT: // CHECK21: Break // CHECK22: Continue // CHECK23: Continue // CHECK24: Break // CHECK25: Break // CHECK26: Continue // CHECK27: MultiStatement // CHECK27-NEXT: foo9(1, 2) // CHECK27-NEXT: foo9(1, 2) // CHECK27-NEXT: Void // CHECK27-NEXT: swift_ide_test.(file).foo9(_:_:) // CHECK27-NEXT: foo9(_ a: Int, _ b: Int) -> Int // CHECK27-NEXT: 2 // CHECK27-NEXT: // CHECK-X-Y: xInt // CHECK-X-Y: yInt // CHECK-PROPERTY-WRAPPER: SingleDecl // CHECK-PROPERTY-WRAPPER-NEXT: @Wrapper("something") // CHECK-PROPERTY-WRAPPER-NEXT: public static var somevar: String // CHECK-PROPERTY-WRAPPER-NEXT: swift_ide_test.(file).testPropertyWrapper().MyStruct // CHECK-PROPERTY-WRAPPER-NEXT: somevarfalse // CHECK-PROPERTY-WRAPPER-NEXT: 1 // CHECK-PROPERTY-WRAPPER-NEXT: