mirror of
https://github.com/apple/swift.git
synced 2025-12-21 12:14:44 +01:00
This fixes <rdar://problem/20494437> SILGen crash handling default arguments again, and includes a fix for MiscDiagnostics to look through the generated TupleShuffleExprs in @noescape processing (which tripped up XCTest). This fixes <rdar://problem/16860940> QoI: Strict keyword arguments loses type sugar in calls where we'd lose some type sugar. This fixes sanity in the ASTs: ScalarToTupleExpr now always has consistent types between its argument and result, so we can turn on AST Verification of it. Swift SVN r27827
225 lines
4.5 KiB
Swift
225 lines
4.5 KiB
Swift
// 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)
|
|
println(10)
|
|
println(10)
|
|
// CHECK: 10
|
|
// CHECK-NEXT: 10
|
|
|
|
func f() {
|
|
println("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: Double = 1234.0{{$}}
|
|
r13792487(1234)
|
|
// CHECK: Double = 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: 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<Int> = 0...10 until we get general printing going
|
|
// FIXME: Disabled CHECK for 0...10 pending <rdar://problem/11510876>
|
|
// (Implement overload resolution)
|
|
|
|
// Don't crash on this. rdar://14912363
|
|
-2...-1
|
|
|
|
-2 ... -1
|
|
// r2 : Range<Int> = -2...-1
|
|
|
|
String(0)
|
|
// CHECK: "0"
|
|
|
|
for i in 0..<10 { println(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 { println(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); println("") }
|
|
// CHECK: f
|
|
// CHECK-NEXT: o
|
|
// CHECK-NEXT: o
|
|
// CHECK-NEXT: b
|
|
// CHECK-NEXT: a
|
|
// CHECK-NEXT: r
|
|
|
|
var vec = Array<String>()
|
|
// CHECK: vec : Array<String> = []
|
|
|
|
// Error recovery
|
|
var a : [int]
|
|
var a = [Int]()
|
|
var b = a.slice[3..<5]
|
|
|
|
struct Inner<T> {}
|
|
struct Outer<T> { var inner : Inner<T> }
|
|
Outer<Int>(inner: Inner()) // CHECK: Outer<Int> = REPL.Outer
|
|
|
|
struct ContainsSlice { var slice : [Int] }
|
|
ContainsSlice(slice: [1, 2, 3]) // CHECK: ContainsSlice = REPL.ContainsSlice
|
|
|
|
struct ContainsGenericSlice<T> { var slice : [T] }
|
|
ContainsGenericSlice(slice: [1, 2, 3]) // CHECK: ContainsGenericSlice<Int> = 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")
|
|
}
|
|
}
|
|
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")
|
|
}
|
|
}
|
|
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: Int -> ()) -> Int { return 0 }
|
|
chained
|
|
// CHECK: : (f: Int -> ()) -> Int
|
|
[chained]
|
|
// CHECK: : [(f: Int -> ()) -> Int]
|
|
|
|
({97210}())
|
|
// CHECK: = 97210
|
|
true && true
|
|
// CHECK: = true
|
|
|
|
if ({true}()) { println("yeah1") }
|
|
// CHECK: yeah1
|
|
if true && true { println("yeah2") }
|
|
// CHECK: yeah2
|
|
if true && true { if true && true { println("yeah3") } }
|
|
// CHECK: yeah3
|
|
if true && (true && true) { if true && (true && true) { println("yeah4") } }
|
|
// CHECK: yeah4
|
|
if true && true { if true && true { println(true && true) } }
|
|
// CHECK: true
|
|
|
|
"ok"
|
|
// CHECK: = "ok"
|
|
|