// RUN: %target-repl-run-simple-swift | FileCheck %s // REQUIRES: swift_repl :print_decl String // CHECK: struct String // CHECK: extension String : StringInterpolationConvertible false // CHECK: Bool = false (1,2) // CHECK: (Int, Int) = (1, 2) print(10) print(10) // CHECK: 10 // CHECK-NEXT: 10 func f() { print("Hello") } f() // CHECK: Hello 102 // CHECK: Int = 102 var x = 1 // CHECK: x : Int = 1 (x, 2) // CHECK: (Int, Int) = (1, 2) var (_, y) = (x,2) // CHECK: (_, y) : (Int, Int) = (1, 2) var aString = String() // CHECK: aString : String = "" "\n\r\t\"' abcd\u{45}\u{01}" // CHECK: "\n\r\t\"\' abcdE\u{01}" String(-1) // CHECK: String = "-1" String(-112312312) // CHECK: String = "-112312312" String(4.0) // CHECK: String = "4.0" 1 + 44 // CHECK: Int = 45{{$}} 123 . hashValue // CHECK: Int = 123{{$}} // Check that we handle unmatched parentheses in REPL. 1+1) var z = 44 +z // CHECK: Int = 44{{$}} +44 // CHECK: Int = 44{{$}} typealias Foo = Int var f1 : Foo = 1 var f44 : Foo = 44 f1 + f44 // CHECK: Foo = 45{{$}} +(f44) // CHECK: Foo = 44{{$}} 1.5 // CHECK: Double = 1.5{{$}} 1.5+2.25 // CHECK: Double = 3.75{{$}} +1.75 // CHECK: Double = 1.75{{$}} -1.75 // CHECK: Double = -1.75{{$}} func r13792487(x: Float64) -> Float64 { return x } r13792487(1234.0) // CHECK: Float64 = 1234.0{{$}} r13792487(1234) // CHECK: Float64 = 1234.0{{$}} var ab = (1, 2) // CHECK: (Int, Int) = (1, 2) var ba = (y:1, x:2) var f2 : Foo = 2 var xy = (f1, f2) // CHECK: (Foo, Foo) = (1, 2) var yx = (y:f1, x:f2) func sub(x x: Int, y: Int) -> Int { return x - y } sub(x:1, y:2) // CHECK: Int = -1 sub(x:f1, y:f2) // CHECK: Foo = -1 var array = [1, 2, 3, 4, 5] // CHECK: array : [Int] = [1, 2, 3, 4, 5] var dict = [ "Hello" : 1.5 ] // CHECK: dict : [String : Double] = ["Hello": 1.5] 0..<10 // FIXME: Disabled CHECK for Range = 0...10 until we get general printing going // FIXME: Disabled CHECK for 0...10 pending // (Implement overload resolution) // Don't crash on this. rdar://14912363 -2...-1 -2 ... -1 // r2 : Range = -2...-1 String(0) // CHECK: "0" for i in 0..<10 { print(i); } // CHECK: 0 // CHECK-NEXT: 1 // CHECK-NEXT: 2 // CHECK-NEXT: 3 // CHECK-NEXT: 4 // CHECK-NEXT: 5 // CHECK-NEXT: 6 // CHECK-NEXT: 7 // CHECK-NEXT: 8 // CHECK-NEXT: 9 for i in 0..<10 { print(i); } // CHECK: 0 // CHECK-NEXT: 1 // CHECK-NEXT: 2 // CHECK-NEXT: 3 // CHECK-NEXT: 4 // CHECK-NEXT: 5 // CHECK-NEXT: 6 // CHECK-NEXT: 7 // CHECK-NEXT: 8 // CHECK-NEXT: 9 for c in "foobar".unicodeScalars { print(c) } // CHECK: f // CHECK-NEXT: o // CHECK-NEXT: o // CHECK-NEXT: b // CHECK-NEXT: a // CHECK-NEXT: r var vec = Array() // CHECK: vec : Array = [] // Error recovery var a : [int] var a = [Int]() var b = a.slice[3..<5] struct Inner {} struct Outer { var inner : Inner } Outer(inner: Inner()) // CHECK: Outer = REPL.Outer struct ContainsSlice { var slice : [Int] } ContainsSlice(slice: [1, 2, 3]) // CHECK: ContainsSlice = REPL.ContainsSlice struct ContainsGenericSlice { var slice : [T] } ContainsGenericSlice(slice: [1, 2, 3]) // CHECK: ContainsGenericSlice = REPL.ContainsGenericSlice ContainsGenericSlice(slice: [(1, 2), (3, 4)]) // CHECK: ContainsGenericSlice<(Int, Int)> = REPL.ContainsGenericSlice struct ContainsContainsSlice { var containsSlice : ContainsSlice } ContainsContainsSlice(containsSlice: ContainsSlice(slice: [1, 2, 3])) // CHECK: ContainsContainsSlice = REPL.ContainsContainsSlice protocol Proto { func foo() } extension Double : Proto { func foo() { print("Double: \(self)\n", terminator: "") } } var pr : Proto = 3.14159 // CHECK: Double: 3.14159 pr.foo() // erroneous; we'll try again after adding the conformance pr = "foo" extension String : Proto { func foo() { print("String: \(self)\n", terminator: "") } } pr = "foo" // CHECK: String: foo pr.foo() var _ : ([Int]).Type = [4].dynamicType // CHECK: : ([Int]).Type var _ : (Int -> Int)? = .none // CHECK: : (Int -> Int)? func chained(f f: Int -> ()) -> Int { return 0 } chained // CHECK: : (f: Int -> ()) -> Int [chained] // CHECK: : [(f: Int -> ()) -> Int] ({97210}()) // CHECK: = 97210 true && true // CHECK: = true if ({true}()) { print("yeah1") } // CHECK: yeah1 if true && true { print("yeah2") } // CHECK: yeah2 if true && true { if true && true { print("yeah3") } } // CHECK: yeah3 if true && (true && true) { if true && (true && true) { print("yeah4") } } // CHECK: yeah4 if true && true { if true && true { print(true && true) } } // CHECK: true "ok" // CHECK: = "ok"