| // RUN: %target-parse-verify-swift |
| |
| func takeIntToInt(f: (Int) -> Int) { } |
| func takeIntIntToInt(f: (Int, Int) -> Int) { } |
| |
| // Simple closures |
| func simple() { |
| takeIntToInt({(x: Int) -> Int in |
| return x + 1 |
| }) |
| takeIntIntToInt({(x: Int, y: Int) -> Int in |
| return x + y |
| }) |
| } |
| |
| // Closures with variadic argument lists |
| func variadic() { |
| var f = {(start: Int, rest: Int...) -> Int in |
| var result = start |
| for x in rest { |
| result += x |
| } |
| return result |
| } |
| f(1) |
| f(1, 2) |
| f(1, 3) |
| |
| let D = { (Ss ...) in 1 } // expected-error{{'...' cannot be applied to a subpattern which is not explicitly typed}}, expected-error{{unable to infer closure type in the current context}} |
| } |
| |
| // Closures with attributes in the parameter list. |
| func attrs() { |
| _ = {(inout z: Int) -> Int in z } |
| } |
| |
| // Closures with argument and parameter names. |
| func argAndParamNames() -> Int { |
| let f1: (x: Int, y: Int) -> Int = { (a x, b y) in x + y } |
| f1(x: 1, y: 2) |
| return f1(x: 1, y: 2) |
| } |