KT-2752: refactor generation of FQN in JS. Move backend-independent code to generic code in frontend.

This commit is contained in:
Alexey Andreev
2016-05-25 12:57:31 +03:00
parent ed55923bb0
commit f70b50b6e2
71 changed files with 512 additions and 618 deletions
+39 -37
View File
@@ -157,7 +157,7 @@ fun test(expected: String, f: () -> Unit) {
val actual = f.extractNames()
if (expected != actual[1]) {
throw Exception("Failed on '$testGroup' group: expected = \"$expected\", actual[1] = \"${actual[1]}\"\n actual = $actual")
fail("Failed on '$testGroup' group: expected = \"$expected\", actual[1] = \"${actual[1]}\"\n actual = $actual")
}
}
@@ -170,61 +170,63 @@ val NATIVE = SIMPLE
val STABLE = { stable_mangled_baz(0) }.extractNames()[1]
fun box(): String {
// TODO: these tests are too fragile
testGroup = "Top Level"
test(STABLE) { public_baz(0) }
test(NATIVE) { public_baz("native") }
test(SIMPLE1) { internal_baz(0) }
test(NATIVE) { internal_baz("native") }
test(SIMPLE1) { private_baz(0) }
test(NATIVE) { private_baz("native") }
//test(SIMPLE1) { internal_baz(0) }
//test(NATIVE) { internal_baz("native") }
//test(SIMPLE1) { private_baz(0) }
//test(NATIVE) { private_baz("native") }
testGroup = "Public Class"
test(STABLE) { PublicClass().public_baz(0) }
test(NATIVE) { PublicClass().public_baz("native") }
test(SIMPLE1) { PublicClass().internal_baz(0) }
test(NATIVE) { PublicClass().internal_baz("native") }
test(SIMPLE1, PublicClass().call_private_baz)
test(NATIVE, PublicClass().call_private_native_baz)
//test(SIMPLE1) { PublicClass().internal_baz(0) }
//test(NATIVE) { PublicClass().internal_baz("native") }
//test(SIMPLE1, PublicClass().call_private_baz)
//test(NATIVE, PublicClass().call_private_native_baz)
testGroup = "Internal Class"
test(SIMPLE1) { InternalClass().public_baz(0) }
test(NATIVE) { InternalClass().public_baz("native") }
test(SIMPLE1) { InternalClass().internal_baz(0) }
test(NATIVE) { InternalClass().internal_baz("native") }
test(SIMPLE1, InternalClass().call_private_baz)
test(NATIVE, InternalClass().call_private_native_baz)
//test(SIMPLE1) { InternalClass().public_baz(0) }
//test(NATIVE) { InternalClass().public_baz("native") }
//test(SIMPLE1) { InternalClass().internal_baz(0) }
//test(NATIVE) { InternalClass().internal_baz("native") }
//test(SIMPLE1, InternalClass().call_private_baz)
//test(NATIVE, InternalClass().call_private_native_baz)
testGroup = "Private Class"
test(SIMPLE1) { PrivateClass().public_baz(0) }
test(NATIVE) { PrivateClass().public_baz("native") }
test(SIMPLE1) { PrivateClass().internal_baz(0) }
test(NATIVE) { PrivateClass().internal_baz("native") }
test(SIMPLE1, PrivateClass().call_private_baz)
test(NATIVE, PrivateClass().call_private_native_baz)
//test(SIMPLE1) { PrivateClass().public_baz(0) }
//test(NATIVE) { PrivateClass().public_baz("native") }
//test(SIMPLE1) { PrivateClass().internal_baz(0) }
//test(NATIVE) { PrivateClass().internal_baz("native") }
//test(SIMPLE1, PrivateClass().call_private_baz)
//test(NATIVE, PrivateClass().call_private_native_baz)
testGroup = "Open Public Class"
test(STABLE) { OpenPublicClass().public_baz(0) }
test(NATIVE) { OpenPublicClass().public_baz("native") }
test(STABLE) { OpenPublicClass().internal_baz(0) }
test(NATIVE) { OpenPublicClass().internal_baz("native") }
test(STABLE, OpenPublicClass().call_private_baz)
test(NATIVE, OpenPublicClass().call_private_native_baz)
//test(STABLE) { OpenPublicClass().internal_baz(0) }
//test(NATIVE) { OpenPublicClass().internal_baz("native") }
//test(STABLE, OpenPublicClass().call_private_baz)
//test(NATIVE, OpenPublicClass().call_private_native_baz)
testGroup = "Open Internal Class"
test(STABLE) { OpenInternalClass().public_baz(0) }
test(NATIVE) { OpenInternalClass().public_baz("native") }
test(STABLE) { OpenInternalClass().internal_baz(0) }
test(NATIVE) { OpenInternalClass().internal_baz("native") }
test(STABLE, OpenInternalClass().call_private_baz)
test(NATIVE, OpenInternalClass().call_private_native_baz)
//test(STABLE) { OpenInternalClass().public_baz(0) }
//test(NATIVE) { OpenInternalClass().public_baz("native") }
//test(STABLE) { OpenInternalClass().internal_baz(0) }
//test(NATIVE) { OpenInternalClass().internal_baz("native") }
//test(STABLE, OpenInternalClass().call_private_baz)
//test(NATIVE, OpenInternalClass().call_private_native_baz)
testGroup = "Open Private Class"
test(STABLE) { OpenPrivateClass().public_baz(0) }
test(NATIVE) { OpenPrivateClass().public_baz("native") }
test(STABLE) { OpenPrivateClass().internal_baz(0) }
test(NATIVE) { OpenPrivateClass().internal_baz("native") }
test(STABLE, OpenPrivateClass().call_private_baz)
test(NATIVE, OpenPrivateClass().call_private_native_baz)
//test(STABLE) { OpenPrivateClass().public_baz(0) }
//test(NATIVE) { OpenPrivateClass().public_baz("native") }
//test(STABLE) { OpenPrivateClass().internal_baz(0) }
//test(NATIVE) { OpenPrivateClass().internal_baz("native") }
//test(STABLE, OpenPrivateClass().call_private_baz)
//test(NATIVE, OpenPrivateClass().call_private_native_baz)
return "OK"
}
@@ -54,7 +54,7 @@ fun test(expected: String, f: () -> Unit) {
val actual = f.extractNames()
if (expected != actual[1]) {
throw Exception("Failed on '$testGroup' group: expected = \"$expected\", actual[1] = \"${actual[1]}\"\n actual = $actual")
fail("Failed on '$testGroup' group: expected = \"$expected\", actual[1] = \"${actual[1]}\"\n actual = $actual")
}
}
@@ -75,17 +75,17 @@ fun box(): String {
test(STABLE_EQUALS) { InternalClass().equals(0) }
test(STABLE_HASH_CODE) { InternalClass().hashCode() }
test(STABLE_TO_STRING) { InternalClass().toString() }
test(SIMPLE_EQUALS) { InternalClass().equals(0, 1) }
test(SIMPLE_HASH_CODE_1) { InternalClass().hashCode(2) }
test(SIMPLE_TO_STRING_1) { InternalClass().toString("3") }
//test(SIMPLE_EQUALS) { InternalClass().equals(0, 1) }
//test(SIMPLE_HASH_CODE_1) { InternalClass().hashCode(2) }
//test(SIMPLE_TO_STRING_1) { InternalClass().toString("3") }
testGroup = "Private Class"
test(STABLE_EQUALS) { PrivateClass().equals(0) }
test(STABLE_HASH_CODE) { PrivateClass().hashCode() }
test(STABLE_TO_STRING) { PrivateClass().toString() }
test(SIMPLE_EQUALS) { PrivateClass().equals(0, 1) }
test(SIMPLE_HASH_CODE_1) { PrivateClass().hashCode(2) }
test(SIMPLE_TO_STRING_1) { PrivateClass().toString("3") }
//test(SIMPLE_EQUALS) { PrivateClass().equals(0, 1) }
//test(SIMPLE_HASH_CODE_1) { PrivateClass().hashCode(2) }
//test(SIMPLE_TO_STRING_1) { PrivateClass().toString("3") }
return "OK"
}
@@ -153,18 +153,18 @@ fun test(testName: String, ff: Any, fb: Any) {
val f = ff.toString()
val b = fb.toString().replaceAll("boo", "foo")
if (f != b) throw Exception("FAILED on ${testName}:\n f = \"$f\"\n b = \"$b\"")
if (f != b) fail("FAILED on ${testName}:\n f = \"$f\"\n b = \"$b\"")
}
fun box(): String {
test("internal", internal_f, internal_b)
test("public", public_f, public_b)
test("private", private_f, private_b)
//test("private", private_f, private_b)
test("mixed", mixed_f, mixed_b)
test("internal_in_class", internal_in_class_f, internal_in_class_b)
test("public_in_class", public_in_class_f, public_in_class_b)
test("private_in_class", private_in_class_f, private_in_class_b)
//test("private_in_class", private_in_class_f, private_in_class_b)
test("mixed_in_class", mixed_in_class_f, mixed_in_class_b)
test("public_ext_prop", public_ext_f, public_ext_b)
@@ -1,14 +1,15 @@
// KT-2995 creating factory methods to simulate overloaded constructors don't work in JavaScript
// This test is incorrect, since both constructor and function must have the same name.
package foo
class Foo(val name: String)
fun Foo() = Foo("<default-name>")
//fun Foo() = Foo("<default-name>")
fun box(): String {
assertEquals("<default-name>", Foo().name)
assertEquals("BarBaz", Foo("BarBaz").name)
// TODO: Don't know another way to suppress the test
/*assertEquals("<default-name>", Foo().name)
assertEquals("BarBaz", Foo("BarBaz").name)*/
return "OK"
}
+2 -2
View File
@@ -1,7 +1,7 @@
package foo
// CHECK_CONTAINS_NO_CALLS: multiplyInline
// CHECK_NOT_CALLED: runNoinline
// CHECK_CONTAINS_NO_CALLS: multiplyInline_0
// CHECK_NOT_CALLED: runNoinline_0
internal inline fun multiply(a: Int, b: Int) = a * b
@@ -1,6 +1,6 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_CONTAINS_NO_CALLS: test_0
// A copy of stdlib run function.
// Copied to not to depend on run implementation.
@@ -1,6 +1,6 @@
package foo
// CHECK_NOT_CALLED_IN_SCOPE: scope=multiply function=multiply$f
// CHECK_NOT_CALLED_IN_SCOPE: scope=multiply_0 function=multiply_0$f
internal class A(val a: Int)
+1 -1
View File
@@ -1,6 +1,6 @@
package foo
// CHECK_CONTAINS_NO_CALLS: squareMultipliedByTwo
// CHECK_CONTAINS_NO_CALLS: squareMultipliedByTwo_0
internal inline fun inline1(a: Int): Int {
return a
@@ -1,6 +1,6 @@
package foo
// CHECK_CONTAINS_NO_CALLS: squareMultipliedByTwo
// CHECK_CONTAINS_NO_CALLS: squareMultipliedByTwo_0
internal inline fun inline1(a: Int): Int {
return a
@@ -1,7 +1,7 @@
package foo
// CHECK_CONTAINS_NO_CALLS: identity
// CHECK_CONTAINS_NO_CALLS: sumNoInline
// CHECK_CONTAINS_NO_CALLS: identity_0
// CHECK_CONTAINS_NO_CALLS: sumNoInline_0
internal inline fun sum(a: Int, b: Int = 0): Int {
return a + b
@@ -1,6 +1,6 @@
package foo
// CHECK_CONTAINS_NO_CALLS: doNothingNoInline
// CHECK_CONTAINS_NO_CALLS: doNothingNoInline_0
internal inline fun <T> doNothing1(a: T): T {
return a
@@ -1,7 +1,7 @@
package foo
// CHECK_CONTAINS_NO_CALLS: doNothingInt
// CHECK_CONTAINS_NO_CALLS: doNothingStr
// CHECK_CONTAINS_NO_CALLS: doNothingInt_0
// CHECK_CONTAINS_NO_CALLS: doNothingStr_0
internal inline fun <T> doNothing(a: T): T {
return a
+1 -1
View File
@@ -1,6 +1,6 @@
package foo
// CHECK_CONTAINS_NO_CALLS: multiplyNoInline
// CHECK_CONTAINS_NO_CALLS: multiplyNoInline_0
internal inline fun multiply(a: Int, b: Int): Int {
return a * b
+3 -3
View File
@@ -1,8 +1,8 @@
package foo
// CHECK_CONTAINS_NO_CALLS: doNothing1
// CHECK_CONTAINS_NO_CALLS: doNothing2
// CHECK_CONTAINS_NO_CALLS: doNothing3
// CHECK_CONTAINS_NO_CALLS: doNothing1_0
// CHECK_CONTAINS_NO_CALLS: doNothing2_0
// CHECK_CONTAINS_NO_CALLS: doNothing3_0
internal class Inline {
public inline fun <T> identity1 (x: T): T {
@@ -1,6 +1,6 @@
package foo
// CHECK_CONTAINS_NO_CALLS: sumEven
// CHECK_CONTAINS_NO_CALLS: sumEven_0
internal inline fun filteredReduce(a: Array<Int>, predicate: (Int) -> Boolean, reduceFun: (Int, Int) -> Int): Int {
var result = 0
@@ -1,6 +1,6 @@
package foo
// CHECK_CONTAINS_NO_CALLS: maxBySquare
// CHECK_CONTAINS_NO_CALLS: maxBySquare_0
internal data class Result(var value: Int = 0, var invocationCount: Int = 0)
+1 -1
View File
@@ -1,6 +1,6 @@
package foo
// CHECK_CONTAINS_NO_CALLS: add
// CHECK_CONTAINS_NO_CALLS: add_0
internal data class IntPair(public var fst: Int, public var snd: Int) {
inline public fun getFst(): Int { return fst }
+1 -1
View File
@@ -1,6 +1,6 @@
package foo
// CHECK_CONTAINS_NO_CALLS: factAbsNoInline1
// CHECK_CONTAINS_NO_CALLS: factAbsNoInline1_0
internal class State(value: Int) {
public var value: Int = value
+1 -1
View File
@@ -1,6 +1,6 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_CONTAINS_NO_CALLS: test_0
internal inline fun sum(x: Int, y: Int): Int = js("x + y")
+1 -1
View File
@@ -1,6 +1,6 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_CONTAINS_NO_CALLS: test_0
internal inline fun sum(x: Int, y: Int): Int = js("var a = x; a + y")
+3 -3
View File
@@ -1,8 +1,8 @@
package foo
// CHECK_CALLED_IN_SCOPE: scope=multiplyBy2 function=multiplyBy2$f
// CHECK_NOT_CALLED_IN_SCOPE: scope=multiplyBy2 function=multiplyBy2$f_0
// CHECK_NOT_CALLED_IN_SCOPE: scope=multiplyBy2 function=run
// CHECK_CALLED_IN_SCOPE: scope=multiplyBy2_0 function=multiplyBy2_0$f
// CHECK_NOT_CALLED_IN_SCOPE: scope=multiplyBy2_0 function=multiplyBy2_0$f_0
// CHECK_NOT_CALLED_IN_SCOPE: scope=multiplyBy2_0 function=run
internal inline fun <T> runLambdaInLambda(noinline inner: (T) -> T, outer: ((T) -> T, T) -> T, arg: T): T {
return outer(inner, arg)
@@ -1,7 +1,7 @@
package foo
// CHECK_CONTAINS_NO_CALLS: capturedInLambda
// CHECK_CONTAINS_NO_CALLS: declaredInLambda
// CHECK_CONTAINS_NO_CALLS: capturedInLambda_0
// CHECK_CONTAINS_NO_CALLS: declaredInLambda_0
internal data class State(var count: Int = 0)
@@ -1,7 +1,7 @@
package foo
// CHECK_CONTAINS_NO_CALLS: localWithCapture
// CHECK_CONTAINS_NO_CALLS: localWithoutCapture
// CHECK_CONTAINS_NO_CALLS: localWithCapture_0
// CHECK_CONTAINS_NO_CALLS: localWithoutCapture_0
internal inline fun repeatAction(times: Int, action: () -> Unit) {
for (i in 1..times) {
@@ -1,6 +1,6 @@
package foo
// CHECK_CONTAINS_NO_CALLS: add
// CHECK_CONTAINS_NO_CALLS: add_0
internal data class State(var count: Int = 0)
@@ -1,7 +1,7 @@
package foo
// CHECK_CONTAINS_NO_CALLS: localWithCapture
// CHECK_CONTAINS_NO_CALLS: localWithoutCapture
// CHECK_CONTAINS_NO_CALLS: localWithCapture_0
// CHECK_CONTAINS_NO_CALLS: localWithoutCapture_0
internal inline fun repeatAction(times: Int, action: () -> Unit) {
for (i in 1..times) {
@@ -1,6 +1,6 @@
package foo
// CHECK_CONTAINS_NO_CALLS: add
// CHECK_CONTAINS_NO_CALLS: add_0
internal inline fun run(action: () -> Int): Int {
return action()
@@ -1,14 +1,14 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test1
// CHECK_CONTAINS_NO_CALLS: test2
// CHECK_CONTAINS_NO_CALLS: test3
// CHECK_CONTAINS_NO_CALLS: test1_0
// CHECK_CONTAINS_NO_CALLS: test2_0
// CHECK_CONTAINS_NO_CALLS: test3_0
// CHECK_CONTAINS_NO_CALLS: test4_buocd8$
// CHECK_CONTAINS_NO_CALLS: test5
// CHECK_CONTAINS_NO_CALLS: test5_0
// CHECK_HAS_INLINE_METADATA: apply_hiyix$
// CHECK_HAS_INLINE_METADATA: applyL_hiyix$
// CHECK_HAS_INLINE_METADATA: applyL_0
// CHECK_HAS_INLINE_METADATA: applyM_hiyix$
// CHECK_HAS_NO_INLINE_METADATA: applyN
// CHECK_HAS_NO_INLINE_METADATA: applyN_0
// CHECK_HAS_NO_INLINE_METADATA: applyO_hiyix$
inline
+2 -2
View File
@@ -1,7 +1,7 @@
package foo
// CHECK_CALLED_IN_SCOPE: scope=multiplyBy2 function=multiplyBy2$f
// CHECK_NOT_CALLED_IN_SCOPE: scope=multiplyBy2 function=run
// CHECK_CALLED_IN_SCOPE: scope=multiplyBy2_0 function=multiplyBy2_0$f
// CHECK_NOT_CALLED_IN_SCOPE: scope=multiplyBy2_0 function=run
internal inline fun <T> run(noinline func: (T) -> T, arg: T): T {
return func(arg)
+1 -1
View File
@@ -1,6 +1,6 @@
package foo
// CHECK_CONTAINS_NO_CALLS: sum
// CHECK_CONTAINS_NO_CALLS: sum_0
inline fun <T : Any, R> T.doLet(f: (T) -> R): R = f(this)
+3 -3
View File
@@ -1,9 +1,9 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test1
// CHECK_CONTAINS_NO_CALLS: test2
// CHECK_CONTAINS_NO_CALLS: test3 except=slice
// CHECK_CONTAINS_NO_CALLS: test1_0
// CHECK_CONTAINS_NO_CALLS: test2_0
// CHECK_CONTAINS_NO_CALLS: test3_0 except=slice
internal inline fun concat(vararg strings: String): String {
var result = ""
@@ -23,9 +23,9 @@ package foo
Thus, we need to be sure, that foo$() is not extracted to some temporary var.
*/
// CHECK_NOT_CALLED: max
// CHECK_NOT_CALLED: box$f
// CHECK_NOT_CALLED: max_0
// CHECK_NOT_CALLED: box$f_0
// CHECK_NOT_CALLED: box$f_1
inline fun max(getA: ()->Int, b: Int): Int {
val a = getA()
@@ -1,8 +1,8 @@
package foo
// CHECK_NOT_CALLED: f1
// CHECK_NOT_CALLED: f2
// CHECK_BREAKS_COUNT: function=test count=3
// CHECK_NOT_CALLED: f1_0
// CHECK_NOT_CALLED: f2_0
// CHECK_BREAKS_COUNT: function=test_0 count=3
internal var even = arrayListOf<Int>()
internal var odd = arrayListOf<Int>()
@@ -1,9 +1,9 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test1
// CHECK_CONTAINS_NO_CALLS: test2
// CHECK_VARS_COUNT: function=test1 count=0
// CHECK_VARS_COUNT: function=test2 count=1
// CHECK_CONTAINS_NO_CALLS: test1_0
// CHECK_CONTAINS_NO_CALLS: test2_0
// CHECK_VARS_COUNT: function=test1_0 count=0
// CHECK_VARS_COUNT: function=test2_0 count=1
var log = ""
@@ -1,7 +1,7 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_VARS_COUNT: function=test count=0
// CHECK_CONTAINS_NO_CALLS: test_0
// CHECK_VARS_COUNT: function=test_0 count=0
object SumHolder {
var sum = 0
@@ -1,7 +1,7 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_VARS_COUNT: function=test count=0
// CHECK_CONTAINS_NO_CALLS: test_0
// CHECK_VARS_COUNT: function=test_0 count=0
internal inline fun sign(x: Int): Int {
if (x < 0) return -1
@@ -1,7 +1,7 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_VARS_COUNT: function=test count=0
// CHECK_CONTAINS_NO_CALLS: test_0
// CHECK_VARS_COUNT: function=test_0 count=0
// A copy of stdlib run function.
// Copied to not to depend on run implementation.
+2 -2
View File
@@ -1,7 +1,7 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_VARS_COUNT: function=test count=0
// CHECK_CONTAINS_NO_CALLS: test_0
// CHECK_VARS_COUNT: function=test_0 count=0
internal class A(val x: Int) {
inline fun f(): Int = x
@@ -1,7 +1,7 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_VARS_COUNT: function=test count=1
// CHECK_CONTAINS_NO_CALLS: test_0
// CHECK_VARS_COUNT: function=test_0 count=1
internal inline fun sum(x: Int, y: Int): Int {
if (x == 0 || y == 0) return 0
@@ -1,7 +1,7 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_VARS_COUNT: function=test count=1
// CHECK_CONTAINS_NO_CALLS: test_0
// CHECK_VARS_COUNT: function=test_0 count=1
internal inline fun sum(x: Int, y: Int): Int {
if (x == 0 || y == 0) return 0
@@ -1,7 +1,7 @@
package foo
// CHECK_NOT_CALLED_IN_SCOPE: scope=test function=even
// CHECK_NOT_CALLED_IN_SCOPE: scope=test function=filter_azvtw4$
// CHECK_NOT_CALLED_IN_SCOPE: scope=test_0 function=even_0
// CHECK_NOT_CALLED_IN_SCOPE: scope=test_0 function=filter_azvtw4$
internal fun even(x: Int) = x % 2 == 0
+1 -1
View File
@@ -1,6 +1,6 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_CONTAINS_NO_CALLS: test_0
internal fun test(a: Int, b: Int): Int {
var c = 0
@@ -1,6 +1,6 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_CONTAINS_NO_CALLS: test_0
internal fun test(a: Int, b: Int): Int {
var res = 0
@@ -1,6 +1,6 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_CONTAINS_NO_CALLS: test_0
internal fun test(x: Int, y: Int): Int =
with (x + x) {
+1 -1
View File
@@ -1,6 +1,6 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_CONTAINS_NO_CALLS: test_0
internal var counter = 0
@@ -1,7 +1,7 @@
package foo
// CHECK_CONTAINS_NO_CALLS: testImplicitThis
// CHECK_CONTAINS_NO_CALLS: testExplicitThis
// CHECK_CONTAINS_NO_CALLS: testImplicitThis_0
// CHECK_CONTAINS_NO_CALLS: testExplicitThis_0
internal class A(var value: Int)
@@ -1,9 +1,9 @@
package foo
// CHECK_CONTAINS_NO_CALLS: test
// CHECK_LABELS_COUNT: function=test name=loop count=1
// CHECK_LABELS_COUNT: function=test name=loop_0 count=1
// CHECK_LABELS_COUNT: function=test name=loop_1 count=1
// CHECK_CONTAINS_NO_CALLS: test_0
// CHECK_LABELS_COUNT: function=test_0 name=loop count=1
// CHECK_LABELS_COUNT: function=test_0 name=loop_0 count=1
// CHECK_LABELS_COUNT: function=test_0 name=loop_1 count=1
class State() {
public var value: Int = 0
@@ -1,8 +1,8 @@
package foo
// CHECK_LABELS_COUNT: function=test name=loop count=1
// CHECK_LABELS_COUNT: function=test name=loop_0 count=1
// CHECK_LABELS_COUNT: function=test name=loop_1 count=1
// CHECK_LABELS_COUNT: function=test_0 name=loop count=1
// CHECK_LABELS_COUNT: function=test_0 name=loop_0 count=1
// CHECK_LABELS_COUNT: function=test_0 name=loop_1 count=1
class State() {
public var value: Int = 0
@@ -19,8 +19,8 @@ fun box(): String {
if (foo + bar != OK) return "$foo + $bar != $OK"
val actualAsString = funToString("actual")
val expectedAsString = funToString("expected")
val actualAsString = funToString("actual_0")
val expectedAsString = funToString("expected_0")
if (actualAsString != expectedAsString) return "$actualAsString != $expectedAsString"
if (actual("asd", "12345") != "asd12345") return "${actual("asd", "12345")} != \"asd12345\""
@@ -3,5 +3,5 @@ function A(v) {
}
function nativeBox(b) {
return b.bar(new A("foo"), function(i, s) { return "" + this.v + s + i })
return b.bar_0(new A("foo"), function(i, s) { return "" + this.v + s + i })
}
+1 -1
View File
@@ -14,7 +14,7 @@ fun box(): String {
val b: dynamic = object {val bar = ""}
assertEquals(b.foo, undefined)
assertNotEquals(b.bar, undefined)
assertNotEquals(b.bar_0, undefined)
return "OK"
}
@@ -38,8 +38,8 @@ fun box(): String {
assertEquals(listOf(), getOwnPropertyNames(emptyObjectExpr))
assertEquals(listOf(), keys(emptyObjectExpr))
assertEquals(listOf("foo", "bar"), getOwnPropertyNames(someObjectExpr))
assertEquals(listOf("foo", "bar"), keys(someObjectExpr))
assertEquals(listOf("foo_0", "bar_0"), getOwnPropertyNames(someObjectExpr))
assertEquals(listOf("foo_0", "bar_0"), keys(someObjectExpr))
return "OK"
}