JS backend: use ResolvedCall when translate super expression and remove some heuristics when translate receivers; generate right receiver when reference to super of outer class;

This commit is contained in:
Zalim Bashorov
2016-05-05 18:19:33 +03:00
committed by Zalim Bashorov
parent 07adf65f70
commit 7b1afd4e6a
6 changed files with 59 additions and 57 deletions
@@ -0,0 +1,35 @@
package foo
open class D {
open val name = "D"
fun boo() = "D[$name]::boo;"
}
open class Z : D() {
override val name = "Z"
fun bar() = "Z[$name]::bar;"
private fun baz() = "Z[$name]::baz;"
inner class X : Z() {
override val name = "X"
fun foo() = "X[$name]::foo;"
fun test() {
assertEquals("X[X]::foo;", this.foo())
assertEquals("Z[Z]::bar;", this@Z.bar())
assertEquals("Z[X]::bar;", super.bar())
assertEquals("Z[X]::bar;", super<Z>.bar())
assertEquals("D[Z]::boo;", super@Z.boo())
assertEquals("X[X]::foo;", foo())
assertEquals("Z[X]::bar;", bar())
assertEquals("Z[Z]::baz;", baz())
}
}
}
fun box(): String {
Z().X().test()
return "OK"
}