Dynamic calls have priority over extensions

This commit is contained in:
Andrey Breslav
2014-11-14 19:07:08 +03:00
parent f58b30706e
commit 52f1e037c1
9 changed files with 99 additions and 43 deletions
@@ -4,33 +4,33 @@
// FILE: k.kt
fun test(d: dynamic) {
d.foo()
d.<!DEBUG_INFO_DYNAMIC!>foo<!>(1)
d.<!DEBUG_INFO_DYNAMIC!>onAny<!>()
d?.<!DEBUG_INFO_DYNAMIC!>onAny<!>()
d!!.<!DEBUG_INFO_DYNAMIC!>onAny<!>()
d.bar()
d.baz()
d.<!DEBUG_INFO_DYNAMIC!>onAny<!>(1)
d == 1
d.<!DEBUG_INFO_DYNAMIC!>onNullableAny<!>()
d.<!DEBUG_INFO_DYNAMIC!>onString<!>()
d.equals(1)
d?.equals(1)
d.<!DEBUG_INFO_DYNAMIC!>onDynamic<!>()
d?.<!DEBUG_INFO_DYNAMIC!>onDynamic<!>()
d.hashCode()
d?.hashCode()
d.toString()
d?.toString()
(d: String).onString()
(d: Any).onAny()
(d: Any?).onNullableAny()
(d: Any).onDynamic()
}
fun Any.foo() {}
fun Any?.bar() {}
fun String.baz() {}
fun Any.onAny() {}
fun Any?.onNullableAny() {}
fun String.onString() {}
fun dynamic.onDynamic() {}
class C {
fun test(d: dynamic) {
d.<!DEBUG_INFO_DYNAMIC!>member<!>()
d.memberExtension()
d.<!DEBUG_INFO_DYNAMIC!>memberExtension<!>()
}
fun member() {}
@@ -1,9 +1,10 @@
package
internal fun test(/*0*/ d: dynamic): kotlin.Unit
internal fun kotlin.Any?.bar(): kotlin.Unit
internal fun kotlin.String.baz(): kotlin.Unit
internal fun kotlin.Any.foo(): kotlin.Unit
internal fun kotlin.Any.onAny(): kotlin.Unit
internal fun dynamic.onDynamic(): kotlin.Unit
internal fun kotlin.Any?.onNullableAny(): kotlin.Unit
internal fun kotlin.String.onString(): kotlin.Unit
internal final class C {
public constructor C()
@@ -0,0 +1,20 @@
// !MARK_DYNAMIC_CALLS
// MODULE[js]: m1
// FILE: k.kt
fun test(d: dynamic) {
d == 1
d.equals(1)
d?.equals(1)
d!!.equals(1)
d.hashCode()
d?.hashCode()
d!!.hashCode()
d.toString()
d?.toString()
d!!.toString()
}
@@ -0,0 +1,3 @@
package
internal fun test(/*0*/ d: dynamic): kotlin.Unit
@@ -1,11 +1,19 @@
// !CHECK_TYPE
// !DIAGNOSTICS: -UNUSED_PARAMETER
// MODULE[js]: m1
// FILE: k.kt
fun foo(dn: dynamic<!REDUNDANT_NULLABLE!>?<!>, d: dynamic, dnn: dynamic<!REDUNDANT_NULLABLE!>?<!><!REDUNDANT_NULLABLE!>?<!>) {
dn.checkType { it : _<dynamic>}
dn.checkType { it : _<dynamic<!REDUNDANT_NULLABLE!>?<!>>}
d.checkType { it : _<dynamic>}
d.checkType { it : _<dynamic<!REDUNDANT_NULLABLE!>?<!>>}
val a1 = dn.foo()
a1.isDynamic()
val a2 = dn?.foo()
a2.isDynamic()
val a3 = dn!!.foo()
a3.isDynamic()
d.foo()
d?.foo()
d!!.foo()
}
@@ -1,3 +1,3 @@
package
internal fun foo(/*0*/ dn: dynamic, /*1*/ d: dynamic): kotlin.Unit
internal fun foo(/*0*/ dn: dynamic, /*1*/ d: dynamic, /*2*/ dnn: dynamic): kotlin.Unit