JS backend: fix access to enum entries by implicit receiver and explicit this.

This commit is contained in:
Zalim Bashorov
2014-03-17 21:00:23 +04:00
parent 6b72d44929
commit 8fd38e261f
5 changed files with 75 additions and 11 deletions
@@ -0,0 +1,41 @@
package foo
enum class A {
FOO
BAR : A() {
fun explicitFromEntry() = A.FOO
//fun byThisFromEntry() = this.FOO
fun implicitFromEntry() = FOO
}
fun explicit() = A.FOO
fun byThis() = this.FOO
fun implicit() = FOO
}
fun A.extExplicit() = A.FOO
fun A.extByThis() = this.FOO
//fun A.extImplicit() = FOO
fun assertEquals<T>(expected: T, actual: T, id: String) {
if (expected != actual) throw Exception("Failed on $id, expected = '$expected', actual = '$actual'")
}
fun box(): String {
assertEquals(A.FOO, A.FOO.explicit(), "explicit access")
assertEquals(A.FOO, A.FOO.byThis(), "access by this")
assertEquals(A.FOO, A.FOO.implicit(), "implicit access")
assertEquals(A.FOO, A.FOO.explicit(), "explicit access from BAR")
// TODO uncoment when KT-4692 will be fixed
//assertEquals(A.FOO, A.FOO.byThis(), "access by this from BAR")
assertEquals(A.FOO, A.FOO.implicit(), "implicit access from BAR")
assertEquals(A.FOO, A.FOO.extExplicit(), "explicit access from ext fun")
assertEquals(A.FOO, A.FOO.extByThis(), "access by this from ext fun")
// TODO uncoment when KT-4692 will be fixed
//assertEquals(A.FOO, A.FOO.extImplicit(), "implicit access from ext fun")
return "OK"
}