// 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)
}