// Changed when traits were introduced. May not make sense any more open class X(val x : Int) {} trait Y { abstract val y : Int } class YImpl(override val y : Int) : Y {} class Point(x : Int, yy : Int) : X(x) , Y { override val y : Int = yy } trait Abstract {} class P1(x : Int, yy : Y) : Abstract, X(x), Y by yy {} class P2(x : Int, yy : Y) : X(x), Abstract, Y by yy {} class P3(x : Int, yy : Y) : X(x), Y by yy, Abstract {} class P4(x : Int, yy : Y) : Y by yy, Abstract, X(x) {} fun box() : String { if (X(239).x != 239) return "FAIL #1" if (YImpl(239).y != 239) return "FAIL #2" val p = Point(240, -1) if (p.x + p.y != 239) return "FAIL #3" val y = YImpl(-1) val p1 = P1(240, y) if (p1.x + p1.y != 239) return "FAIL #4" val p2 = P2(240, y) if (p2.x + p2.y != 239) return "FAIL #5" val p3 = P3(240, y) if (p3.x + p3.y != 239) return "FAIL #6" val p4 = P4(240, y) if (p4.x + p4.y != 239) return "FAIL #7" return "OK" }