set explicit receiver kind properly for calls

This commit is contained in:
Svetlana Isakova
2013-12-04 18:28:08 +04:00
parent cf5174d798
commit 928f77ffce
26 changed files with 612 additions and 35 deletions
@@ -0,0 +1,12 @@
// !CALL: invoke
// !EXPLICIT_RECEIVER_KIND: BOTH_RECEIVERS
// !THIS_OBJECT: f
// !RECEIVER_ARGUMENT: 1
class Foo() {
fun Int.invoke() {}
}
fun bar(f: Foo) {
1.f()
}
@@ -0,0 +1,16 @@
// !CALL: invoke
// !EXPLICIT_RECEIVER_KIND: THIS_OBJECT
// !THIS_OBJECT: f
// !RECEIVER_ARGUMENT: Int
class Foo() {
fun Int.invoke() {}
}
fun bar(f: Foo, i: Int) {
with (i) {
f()
}
}
fun <T, R> with(receiver: T, f: T.() -> R) : R = throw Exception()
@@ -0,0 +1,11 @@
// !CALL: invoke
// !EXPLICIT_RECEIVER_KIND: RECEIVER_ARGUMENT
// !THIS_OBJECT: NO_RECEIVER
// !RECEIVER_ARGUMENT: f
class Foo
fun Foo.invoke() {}
fun bar(f: Foo) {
f()
}
@@ -0,0 +1,12 @@
// !CALL: invoke
// !EXPLICIT_RECEIVER_KIND: THIS_OBJECT
// !THIS_OBJECT: f
// !RECEIVER_ARGUMENT: NO_RECEIVER
class Foo {
fun invoke() {}
}
fun bar(f: Foo) {
f()
}