diff --git a/backend.native/tests/build.gradle b/backend.native/tests/build.gradle index b9edd3701a9..755b30a766a 100644 --- a/backend.native/tests/build.gradle +++ b/backend.native/tests/build.gradle @@ -1739,6 +1739,21 @@ task deserialized_listof0(type: RunKonanTest) { source = "serialization/deserialized_listof0.kt" } +task deserialized_members(type: LinkKonanTest) { + goldValue= + "first level\n"+ + "second level\n"+ + "third levelxz\n"+ + "inner first level\n"+ + "inner second level\n"+ + "inner third level\n"+ + "types first level: 13\n"+ + "types second level cha-cha-cha\n"+ + "types third level 1\n" + lib = "serialization/serialize_members.kt" + source = "serialization/deserialize_members.kt" +} + // Just check that the driver is able to produce runnable binaries. task driver0(type: RunDriverKonanTest) { goldValue = "Hello, world!\n" diff --git a/backend.native/tests/serialization/deserialize_members.kt b/backend.native/tests/serialization/deserialize_members.kt new file mode 100644 index 00000000000..a81f6661c92 --- /dev/null +++ b/backend.native/tests/serialization/deserialize_members.kt @@ -0,0 +1,34 @@ +import foo.bar.* + +fun main(args: Array) { + val c = C() + val d = C.D() + val e = C.D.E() + c.foo() + d.foo() + e.foo() + + val c2 = C2() + val d2 = C2().D2() + val e2 = C2().D2().E2() + c2.foo() + d2.foo() + e2.foo() + + val c3 = C3() + val d3 = C3.D3() + val e3 = C3.D3.E3() + c3.foo(13) + d3.foo("cha-cha-cha") + e3.foo(1.0f) + + // This part doesn't work with file local inline functions. + // So disabled for now. + // val c4 = C4() + // val d4 = C4().D4() + // val e4 = C4().D4().E4() + // c4.foo(13) + // d4.foo("cawabunga", 17) + // e4.foo(19, "raqa-taqa", 23) + +} diff --git a/backend.native/tests/serialization/serialize_members.kt b/backend.native/tests/serialization/serialize_members.kt new file mode 100644 index 00000000000..f9da87c3781 --- /dev/null +++ b/backend.native/tests/serialization/serialize_members.kt @@ -0,0 +1,80 @@ +package foo.bar + +class R { + inline fun bar(t: T) { + println("just a single class: $t") + } +} + +class C { + inline fun foo() { + println("first level") + } + + class D { + inline fun foo() { + println("second level") + } + + class E { + inline fun foo() { + println("third levelxz") + } + } + } +} + +class C2 { + inline fun foo() { + println("inner first level") + } + + inner class D2 { + inline fun foo() { + println("inner second level") + } + + inner class E2 { + inline fun foo() { + println("inner third level") + } + } + } +} + +class C3 { + inline fun foo(x: X) { + println("types first level: $x") + } + + class D3 { + inline fun foo(x: X) { + println("types second level $x") + } + + class E3 { + inline fun foo(x: X) { + println("types third level $x") + } + } + } +} + +class C4 { + inline fun foo(x: X) { + println("inner types first level: $x") + } + + inner class D4 { + inline fun foo(x: X, y: Y) { + println("inner types second level $x, $y") + } + + inner class E4 { + inline fun foo(x: X, y: Y, z: Z) { + println("inner types third level $x, $y, $z") + } + } + } +} +