JS: prohibit dynamic values as handlers of property delegates. Prohibit delegation of classes by dynamic values. See KT-15283
This commit is contained in:
+13
@@ -0,0 +1,13 @@
|
||||
val x: dynamic = 23
|
||||
|
||||
interface I {
|
||||
fun foo(): String
|
||||
}
|
||||
|
||||
class C : I by <!DELEGATION_BY_DYNAMIC!>x<!>
|
||||
|
||||
object O : I by <!DELEGATION_BY_DYNAMIC!>x<!>
|
||||
|
||||
fun box(): String {
|
||||
return object : I by <!DELEGATION_BY_DYNAMIC!>x<!> {}.foo()
|
||||
}
|
||||
+16
-5
@@ -1,16 +1,27 @@
|
||||
package
|
||||
|
||||
public final class C : Tr {
|
||||
public constructor C(/*0*/ d: dynamic)
|
||||
public val x: dynamic = 23
|
||||
public fun box(): kotlin.String
|
||||
|
||||
public final class C : I {
|
||||
public constructor C()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*delegation*/ fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*delegation*/ fun foo(): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public interface Tr {
|
||||
public interface I {
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public abstract fun foo(): kotlin.Unit
|
||||
public abstract fun foo(): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public object O : I {
|
||||
private constructor O()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*delegation*/ fun foo(): kotlin.String
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
-3
@@ -52,6 +52,3 @@ public final fun get(/*0*/ p0: dynamic): dynamic
|
||||
public final fun divAssign(/*0*/ p0: dynamic): dynamic
|
||||
public final fun get(/*0*/ p0: dynamic): dynamic
|
||||
public final fun remAssign(/*0*/ p0: dynamic): dynamic
|
||||
public final fun getValue(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
|
||||
public final fun getValue(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
|
||||
public final fun setValue(/*0*/ p0: dynamic, /*1*/ p1: dynamic, /*2*/ p2: dynamic): dynamic
|
||||
|
||||
@@ -81,6 +81,3 @@ fun test(d: dynamic) {
|
||||
<!DEBUG_INFO_DYNAMIC!>d[1]<!> <!DEBUG_INFO_DYNAMIC!>%=<!> 1
|
||||
}
|
||||
|
||||
val dyn: dynamic = null
|
||||
val foo : Int <!DEBUG_INFO_DYNAMIC!>by dyn<!>
|
||||
var bar : Int <!DEBUG_INFO_DYNAMIC, DEBUG_INFO_DYNAMIC!>by dyn<!>
|
||||
|
||||
@@ -1,6 +1,3 @@
|
||||
package
|
||||
|
||||
public var bar: kotlin.Int
|
||||
public val dyn: dynamic = null
|
||||
public val foo: kotlin.Int
|
||||
public fun test(/*0*/ d: dynamic): kotlin.Unit
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
interface Tr {
|
||||
fun foo()
|
||||
}
|
||||
|
||||
class C(d: dynamic) : Tr by d
|
||||
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
public final fun getValue(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
|
||||
public final fun setValue(/*0*/ p0: dynamic, /*1*/ p1: dynamic, /*2*/ p2: dynamic): dynamic
|
||||
public final fun getValue(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
|
||||
public final fun getValue(/*0*/ p0: dynamic, /*1*/ p1: dynamic): dynamic
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
// !DIAGNOSTICS: -UNUSED_VARIABLE
|
||||
|
||||
external val x: dynamic
|
||||
|
||||
var y: Any? by <!PROPERTY_DELEGATION_BY_DYNAMIC!>x<!>
|
||||
|
||||
fun foo() {
|
||||
val a: Any by <!PROPERTY_DELEGATION_BY_DYNAMIC!>x<!>
|
||||
}
|
||||
|
||||
class C {
|
||||
val a: dynamic by <!PROPERTY_DELEGATION_BY_DYNAMIC!>x<!>
|
||||
}
|
||||
|
||||
class A {
|
||||
operator fun provideDelegate(host: Any?, p: Any): dynamic = TODO("")
|
||||
}
|
||||
|
||||
val z: Any? by <!PROPERTY_DELEGATION_BY_DYNAMIC!>A()<!>
|
||||
|
||||
class DynamicHandler {
|
||||
operator fun getValue(thisRef: Any?, property: kotlin.reflect.KProperty<*>): dynamic = 23
|
||||
}
|
||||
|
||||
class B {
|
||||
val x: dynamic by DynamicHandler()
|
||||
}
|
||||
+38
@@ -0,0 +1,38 @@
|
||||
package
|
||||
|
||||
public external val x: dynamic
|
||||
public var y: kotlin.Any?
|
||||
public val z: kotlin.Any?
|
||||
public fun foo(): kotlin.Unit
|
||||
|
||||
public final class A {
|
||||
public constructor A()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public final operator fun provideDelegate(/*0*/ host: kotlin.Any?, /*1*/ p: kotlin.Any): dynamic
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class B {
|
||||
public constructor B()
|
||||
public final val x: dynamic
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class C {
|
||||
public constructor C()
|
||||
public final val a: dynamic
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public final class DynamicHandler {
|
||||
public constructor DynamicHandler()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final operator fun getValue(/*0*/ thisRef: kotlin.Any?, /*1*/ property: kotlin.reflect.KProperty<*>): dynamic
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
Reference in New Issue
Block a user