KT-26765: Support 'call' for constructors with inline class parameters
This commit is contained in:
Vendored
+27
@@ -0,0 +1,27 @@
|
||||
// IGNORE_BACKEND: JS_IR, JS, NATIVE, JVM_IR
|
||||
// WITH_REFLECT
|
||||
import kotlin.test.assertEquals
|
||||
|
||||
inline class Z(val x: Int)
|
||||
|
||||
class Outer(val z1: Z) {
|
||||
inner class Inner(val z2: Z) {
|
||||
val test = "$z1 $z2"
|
||||
}
|
||||
}
|
||||
|
||||
inline class InlineOuter(val z1: Z) {
|
||||
inner class Inner(val z2: Z) {
|
||||
val test = "$z1 $z2"
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
assertEquals(Z(1), ::Outer.call(Z(1)).z1)
|
||||
assertEquals("Z(x=1) Z(x=2)", Outer::Inner.call(Outer(Z(1)), Z(2)).test)
|
||||
assertEquals("Z(x=1) Z(x=3)", Outer(Z(1))::Inner.call(Z(3)).test)
|
||||
assertEquals("Z(x=1) Z(x=2)", InlineOuter::Inner.call(InlineOuter(Z(1)), Z(2)).test)
|
||||
assertEquals("Z(x=1) Z(x=3)", InlineOuter(Z(1))::Inner.call(Z(3)).test)
|
||||
|
||||
return "OK"
|
||||
}
|
||||
-10
@@ -13,14 +13,6 @@ class C {
|
||||
|
||||
fun topLevel(x: String, y: S): S = S(x) + y
|
||||
|
||||
/* TODO: support constructors with inline class types in the signature (KT-26765)
|
||||
class D {
|
||||
inner class Inner(x: S, y: S) {
|
||||
val result = x + y
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
fun S.extension(y: S): S = this + y
|
||||
|
||||
fun S.extension2(): String = value
|
||||
@@ -28,12 +20,10 @@ fun S.extension2(): String = value
|
||||
fun box(): String {
|
||||
assertEquals(S("ab"), C::member.call(C(), S("a"), "b"))
|
||||
assertEquals(S("cd"), ::topLevel.call("c", S("d")))
|
||||
// assertEquals(S("ef"), D::Inner.call(D(), S("e"), S("f")).result)
|
||||
assertEquals(S("gh"), S::extension.call(S("g"), S("h")))
|
||||
assertEquals("_", S::extension2.call(S("_")))
|
||||
|
||||
assertEquals(S("ij"), C()::member.call(S("i"), "j"))
|
||||
// assertEquals(S("kl"), D()::Inner.call(S("k"), S("l")).result)
|
||||
assertEquals(S("mn"), S("m")::extension.call(S("n")))
|
||||
assertEquals("_", S("_")::extension2.call())
|
||||
|
||||
Reference in New Issue
Block a user