Conform functions to extension functions and vice versa

#KT-5989 Fixed
This commit is contained in:
Alexander Udalov
2015-04-30 20:55:38 +03:00
parent b08bd3bc67
commit 49004a8b8e
44 changed files with 299 additions and 226 deletions
@@ -15,13 +15,13 @@ fun test1(): String {
}
fun test2(): String {
val a: ExtensionFunction1<*, *, *>.(ExtensionFunction1<*, *, *>)->String = { "a" }
val b: ExtensionFunction1<*, *, *>.(ExtensionFunction1<*, *, *>)->String = {
val aa = this as ExtensionFunction1<Any?, Any?, Any?>;
val cc = it as ExtensionFunction1<Any?, Any?, Any?>;
val a: (@extension Function2<*, *, *>).(@extension Function2<*, *, *>)->String = { "a" }
val b: (@extension Function2<*, *, *>).(@extension Function2<*, *, *>)->String = {
val aa = this as @extension Function2<Any?, Any?, Any?>;
val cc = it as @extension Function2<Any?, Any?, Any?>;
"${null.aa(null)} b ${null.cc(null)}"
}
val c: ExtensionFunction1<*, *, *>.(ExtensionFunction1<*, *, *>)->String = { "c" }
val c: (@extension Function2<*, *, *>).(@extension Function2<*, *, *>)->String = { "c" }
val f = a.b(c) // works
val s = a b c //compiler crashes