// RUN: %target-swift-ide-test -annotate -source-filename %s | %FileCheck %s // CHECK: import struct Swift.Int import struct Swift.Int // CHECK: import func Swift.print_new import func Swift.print_new // CHECK: struct S { // CHECK-NEXT: var x: Int = 0 // CHECK-NEXT: var y: Swift.Int = 0 // CHECK-NEXT: } struct S { var x: Int = 0 var y: Swift.Int = 0 } // CHECK: typealias TypealiasForS = S typealias TypealiasForS = S func test6(p: S) { // CHECK: p.x + 0 p.x + 0 } // CHECK: struct PropagatedTypesInPatterns { // CHECK-NEXT: var a, b: Int // CHECK-NEXT: var c: Int, d, e: Double // CHECK-NEXT: var f, g, h: Int, i: Float, j, k, l, m: Double // CHECK-NEXT: var (x, y): (Int, Float) // CHECK-NEXT: } struct PropagatedTypesInPatterns { var a, b: Int var c: Int, d, e: Double var f, g, h: Int, i: Float, j, k, l, m: Double var (x, y): (Int, Float) } // CHECK: class MyCls { // CHECK: var www : Int // CHECK: func foo(_ x : Int) {} // CHECK: } class MyCls { var www : Int = 0 func foo(_ x : Int) {} } // CHECK: func foo(n : Float) -> Int { // CHECK: var q = MyCls() // CHECK: var ee = "yoo"; // CHECK: return 100009 // CHECK: } func foo(n : Float) -> Int { var q = MyCls() var ee = "yoo"; return 100009 } // CHECK-LABEL: protocol Prot { // CHECK-NEXT: associatedtype Blarg // CHECK-NEXT: func protMeth(_ x: Int) // CHECK-NEXT: var protocolProperty1: Int { get } // CHECK-NEXT: var protocolProperty2: Int { get set } // CHECK-NEXT: } protocol Prot { associatedtype Blarg func protMeth(_ x: Int) var protocolProperty1: Int { get } var protocolProperty2: Int { get set } } // CHECK: protocol Prot2 {} protocol Prot2 {} // CHECK: class SubCls : MyCls, Prot { // CHECK: typealias Blarg = Prot2 // CHECK: func protMeth(_ x: Int) {} // CHECK: } class SubCls : MyCls, Prot { typealias Blarg = Prot2 func protMeth(_ x: Int) {} var protocolProperty1 = 0 var protocolProperty2 = 0 } // CHECK: func genFn<T : Prot>(_ p : T) -> Int where T.Blarg : Prot2 {}{{$}} func genFn(_ p : T) -> Int where T.Blarg : Prot2 {} func test(_ x: Int) { // CHECK: genFn(SubCls()) genFn(SubCls()) // CHECK: "This is string \(genFn({(a:Int) in SubCls()}(x))) interpolation" "This is string \(genFn({(a:Int) in SubCls()}(x))) interpolation" } // CHECK: func bar(x: Int) -> (Int, Float) { func bar(x: Int) -> (Int, Float) { // CHECK: TypealiasForS() _ = TypealiasForS() } class C2 { typealias WW = Int var p = 0 func meth(_ x: Int) {} } func test2(x: C2) { // CHECK: x.meth(0) x.meth(0) } // CHECK: class GenCls<T> { class GenCls { // CHECK: init() {} init() {} // CHECK: subscript (i : Int, j : Int) -> Int { subscript (i : Int, j : Int) -> Int { get { // CHECK: return i + j return i + j } // CHECK: set(v) { set(v) { // CHECK: v + i - j v + i - j } } } func test2() { // CHECK: GenCls<Int>() GenCls() } func test3(name: Int, x: Int) { // CHECK: x = 0 name = 0; x = 0 } class C4 { class In { class func goo() {} class func foo() { // CHECK: In.goo() In.goo() // CHECK: C4.In.goo() C4.In.goo() // CHECK: C4.In() C4.In() } } } class GenC { class func foo() {} } func test4() { // CHECK: GenC<Int, TypealiasForS>.foo() GenC.foo() } class C5 {} protocol P5 {} // CHECK: extension C5 : P5 {} extension C5 : P5 {} extension Array : P5 {} // CHECK: extension Array : P5 {} extension Optional : P5 {} // CHECK: extension Optional : P5 {} class C6 { func meth() { // CHECK: meth2() meth2() // CHECK: self.meth2() self.meth2(); } func meth2() {} } func test5() { var x: Int // CHECK: for i in 1..<100 { for i in 1..<100 { // CHECK: x = i x = i } } class C7 { var c7ivar: Int func meth(_ p: Undeclared) { // CHECK: c7ivar = 0 c7ivar = 0 } } class C8 { init(_ x: Int) { // CHECK: self.init(1) self.init(1) } } class SubC8 : C8 { init(x: Int) { // CHECK: super.init(2) super.init(2) } } class Observers { func doit() {} var p1 : Int { // CHECK: willSet(newValue) { doit() } willSet(newValue) { doit() } // CHECK: didSet { doit() } didSet { doit() } } } class C9 {} // CHECK: func test6(_ o: AnyObject) { func test6(_ o: AnyObject) { // CHECK: let x = o as! C9 let x = o as! C9 } // CHECK: enum myCoolEnum { enum myCoolEnum { // CHECK: case water case water // CHECK-NEXT: case case } // rdar://19614869, do not crash class E { lazy var u: T { return 1 } } class C10 { init(int: Int, andThis: Float) {} func meth(_ x: Int, withFloat: Float) {} } // CHECK: var c10 = C10(int: 0, andThis: 0) var c10 = C10(int: 0, andThis: 0) // CHECK: c10.meth(0, withFloat: 0) c10.meth(0, withFloat: 0) func test7(int x: Int, andThis y: Float) {} // CHECK: test7(int: 0, andThis: 0) test7(int: 0, andThis: 0) func test8(_ x: T) {} // CHECK: func test8<T : Prot2>(_ x: T) {}{{$}} class C11 { // CHECK: var a: Int = { var tmp = 0; return tmp }() var a: Int = { var tmp = 0; return tmp }() // CHECK: lazy var b: Int = { var tmp = 0; return tmp }() lazy var b: Int = { var tmp = 0; return tmp }() // CHECK: var c: Int { get { {var tmp = 0; return tmp}() } } var c: Int { get { {var tmp = 0; return tmp}() } } } // CHECK: var g1 = { (x: Int) -> Int in return 0 } var g1 = { (x: Int) -> Int in return 0 } class C12 { class Inn {} typealias AliasInn = Inn } typealias AliasC12 = C12 // CHECK: extension C12.Inn {} extension C12.Inn {} // CHECK: extension AliasC12.AliasInn {} extension AliasC12.AliasInn {} typealias AliasPH = C12 func testPH(_ x: Int) {} func testPH(_ x: AliasPH) {} // CHECK: testPH(<#T##x: AliasPH##AliasPH##C12#>) testPH(<#T##x: AliasPH##AliasPH##C12#>) class NumberTooLarge {} // CHECK: guard case let error as NumberTooLarge = NumberTooLarge() else {} guard case let error as NumberTooLarge = NumberTooLarge() else {} // CHECK: testMod(_ x: Swift.String) { func testMod(_ x: Swift.String) { // CHECK: let x = Swift let x = Swift } func +(a: C12, b: C12) {} func test9(a: C12, b: C12) { // CHECK: a+b a+b } func test10(a: [Int], i: Int) { // CHECK: a[i] a[i] } class CWS { subscript (i : Int, j : Int) -> Int { return 0 } } func test11(a: CWS, i: Int) { // CHECK: a[i,i] a[i,i] } // CHECK: func test_defer() { func test_defer() { defer { // CHECK: test_defer() test_defer() } } func test_arg_tuple1(_: Int, _: Int) {} func test_arg_tuple2(p1: Int, _: Int) {} func test_arg_tuple3(_: Int, p2: Int) {} func test_arg_tuple4(p1: Int, p2: Int) {} // CHECK: test_arg_tuple1(0,0) test_arg_tuple1(0,0) // CHECK: test_arg_tuple2(p1:0,0) test_arg_tuple2(p1:0,0) // CHECK: test_arg_tuple3(0,p2:0) test_arg_tuple3(0,p2:0) // CHECK: test_arg_tuple4(p1:0,p2:0) test_arg_tuple4(p1:0,p2:0) @dynamicMemberLookup struct Lens { var obj: T init(_ obj: T) { self.obj = obj } subscript(dynamicMember member: WritableKeyPath) -> Lens { get { return Lens(obj[keyPath: member]) } set { obj[keyPath: member] = newValue.obj } } } struct Point { var x: Int var y: Int } struct Rectangle { var topLeft: Point var bottomRight: Point } func testDynamicMemberLookup(r: Lens) { _ = r.topLeft // CHECK: _ = r.topLeft _ = r.bottomRight.y // CHECK: _ = r.bottomRight.y } func keyPathTester(keyPath: KeyPath, V>) {} func testKeyPath() { keyPathTester(keyPath: \.topLeft) // CHECK: keyPathTester(keyPath: \.topLeft) }