set explicit receiver kind properly for calls
This commit is contained in:
@@ -0,0 +1,12 @@
|
||||
// !CALL: foo
|
||||
// !EXPLICIT_RECEIVER_KIND: RECEIVER_ARGUMENT
|
||||
// !THIS_OBJECT: NO_RECEIVER
|
||||
// !RECEIVER_ARGUMENT: a
|
||||
|
||||
class A {}
|
||||
|
||||
fun A.foo() {}
|
||||
|
||||
fun bar(a: A) {
|
||||
a.foo()
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
// !CALL: foo
|
||||
// !EXPLICIT_RECEIVER_KIND: THIS_OBJECT
|
||||
// !THIS_OBJECT: a
|
||||
// !RECEIVER_ARGUMENT: NO_RECEIVER
|
||||
|
||||
class A {
|
||||
fun foo() {}
|
||||
}
|
||||
|
||||
fun bar(a: A) {
|
||||
a.foo()
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// !CALL: invoke
|
||||
// !EXPLICIT_RECEIVER_KIND: BOTH_RECEIVERS
|
||||
// !THIS_OBJECT: f
|
||||
// !RECEIVER_ARGUMENT: 1
|
||||
|
||||
fun bar(f: Int.()->Unit) {
|
||||
1.f()
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
// !CALL: invoke
|
||||
// !EXPLICIT_RECEIVER_KIND: THIS_OBJECT
|
||||
// !THIS_OBJECT: f
|
||||
// !RECEIVER_ARGUMENT: NO_RECEIVER
|
||||
|
||||
fun bar(f: ()->Unit) {
|
||||
f()
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
// !CALL: foo
|
||||
// !EXPLICIT_RECEIVER_KIND: NO_EXPLICIT_RECEIVER
|
||||
// !THIS_OBJECT: Class{A}
|
||||
// !RECEIVER_ARGUMENT: NO_RECEIVER
|
||||
|
||||
trait A {
|
||||
val foo: Int.()->Unit
|
||||
|
||||
fun test() {
|
||||
1.foo()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
// !CALL: invoke
|
||||
// !EXPLICIT_RECEIVER_KIND: BOTH_RECEIVERS
|
||||
// !THIS_OBJECT: foo
|
||||
// !RECEIVER_ARGUMENT: 1
|
||||
|
||||
trait A {
|
||||
val foo: Int.()->Unit
|
||||
|
||||
fun test() {
|
||||
1.foo()
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
// !CALL: foo
|
||||
// !EXPLICIT_RECEIVER_KIND: THIS_OBJECT
|
||||
// !THIS_OBJECT: a
|
||||
// !RECEIVER_ARGUMENT: NO_RECEIVER
|
||||
|
||||
trait A {
|
||||
val foo: (Int)->Int
|
||||
}
|
||||
|
||||
fun test(a: A) {
|
||||
a.foo(1)
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
// !CALL: invoke
|
||||
// !EXPLICIT_RECEIVER_KIND: THIS_OBJECT
|
||||
// !THIS_OBJECT: foo
|
||||
// !RECEIVER_ARGUMENT: NO_RECEIVER
|
||||
|
||||
trait A {
|
||||
val foo: (Int)->Int
|
||||
}
|
||||
|
||||
fun test(a: A) {
|
||||
a.foo(1)
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
// !CALL: foo
|
||||
// !EXPLICIT_RECEIVER_KIND: RECEIVER_ARGUMENT
|
||||
// !THIS_OBJECT: A
|
||||
// !RECEIVER_ARGUMENT: b
|
||||
|
||||
class A {
|
||||
fun B.foo() {}
|
||||
}
|
||||
|
||||
trait B
|
||||
|
||||
fun bar(a: A, b: B) {
|
||||
with (a) {
|
||||
b.foo()
|
||||
}
|
||||
}
|
||||
|
||||
fun <T, R> with(receiver: T, f: T.() -> R) : R = receiver.f()
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
// !CALL: foo
|
||||
// !EXPLICIT_RECEIVER_KIND: NO_EXPLICIT_RECEIVER
|
||||
// !THIS_OBJECT: A
|
||||
// !RECEIVER_ARGUMENT: B
|
||||
|
||||
class A {
|
||||
fun B.foo() {}
|
||||
}
|
||||
|
||||
trait B
|
||||
|
||||
fun bar(a: A, b: B) {
|
||||
with (a) {
|
||||
with (b) {
|
||||
foo()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fun <T, R> with(receiver: T, f: T.() -> R) : R = receiver.f()
|
||||
@@ -0,0 +1,12 @@
|
||||
// !CALL: foo
|
||||
// !EXPLICIT_RECEIVER_KIND: NO_EXPLICIT_RECEIVER
|
||||
// !THIS_OBJECT: NO_RECEIVER
|
||||
// !RECEIVER_ARGUMENT: A
|
||||
|
||||
class A {}
|
||||
|
||||
fun A.foo() {}
|
||||
|
||||
fun A.bar() {
|
||||
foo()
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
// !CALL: foo
|
||||
// !EXPLICIT_RECEIVER_KIND: NO_EXPLICIT_RECEIVER
|
||||
// !THIS_OBJECT: A
|
||||
// !RECEIVER_ARGUMENT: NO_RECEIVER
|
||||
|
||||
class A {
|
||||
fun foo() {}
|
||||
}
|
||||
|
||||
fun A.bar() {
|
||||
foo()
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
// !CALL: foo
|
||||
// !EXPLICIT_RECEIVER_KIND: NO_EXPLICIT_RECEIVER
|
||||
// !THIS_OBJECT: Class{A}
|
||||
// !RECEIVER_ARGUMENT: NO_RECEIVER
|
||||
|
||||
class A {
|
||||
fun foo() {}
|
||||
fun bar() {
|
||||
foo()
|
||||
}
|
||||
}
|
||||
@@ -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()
|
||||
}
|
||||
@@ -0,0 +1,44 @@
|
||||
// !CALL: +
|
||||
// !EXPLICIT_RECEIVER_KIND: RECEIVER_ARGUMENT
|
||||
// !THIS_OBJECT: Title
|
||||
// !RECEIVER_ARGUMENT: "Foo"
|
||||
|
||||
trait Element {
|
||||
fun render(builder: StringBuilder, indent: String)
|
||||
}
|
||||
|
||||
class TextElement(val text: String): Element {
|
||||
override fun render(builder: StringBuilder, indent: String): Unit = fail
|
||||
}
|
||||
|
||||
abstract class Tag(val name: String): Element {
|
||||
protected fun initTag<T: Element>(tag: T, init: T.() -> Unit): T = fail
|
||||
|
||||
override fun render(builder: StringBuilder, indent: String): Unit = fail
|
||||
}
|
||||
|
||||
abstract class TagWithText(name: String): Tag(name) {
|
||||
fun String.plus() {}
|
||||
}
|
||||
|
||||
class HTML(): TagWithText("html") {
|
||||
fun head(init: Head.() -> Unit): Head = fail
|
||||
|
||||
}
|
||||
|
||||
class Head(): TagWithText("head") {
|
||||
fun title(init: Title.() -> Unit): Title = fail
|
||||
}
|
||||
|
||||
class Title(): TagWithText("title")
|
||||
|
||||
fun html(init: HTML.() -> Unit): HTML = fail
|
||||
|
||||
fun result() =
|
||||
html {
|
||||
head {
|
||||
title {+"Foo"}
|
||||
}
|
||||
}
|
||||
|
||||
val fail: Nothing get() = throw Exception()
|
||||
@@ -0,0 +1,10 @@
|
||||
// !CALL: foo
|
||||
// !EXPLICIT_RECEIVER_KIND: NO_EXPLICIT_RECEIVER
|
||||
// !THIS_OBJECT: NO_RECEIVER
|
||||
// !RECEIVER_ARGUMENT: NO_RECEIVER
|
||||
|
||||
fun foo() {}
|
||||
|
||||
fun bar() {
|
||||
foo()
|
||||
}
|
||||
Reference in New Issue
Block a user