From 62a1ea643abb36d4f5a8dd8cd4f47cf8d9fbd312 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steven=20Sch=C3=A4fer?= Date: Thu, 15 Aug 2019 16:02:30 +0200 Subject: [PATCH] Add additional tests for bound receivers in callable references --- .../bound/receiverEvaluatedOnce.kt | 14 +++++++++++++ .../property/receiverEvaluatedOnce.kt | 18 ++++++++++++++++ .../codegen/box/sam/receiverEvaluatedOnce.kt | 21 +++++++++++++++++++ .../codegen/BlackBoxCodegenTestGenerated.java | 15 +++++++++++++ .../LightAnalysisModeTestGenerated.java | 15 +++++++++++++ .../ir/IrBlackBoxCodegenTestGenerated.java | 15 +++++++++++++ .../IrJsCodegenBoxTestGenerated.java | 10 +++++++++ .../semantics/JsCodegenBoxTestGenerated.java | 10 +++++++++ 8 files changed, 118 insertions(+) create mode 100644 compiler/testData/codegen/box/callableReference/bound/receiverEvaluatedOnce.kt create mode 100644 compiler/testData/codegen/box/callableReference/property/receiverEvaluatedOnce.kt create mode 100644 compiler/testData/codegen/box/sam/receiverEvaluatedOnce.kt diff --git a/compiler/testData/codegen/box/callableReference/bound/receiverEvaluatedOnce.kt b/compiler/testData/codegen/box/callableReference/bound/receiverEvaluatedOnce.kt new file mode 100644 index 00000000000..fcc6d27ed51 --- /dev/null +++ b/compiler/testData/codegen/box/callableReference/bound/receiverEvaluatedOnce.kt @@ -0,0 +1,14 @@ +var x = 0 + +class A { + fun f() = if (x == 1) "OK" else "Fail $x" +} + +fun callTwice(f: () -> String): String { + f() + return f() +} + +fun box(): String { + return callTwice(({ x++; A() }())::f) +} diff --git a/compiler/testData/codegen/box/callableReference/property/receiverEvaluatedOnce.kt b/compiler/testData/codegen/box/callableReference/property/receiverEvaluatedOnce.kt new file mode 100644 index 00000000000..3b58ed7b9a5 --- /dev/null +++ b/compiler/testData/codegen/box/callableReference/property/receiverEvaluatedOnce.kt @@ -0,0 +1,18 @@ +// WITH_REFLECT +import kotlin.reflect.KProperty0 + +var x = 0 + +class A { + val p: String + get() = if (x == 1) "OK" else "Fail $x" +} + +fun callTwice(p: KProperty0): String { + p.get() + return p.get() +} + +fun box(): String { + return callTwice(({ x++; A() }())::p) +} diff --git a/compiler/testData/codegen/box/sam/receiverEvaluatedOnce.kt b/compiler/testData/codegen/box/sam/receiverEvaluatedOnce.kt new file mode 100644 index 00000000000..18842a303b0 --- /dev/null +++ b/compiler/testData/codegen/box/sam/receiverEvaluatedOnce.kt @@ -0,0 +1,21 @@ +// TARGET_BACKEND: JVM +// WITH_RUNTIME +// FILE: JavaRunner.java +public class JavaRunner { + public static void runTwice(Runnable runnable) { + runnable.run(); + runnable.run(); + } +} + +// FILE: test.kt +class A() { + fun f() {} +} + +fun box(): String { + var x = 0 + JavaRunner.runTwice({ x++; A() }()::f) + if (x != 1) return "Fail" + return "OK" +} diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 54c3364326a..115bb682ffc 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -1964,6 +1964,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/callableReference/bound/primitiveReceiver.kt"); } + @TestMetadata("receiverEvaluatedOnce.kt") + public void testReceiverEvaluatedOnce() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/bound/receiverEvaluatedOnce.kt"); + } + @TestMetadata("simpleFunction.kt") public void testSimpleFunction() throws Exception { runTest("compiler/testData/codegen/box/callableReference/bound/simpleFunction.kt"); @@ -2511,6 +2516,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/callableReference/property/privateSetterOutsideClass.kt"); } + @TestMetadata("receiverEvaluatedOnce.kt") + public void testReceiverEvaluatedOnce() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/property/receiverEvaluatedOnce.kt"); + } + @TestMetadata("simpleExtension.kt") public void testSimpleExtension() throws Exception { runTest("compiler/testData/codegen/box/callableReference/property/simpleExtension.kt"); @@ -23431,6 +23441,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/sam/partialSamKT.kt"); } + @TestMetadata("receiverEvaluatedOnce.kt") + public void testReceiverEvaluatedOnce() throws Exception { + runTest("compiler/testData/codegen/box/sam/receiverEvaluatedOnce.kt"); + } + @TestMetadata("compiler/testData/codegen/box/sam/constructors") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 7ca79ef221a..15ae4189ec2 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -1964,6 +1964,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/callableReference/bound/primitiveReceiver.kt"); } + @TestMetadata("receiverEvaluatedOnce.kt") + public void testReceiverEvaluatedOnce() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/bound/receiverEvaluatedOnce.kt"); + } + @TestMetadata("simpleFunction.kt") public void testSimpleFunction() throws Exception { runTest("compiler/testData/codegen/box/callableReference/bound/simpleFunction.kt"); @@ -2511,6 +2516,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/callableReference/property/privateSetterOutsideClass.kt"); } + @TestMetadata("receiverEvaluatedOnce.kt") + public void testReceiverEvaluatedOnce() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/property/receiverEvaluatedOnce.kt"); + } + @TestMetadata("simpleExtension.kt") public void testSimpleExtension() throws Exception { runTest("compiler/testData/codegen/box/callableReference/property/simpleExtension.kt"); @@ -23431,6 +23441,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/sam/partialSamKT.kt"); } + @TestMetadata("receiverEvaluatedOnce.kt") + public void testReceiverEvaluatedOnce() throws Exception { + runTest("compiler/testData/codegen/box/sam/receiverEvaluatedOnce.kt"); + } + @TestMetadata("compiler/testData/codegen/box/sam/constructors") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 649ff92ce01..ea9da6c2fae 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -1944,6 +1944,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/callableReference/bound/primitiveReceiver.kt"); } + @TestMetadata("receiverEvaluatedOnce.kt") + public void testReceiverEvaluatedOnce() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/bound/receiverEvaluatedOnce.kt"); + } + @TestMetadata("simpleFunction.kt") public void testSimpleFunction() throws Exception { runTest("compiler/testData/codegen/box/callableReference/bound/simpleFunction.kt"); @@ -2491,6 +2496,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/callableReference/property/privateSetterOutsideClass.kt"); } + @TestMetadata("receiverEvaluatedOnce.kt") + public void testReceiverEvaluatedOnce() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/property/receiverEvaluatedOnce.kt"); + } + @TestMetadata("simpleExtension.kt") public void testSimpleExtension() throws Exception { runTest("compiler/testData/codegen/box/callableReference/property/simpleExtension.kt"); @@ -22331,6 +22341,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/sam/partialSamKT.kt"); } + @TestMetadata("receiverEvaluatedOnce.kt") + public void testReceiverEvaluatedOnce() throws Exception { + runTest("compiler/testData/codegen/box/sam/receiverEvaluatedOnce.kt"); + } + @TestMetadata("compiler/testData/codegen/box/sam/constructors") @TestDataPath("$PROJECT_ROOT") @RunWith(JUnit3RunnerWithInners.class) diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index bf788a32c27..12be23a474b 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -1439,6 +1439,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/callableReference/bound/primitiveReceiver.kt"); } + @TestMetadata("receiverEvaluatedOnce.kt") + public void testReceiverEvaluatedOnce() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/bound/receiverEvaluatedOnce.kt"); + } + @TestMetadata("simpleFunction.kt") public void testSimpleFunction() throws Exception { runTest("compiler/testData/codegen/box/callableReference/bound/simpleFunction.kt"); @@ -1976,6 +1981,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/callableReference/property/privateSetterOutsideClass.kt"); } + @TestMetadata("receiverEvaluatedOnce.kt") + public void testReceiverEvaluatedOnce() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/property/receiverEvaluatedOnce.kt"); + } + @TestMetadata("simpleExtension.kt") public void testSimpleExtension() throws Exception { runTest("compiler/testData/codegen/box/callableReference/property/simpleExtension.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index b445e3d2739..bf426d172de 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -1439,6 +1439,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/callableReference/bound/primitiveReceiver.kt"); } + @TestMetadata("receiverEvaluatedOnce.kt") + public void testReceiverEvaluatedOnce() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/bound/receiverEvaluatedOnce.kt"); + } + @TestMetadata("simpleFunction.kt") public void testSimpleFunction() throws Exception { runTest("compiler/testData/codegen/box/callableReference/bound/simpleFunction.kt"); @@ -1976,6 +1981,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/callableReference/property/privateSetterOutsideClass.kt"); } + @TestMetadata("receiverEvaluatedOnce.kt") + public void testReceiverEvaluatedOnce() throws Exception { + runTest("compiler/testData/codegen/box/callableReference/property/receiverEvaluatedOnce.kt"); + } + @TestMetadata("simpleExtension.kt") public void testSimpleExtension() throws Exception { runTest("compiler/testData/codegen/box/callableReference/property/simpleExtension.kt");