Properly reorder arguments in anonymous object super class constructor

#KT-18356 Fixed
This commit is contained in:
Mikhael Bogdanov
2017-09-06 18:03:12 +02:00
parent 44fd8103d4
commit 2fa4c28e0f
13 changed files with 249 additions and 18 deletions
@@ -0,0 +1,10 @@
var result = "fail"
open class Base(val o: String, val k: String)
fun box(): String {
val obj1 = object : Base(k = { result = "O"; "K"}() , o = {result += "K"; "O"}()) {}
if (result != "OK") return "fail $result"
return obj1.o + obj1.k
}
@@ -0,0 +1,11 @@
var result = "fail"
open class Base(val o: String, val k: String)
class Derived : Base(k = { result = "O"; "K"}() , o = {result += "K"; "O"}()) {}
fun box(): String {
val derived = Derived()
if (result != "OK") return "fail $result"
return derived.o + derived.k
}
@@ -0,0 +1,8 @@
open class Base(val addr: Long, val name: String)
fun box(): String {
val obj1 = object : Base(name = "OK", addr = 0x1234L) {}
if (obj1.addr != 0x1234L) return "fail ${obj1.addr}"
return obj1.name
}
@@ -0,0 +1,8 @@
abstract class Base(val s: String, vararg ints: Int)
fun foo(s: String, ints: IntArray) = object : Base(ints = *ints, s = s) {}
fun box(): String {
return foo("OK", intArrayOf(1, 2)).s
}
@@ -0,0 +1,14 @@
open class Foo(val value: String) {
open inner class Inner(val d: Double = -1.0, val s: String, vararg val y: Int) {
open fun result() = "Fail"
}
val obj = object : Inner(s = "O") {
override fun result() = s + value
}
}
fun box(): String {
return Foo("K").obj.result()
}
@@ -0,0 +1,17 @@
fun box(): String {
val capture = "O"
class Local {
val captured = capture
open inner class Inner(val d: Double = -1.0, val s: String, vararg val y: Int) {
open fun result() = "Fail"
}
val obj = object : Inner(s = "K") {
override fun result() = capture + s
}
}
return Local().obj.result()
}