FIR resolve: add partial support of extension lambda calls
Here we introduce ONLY_IMPLICIT_RECEIVER tower level to support extension lambda calls on local variables, and soften extension receiver checks to make such extensions visible & applicable. Also here we try to map arguments twice for functional types
This commit is contained in:
@@ -5,8 +5,8 @@ inline fun inlineFunWithInvoke(s: (p: Int) -> Unit, ext: Int.(p: Int) -> Unit) {
|
||||
s.invoke(11)
|
||||
s invoke 11
|
||||
|
||||
11.<!UNRESOLVED_REFERENCE!>ext<!>(11)
|
||||
11 <!UNRESOLVED_REFERENCE!>ext<!> 11
|
||||
11.ext(11)
|
||||
11 ext 11
|
||||
}
|
||||
|
||||
inline fun inlineFunWithInvokeNonInline(noinline s: (p: Int) -> Unit, ext: Int.(p: Int) -> Unit) {
|
||||
@@ -14,8 +14,8 @@ inline fun inlineFunWithInvokeNonInline(noinline s: (p: Int) -> Unit, ext: Int.(
|
||||
s.invoke(11)
|
||||
s invoke 11
|
||||
|
||||
11.<!UNRESOLVED_REFERENCE!>ext<!>(11)
|
||||
11 <!UNRESOLVED_REFERENCE!>ext<!> 11
|
||||
11.ext(11)
|
||||
11 ext 11
|
||||
}
|
||||
|
||||
inline fun Function1<Int, Unit>.inlineExt() {
|
||||
|
||||
@@ -6,8 +6,8 @@ inline fun inlineFunWithInvoke(s: (p: Int) -> Unit, ext: Int.(p: Int) -> Unit) {
|
||||
}
|
||||
|
||||
inline fun inlineFunWithInvokeClosure(s: (p: Int) -> Unit, ext: Int.(p: Int) -> Unit) {
|
||||
subInline({p: Int -> s(p)}, { p -> this.<!UNRESOLVED_REFERENCE!>ext<!>(p)})
|
||||
subNoInline({p: Int -> s(p)}, { p -> this.<!UNRESOLVED_REFERENCE!>ext<!>(p)})
|
||||
subInline({p: Int -> s(p)}, { p -> this.ext(p)})
|
||||
subNoInline({p: Int -> s(p)}, { p -> this.ext(p)})
|
||||
}
|
||||
|
||||
//No inline
|
||||
@@ -17,8 +17,8 @@ inline fun inlineFunWithInvokeNonInline(noinline s: (p: Int) -> Unit, noinline e
|
||||
}
|
||||
|
||||
inline fun inlineFunWithInvokeClosureNoinline(noinline s: (p: Int) -> Unit, noinline ext: Int.(p: Int) -> Unit) {
|
||||
subInline({p: Int -> s(p)}, { p -> this.<!UNRESOLVED_REFERENCE!>ext<!>(p)})
|
||||
subNoInline({p: Int -> s(p)}, { p -> this.<!UNRESOLVED_REFERENCE!>ext<!>(p)})
|
||||
subInline({p: Int -> s(p)}, { p -> this.ext(p)})
|
||||
subNoInline({p: Int -> s(p)}, { p -> this.ext(p)})
|
||||
}
|
||||
|
||||
//ext function
|
||||
@@ -28,8 +28,8 @@ inline fun Function1<Int, Unit>.inlineExt(ext: Int.(p: Int) -> Unit) {
|
||||
}
|
||||
|
||||
inline fun Function1<Int, Unit>.inlineExtWithClosure(ext: Int.(p: Int) -> Unit) {
|
||||
subInline({p: Int -> this(p)}, { p -> this.<!UNRESOLVED_REFERENCE!>ext<!>(p)})
|
||||
subNoInline({p: Int -> this(p)}, { p -> this.<!UNRESOLVED_REFERENCE!>ext<!>(p)})
|
||||
subInline({p: Int -> this(p)}, { p -> this.ext(p)})
|
||||
subNoInline({p: Int -> this(p)}, { p -> this.ext(p)})
|
||||
}
|
||||
|
||||
inline fun subInline(s: (p: Int) -> Unit, ext: Int.(p: Int) -> Unit) {}
|
||||
|
||||
@@ -13,8 +13,8 @@ inline var value: (p: Int) -> String
|
||||
inline var value2: Int.(p: Int) -> String
|
||||
get() = {"123" }
|
||||
set(ext: Int.(p: Int) -> String) {
|
||||
11.<!UNRESOLVED_REFERENCE!>ext<!>(11)
|
||||
11.<!UNRESOLVED_REFERENCE!>ext<!>(11)
|
||||
11.ext(11)
|
||||
11.ext(11)
|
||||
|
||||
val p = ext
|
||||
}
|
||||
+4
-4
@@ -19,8 +19,8 @@ inline fun inlineFunWithInvoke(s: (p: Int) -> Unit, ext: Int.(p: Int) -> Unit) {
|
||||
s.invoke(11)
|
||||
s invoke 11
|
||||
|
||||
11.<!UNRESOLVED_REFERENCE!>ext<!>(11)
|
||||
11 <!UNRESOLVED_REFERENCE!>ext<!> 11
|
||||
11.ext(11)
|
||||
11 ext 11
|
||||
|
||||
s
|
||||
ext
|
||||
@@ -34,8 +34,8 @@ inline fun inlineFunWithInvokeNonInline(noinline s: (p: Int) -> Unit, ext: Int.(
|
||||
s.invoke(11)
|
||||
s invoke 11
|
||||
|
||||
11.<!UNRESOLVED_REFERENCE!>ext<!>(11)
|
||||
11 <!UNRESOLVED_REFERENCE!>ext<!> 11
|
||||
11.ext(11)
|
||||
11 ext 11
|
||||
|
||||
s
|
||||
ext
|
||||
|
||||
Reference in New Issue
Block a user