| class A { |
| override fun toString(): String = "A" |
| inner class B { |
| override fun toString(): String = "B" |
| inner class C(val a: A = this@A, val b: B = this@B) { |
| override fun toString(): String = "C${f1()}${f2()}${f3()}${f4()}${f5()}" |
| fun f1(): String = "C" |
| fun f2(): String = a.toString() |
| fun f3(): String = b.toString() |
| fun f4(): String = this@A.toString() |
| fun f5(): String = this@B.toString() |
| fun f6(aa: A = this@A): String = aa.toString() |
| } |
| } |
| } |
| |
| |
| fun box(): String { |
| val c = A().B().C() |
| if (c.toString() != "CCABAB") "FAIL1" |
| if (c.f1() != "C") return "FAIL2" |
| if (c.f2() != "A") return "FAIL3" |
| if (c.f3() != "B") return "FAIL4" |
| if (c.f4() != "A") return "FAIL5" |
| if (c.f5() != "B") return "FAIL6" |
| if (c.f6() != "A") return "FAIL7" |
| return "OK" |
| } |