JS: prohibit spread operator and destructuring declaration in dynamic values. See KT-15283

This commit is contained in:
Alexey Andreev
2016-12-26 17:44:59 +03:00
parent 31d0e0b7c4
commit a4b2abc7d5
11 changed files with 122 additions and 39 deletions
@@ -28,12 +28,6 @@ public final fun compareTo(/*0*/ p0: dynamic): dynamic
public final fun compareTo(/*0*/ p0: dynamic): dynamic
public final fun compareTo(/*0*/ p0: dynamic): dynamic
public final fun foo(): dynamic
public final fun component1(): dynamic
public final fun component2(): dynamic
public final fun component3(): dynamic
public final fun foo(): dynamic
public final fun foo(): dynamic
public final fun foo(): dynamic
public final fun inc(): dynamic
public final fun inc(): dynamic
public final fun dec(): dynamic
@@ -55,11 +55,6 @@ fun test(d: dynamic) {
i.<!DEBUG_INFO_DYNAMIC!>foo<!>()
}
val (<!DEBUG_INFO_DYNAMIC!>a<!>, <!DEBUG_INFO_DYNAMIC!>b<!>, <!DEBUG_INFO_DYNAMIC!>c<!>) = d
a.<!DEBUG_INFO_DYNAMIC!>foo<!>()
b.<!DEBUG_INFO_DYNAMIC!>foo<!>()
c.<!DEBUG_INFO_DYNAMIC!>foo<!>()
var dVar = d
dVar<!DEBUG_INFO_DYNAMIC!>++<!>
<!DEBUG_INFO_DYNAMIC!>++<!>dVar
@@ -0,0 +1,9 @@
public final fun component1(): dynamic
public final fun component2(): dynamic
public final fun plus(/*0*/ p0: dynamic): dynamic
public final fun component1(): dynamic
public final fun component2(): dynamic
public final fun plus(/*0*/ p0: dynamic): dynamic
public final fun component1(): dynamic
public final fun component2(): dynamic
public final fun plus(/*0*/ p0: dynamic): dynamic
@@ -0,0 +1,22 @@
// !DIAGNOSTICS: -UNUSED_PARAMETER
fun foo() {
for (<!WRONG_OPERATION_WITH_DYNAMIC!>(x, y)<!> in A()) {
println(x + y)
}
bar { <!WRONG_OPERATION_WITH_DYNAMIC!>(x, y)<!> ->
println(x + y)
}
val x: dynamic = Any()
<!WRONG_OPERATION_WITH_DYNAMIC!>val (y, z) = x<!>
println(y + z)
}
class A {
operator fun iterator(): Iterator<dynamic> = TODO("")
}
fun bar(f: (dynamic) -> Unit): Unit = TODO("")
@@ -0,0 +1,12 @@
package
public fun bar(/*0*/ f: (dynamic) -> kotlin.Unit): kotlin.Unit
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 iterator(): kotlin.collections.Iterator<dynamic>
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -1,14 +1,22 @@
fun test(d: dynamic) {
val a = arrayOf(1, 2, 3)
d.foo(*d)
d.foo(*a)
d.foo(1, "2", *a)
d.foo(1, *a) { }
d.foo(*a) { "" }
d.foo(*a, *a)
d.foo(*a, *a) { "" }
d.foo(*a, 1, { "" }, *a)
d.foo(*a, 1)
d.foo(*a, *a, { "" })
}
d.foo(<!SPREAD_OPERATOR_IN_DYNAMIC_CALL!>*<!>d)
d.foo(<!SPREAD_OPERATOR_IN_DYNAMIC_CALL!>*<!>a)
d.foo(1, "2", <!SPREAD_OPERATOR_IN_DYNAMIC_CALL!>*<!>a)
d.foo(1, <!SPREAD_OPERATOR_IN_DYNAMIC_CALL!>*<!>a) { }
d.foo(<!SPREAD_OPERATOR_IN_DYNAMIC_CALL!>*<!>a) { "" }
d.foo(<!SPREAD_OPERATOR_IN_DYNAMIC_CALL!>*<!>a, <!SPREAD_OPERATOR_IN_DYNAMIC_CALL!>*<!>a)
d.foo(<!SPREAD_OPERATOR_IN_DYNAMIC_CALL!>*<!>a, <!SPREAD_OPERATOR_IN_DYNAMIC_CALL!>*<!>a) { "" }
d.foo(<!SPREAD_OPERATOR_IN_DYNAMIC_CALL!>*<!>a, 1, { "" }, <!SPREAD_OPERATOR_IN_DYNAMIC_CALL!>*<!>a)
d.foo(<!SPREAD_OPERATOR_IN_DYNAMIC_CALL!>*<!>a, 1)
d.foo(<!SPREAD_OPERATOR_IN_DYNAMIC_CALL!>*<!>a, <!SPREAD_OPERATOR_IN_DYNAMIC_CALL!>*<!>a, { "" })
bar(d)
bar(d, d)
bar(<!WRONG_OPERATION_WITH_DYNAMIC!>*d<!>)
bar(<!WRONG_OPERATION_WITH_DYNAMIC!>*d<!>, <!WRONG_OPERATION_WITH_DYNAMIC!>*d<!>)
bar(<!WRONG_OPERATION_WITH_DYNAMIC!>*d<!>, 23, <!WRONG_OPERATION_WITH_DYNAMIC!>*d<!>)
}
fun bar(vararg x: Int): Unit = TODO("$x")
@@ -1,3 +1,4 @@
package
public fun bar(/*0*/ vararg x: kotlin.Int /*kotlin.IntArray*/): kotlin.Unit
public fun test(/*0*/ d: dynamic): kotlin.Unit