Backend support for function expression

This commit is contained in:
Stanislav Erokhin
2015-02-05 21:27:52 +03:00
parent 44895a23cf
commit a89b48c577
10 changed files with 159 additions and 25 deletions
@@ -1,25 +1,32 @@
fun Any.foo1() : ()-> String {
return { "239" + this }
val foo1 = fun Any.(): String {
return "239" + this
}
fun Int.foo2() : (i : Int) -> Int {
return { x -> x + this }
}
val foo2 = fun Int.(i : Int) : Int = this + i
fun fooT1<T>(t : T) = { t.toString() }
fun <T> fooT1() = fun (t : T) = t.toString()
fun fooT2<T>(t: T) = { (x:T) -> t.toString() + x.toString() }
annotation class A
fun box() : String {
if( (10.foo1())() != "23910") return "foo1 fail"
if( (10.foo2())(1) != 11 ) return "foo2 fail"
if(10.foo1() != "23910") return "foo1 fail"
if(10.foo2(1) != 11) return "foo2 fail"
if(1.{Int.() -> this + 1}() != 2) return "test 3 failed";
if( {1}() != 1) return "test 4 failed";
if( {(x : Int) -> x}(1) != 1) return "test 5 failed";
if( 1.{Int.(x : Int) -> x + this}(1) != 2) return "test 6 failed";
if( 1.({Int.() -> this})() != 1) return "test 7 failed";
if( (fooT1<String>("mama"))() != "mama") return "test 8 failed";
if( (fooT2<String>("mama"))("papa") != "mamapapa") return "test 9 failed";
return "OK"
if(1.(fun Int.() = this + 1)() != 2) return "test 3 failed";
if( (fun () = 1)() != 1) return "test 4 failed";
if( (fun (i: Int) = i)(1) != 1) return "test 5 failed";
if( 1.(fun Int.(i: Int) = i + this)(1) != 2) return "test 6 failed";
if( (fooT1<String>()("mama")) != "mama") return "test 7 failed";
val a = [A] fun Int.() = this + 1 //
if (1.a() != 2) return "test 8 failed"
val b = ( fun Int.() = this + 1)
if (1.a() != 2) return "test 9 failed"
val c = (@c fun Int.() = this + 1)
if (1.a() != 2) return "test 10 failed"
val d = @d fun (): Int { return@d 4}
if (d() != 4) return "test 11 failed"
return "OK"
}