From 7ef5c75f267155f43c2bf5eacab27514a8a25885 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Tue, 1 Jul 2014 20:12:49 +0400 Subject: [PATCH] Supported inlining functions which access properties via field. --- .../org/jetbrains/jet/codegen/inline/InlineCodegen.java | 3 +-- .../jet/jps/build/IncrementalJpsTestGenerated.java | 5 +++++ .../packageInlineFunctionAccessingField/build.log | 7 +++++++ .../packageInlineFunctionAccessingField/inline.kt | 8 ++++++++ .../packageInlineFunctionAccessingField/inlineOther.kt | 8 ++++++++ .../packageInlineFunctionAccessingField/usage.kt | 6 ++++++ .../packageInlineFunctionAccessingField/usage.kt.new | 6 ++++++ 7 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 jps-plugin/testData/incremental/packageInlineFunctionAccessingField/build.log create mode 100644 jps-plugin/testData/incremental/packageInlineFunctionAccessingField/inline.kt create mode 100644 jps-plugin/testData/incremental/packageInlineFunctionAccessingField/inlineOther.kt create mode 100644 jps-plugin/testData/incremental/packageInlineFunctionAccessingField/usage.kt create mode 100644 jps-plugin/testData/incremental/packageInlineFunctionAccessingField/usage.kt.new diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/inline/InlineCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/inline/InlineCodegen.java index 4e59b273aaa..9488d29f43f 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/inline/InlineCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/inline/InlineCodegen.java @@ -102,8 +102,7 @@ public class InlineCodegen implements CallGenerator { codegen.getContext().isInlineFunction() ? InlineStrategy.IN_PLACE : functionDescriptor.getInlineStrategy(); this.asFunctionInline = false; - isSameModule = !(functionDescriptor instanceof DeserializedSimpleFunctionDescriptor) /*not compiled library*/ && - JvmCodegenUtil.isCallInsideSameModuleAsDeclared(functionDescriptor, codegen.getContext()); + isSameModule = JvmCodegenUtil.isCallInsideSameModuleAsDeclared(functionDescriptor, codegen.getContext()); } @Override diff --git a/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java b/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java index bb8c3735440..1628024b0a6 100644 --- a/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java +++ b/jps-plugin/test/org/jetbrains/jet/jps/build/IncrementalJpsTestGenerated.java @@ -141,6 +141,11 @@ public class IncrementalJpsTestGenerated extends AbstractIncrementalJpsTest { doTest("jps-plugin/testData/incremental/packageFilesChangedInTurn/"); } + @TestMetadata("packageInlineFunctionAccessingField") + public void testPackageInlineFunctionAccessingField() throws Exception { + doTest("jps-plugin/testData/incremental/packageInlineFunctionAccessingField/"); + } + @TestMetadata("packageInlineFunctionChanged") public void testPackageInlineFunctionChanged() throws Exception { doTest("jps-plugin/testData/incremental/packageInlineFunctionChanged/"); diff --git a/jps-plugin/testData/incremental/packageInlineFunctionAccessingField/build.log b/jps-plugin/testData/incremental/packageInlineFunctionAccessingField/build.log new file mode 100644 index 00000000000..7c79a56fe44 --- /dev/null +++ b/jps-plugin/testData/incremental/packageInlineFunctionAccessingField/build.log @@ -0,0 +1,7 @@ +Cleaning output files: +out/production/module/test/TestPackage-usage-*.class +out/production/module/test/TestPackage.class +End of files +Compiling files: +src/usage.kt +End of files diff --git a/jps-plugin/testData/incremental/packageInlineFunctionAccessingField/inline.kt b/jps-plugin/testData/incremental/packageInlineFunctionAccessingField/inline.kt new file mode 100644 index 00000000000..9523df0da2c --- /dev/null +++ b/jps-plugin/testData/incremental/packageInlineFunctionAccessingField/inline.kt @@ -0,0 +1,8 @@ +package test + +val property = ":)" + +inline fun f(body: () -> Unit) { + println("i'm inline function" + property) + body() +} diff --git a/jps-plugin/testData/incremental/packageInlineFunctionAccessingField/inlineOther.kt b/jps-plugin/testData/incremental/packageInlineFunctionAccessingField/inlineOther.kt new file mode 100644 index 00000000000..9c34b3337b9 --- /dev/null +++ b/jps-plugin/testData/incremental/packageInlineFunctionAccessingField/inlineOther.kt @@ -0,0 +1,8 @@ +package other + +val property = ":)" + +inline fun f(body: () -> Unit) { + println("i'm inline function" + property) + body() +} diff --git a/jps-plugin/testData/incremental/packageInlineFunctionAccessingField/usage.kt b/jps-plugin/testData/incremental/packageInlineFunctionAccessingField/usage.kt new file mode 100644 index 00000000000..e5bb1ff5213 --- /dev/null +++ b/jps-plugin/testData/incremental/packageInlineFunctionAccessingField/usage.kt @@ -0,0 +1,6 @@ +package test + +fun main(args: Array) { + f { println("to be inlined") } + other.f { println("to be inlined") } +} diff --git a/jps-plugin/testData/incremental/packageInlineFunctionAccessingField/usage.kt.new b/jps-plugin/testData/incremental/packageInlineFunctionAccessingField/usage.kt.new new file mode 100644 index 00000000000..e5bb1ff5213 --- /dev/null +++ b/jps-plugin/testData/incremental/packageInlineFunctionAccessingField/usage.kt.new @@ -0,0 +1,6 @@ +package test + +fun main(args: Array) { + f { println("to be inlined") } + other.f { println("to be inlined") } +}