From d2ff821a3ba93b014534f8a0287afe170f6930b7 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Thu, 7 Sep 2017 17:43:24 +0300 Subject: [PATCH] JS: prove that lambdas in inline function compiled correctly Obsoletes KT-19712 --- .../js/test/semantics/BoxJsTestGenerated.java | 6 +++ .../inlineMemberFunWithLambda.kt | 40 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 js/js.translator/testData/box/inlineMultiModule/inlineMemberFunWithLambda.kt diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java index 86d72e5a374..b1a202f3c7c 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/BoxJsTestGenerated.java @@ -4784,6 +4784,12 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest { doTest(fileName); } + @TestMetadata("inlineMemberFunWithLambda.kt") + public void testInlineMemberFunWithLambda() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/inlineMultiModule/inlineMemberFunWithLambda.kt"); + doTest(fileName); + } + @TestMetadata("inlineableAliasForExternalDeclaration.kt") public void testInlineableAliasForExternalDeclaration() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/inlineMultiModule/inlineableAliasForExternalDeclaration.kt"); diff --git a/js/js.translator/testData/box/inlineMultiModule/inlineMemberFunWithLambda.kt b/js/js.translator/testData/box/inlineMultiModule/inlineMemberFunWithLambda.kt new file mode 100644 index 00000000000..bf85f757154 --- /dev/null +++ b/js/js.translator/testData/box/inlineMultiModule/inlineMemberFunWithLambda.kt @@ -0,0 +1,40 @@ +// EXPECTED_REACHABLE_NODES: 1017 +// LANGUAGE_VERSION: 1.2 +// MODULE: lib +// FILE: lib.kt +open class C { + internal inline fun a(noinline x: () -> String = { "a" }) = x() + + internal inline fun b(): () -> String = { "b" } + + inline fun c(noinline x: () -> String = { "c" }) = x() + + inline fun d(): () -> String = { "d" } +} + +internal inline fun test1(): String { + val x = C() + return x.a() + x.b()() + x.c() + x.d()() +} + +internal fun callTest1(): String = test1() + +// MODULE: main(lib)(lib) +// FILE: lib.kt +internal inline fun test2(): String { + val x = C() + return "2" + x.a() + x.b()() + x.c() + x.d()() +} + +fun box(): String { + val r1 = test1() + if (r1 != "abcd") return "fail1: $r1" + + val rc1 = callTest1() + if (rc1 != "abcd") return "fail1c: $rc1" + + val r2 = test2() + if (r2 != "2abcd") return "fail2: $r2" + + return "OK" +} \ No newline at end of file