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: