Resolve dynamic.extensionForDynamic() statically

This commit is contained in:
Andrey Breslav
2014-11-24 18:00:20 +03:00
parent 8ee00b70ee
commit d5fdfcb797
12 changed files with 175 additions and 19 deletions
@@ -17,15 +17,19 @@ fun test(d: dynamic) {
d.<!DEBUG_INFO_DYNAMIC!>onStringVal<!> = 1
d.<!DEBUG_INFO_DYNAMIC!>onDynamicVal<!> = 1
d?.<!DEBUG_INFO_DYNAMIC!>onDynamicVal<!> = 1
<!VAL_REASSIGNMENT!>d.onDynamicVal<!> = 1
(d: String).onStringVal
(d: Any).onAnyVal
(d: Any?).onNullableAnyVal
(d: Any).onDynamicVal
}
fun testReassignmentWithSafeCall(d: dynamic) {
<!VAL_REASSIGNMENT!>d?.onDynamicVal<!> = 1
}
fun testReassignmentWithStaticCalls(d: dynamic) {
<!VAL_REASSIGNMENT!>(d: String).onStringVal<!> = 1
<!VAL_REASSIGNMENT!>(d: Any).onAnyVal<!> = 1
<!VAL_REASSIGNMENT!>(d: Any?).onNullableAnyVal<!> = 1
@@ -40,7 +44,10 @@ val dynamic.onDynamicVal: Int get() = 1
class C {
fun test(d: dynamic) {
d.<!DEBUG_INFO_DYNAMIC!>memberVal<!>
d.<!DEBUG_INFO_DYNAMIC!>memberVal<!> = 1
d.<!DEBUG_INFO_DYNAMIC!>memberExtensionVal<!>
d.<!DEBUG_INFO_DYNAMIC!>memberExtensionVal<!> = 1
}
val memberVal = 1
@@ -5,6 +5,8 @@ internal val dynamic.onDynamicVal: kotlin.Int
internal val kotlin.Any?.onNullableAnyVal: kotlin.Int
internal val kotlin.String.onStringVal: kotlin.Int
internal fun test(/*0*/ d: dynamic): kotlin.Unit
internal fun testReassignmentWithSafeCall(/*0*/ d: dynamic): kotlin.Unit
internal fun testReassignmentWithStaticCalls(/*0*/ d: dynamic): kotlin.Unit
internal final class C {
public constructor C()
@@ -17,9 +17,9 @@ fun test(d: dynamic) {
d.<!DEBUG_INFO_DYNAMIC!>onStringVar<!> = 1
d.<!DEBUG_INFO_DYNAMIC!>onDynamicVar<!> = 1
d.onDynamicVar = 1
d?.<!DEBUG_INFO_DYNAMIC!>onDynamicVar<!> = 1
d?.onDynamicVar = 1
(d: String).onStringVar
(d: Any).onAnyVar
@@ -13,8 +13,8 @@ fun test(d: dynamic) {
d.<!DEBUG_INFO_DYNAMIC!>onNullableAny<!>()
d.<!DEBUG_INFO_DYNAMIC!>onString<!>()
d.<!DEBUG_INFO_DYNAMIC!>onDynamic<!>()
d?.<!DEBUG_INFO_DYNAMIC!>onDynamic<!>()
d.onDynamic()
d?.onDynamic()
(d: String).onString()
(d: Any).onAny()
@@ -0,0 +1,61 @@
// !MARK_DYNAMIC_CALLS
// MODULE[js]: m1
// FILE: k.kt
fun test(d: dynamic) {
d.onDynamic()
d.onNullableDynamic()
d.valOnDynamic
<!VAL_REASSIGNMENT!>d.valOnDynamic<!> = 1
d.varOnDynamic
d.varOnDynamic = 1
}
fun dynamic.extTest() {
onDynamic()
onNullableDynamic()
valOnDynamic
<!VAL_REASSIGNMENT!>valOnDynamic<!> = 1
varOnDynamic
varOnDynamic = 1
this.onDynamic()
this.onNullableDynamic()
this.valOnDynamic
this.valOnDynamic = 1
this.varOnDynamic
this.varOnDynamic = 1
}
fun dynamic.onDynamic() {}
fun dynamic<!REDUNDANT_NULLABLE!>?<!>.onNullableDynamic() {}
val dynamic.valOnDynamic: Int get() = 1
var dynamic.varOnDynamic: Int
get() = 1
set(v) {}
class ForMemberExtensions {
fun test(d: dynamic) {
d.memberExtensionVar
d.memberExtensionVar = 1
d.memberExtensionVal
<!VAL_REASSIGNMENT!>d.memberExtensionVal<!> = 1
}
val dynamic.memberExtensionVal: Int get() = 1
var dynamic.memberExtensionVar: Int
get() = 1
set(v) {}
}
@@ -0,0 +1,18 @@
package
internal val dynamic.valOnDynamic: kotlin.Int
internal var dynamic.varOnDynamic: kotlin.Int
internal fun test(/*0*/ d: dynamic): kotlin.Unit
internal fun dynamic.extTest(): kotlin.Unit
internal fun dynamic.onDynamic(): kotlin.Unit
internal fun dynamic.onNullableDynamic(): kotlin.Unit
internal final class ForMemberExtensions {
public constructor ForMemberExtensions()
internal final val dynamic.memberExtensionVal: kotlin.Int
internal final var dynamic.memberExtensionVar: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
internal final fun test(/*0*/ d: dynamic): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -0,0 +1,14 @@
// !MARK_DYNAMIC_CALLS
// !DIAGNOSTICS: -UNUSED_PARAMETER
// MODULE[js]: m1
// FILE: k.kt
fun dynamic.foo(s: String, a: Any) {}
fun dynamic.foo(s: Any, a: String) {}
fun test(d: dynamic) {
d.foo(1, "")
d.<!OVERLOAD_RESOLUTION_AMBIGUITY!>foo<!>("", "")
d.<!DEBUG_INFO_DYNAMIC!>foo<!>(1, 1)
}
@@ -0,0 +1,5 @@
package
internal fun test(/*0*/ d: dynamic): kotlin.Unit
internal fun dynamic.foo(/*0*/ s: kotlin.Any, /*1*/ a: kotlin.String): kotlin.Unit
internal fun dynamic.foo(/*0*/ s: kotlin.String, /*1*/ a: kotlin.Any): kotlin.Unit