From 8e6b1da592ab27e6e6f77aeb464095004cc61cc0 Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Wed, 5 Jul 2017 17:40:40 +0300 Subject: [PATCH] Generate less JS inline function wrappers --- .../org/jetbrains/kotlin/js/inline/JsInliner.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/JsInliner.java b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/JsInliner.java index 98c20e4e267..a147afd0485 100644 --- a/js/js.inliner/src/org/jetbrains/kotlin/js/inline/JsInliner.java +++ b/js/js.inliner/src/org/jetbrains/kotlin/js/inline/JsInliner.java @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.js.inline.context.FunctionContext; import org.jetbrains.kotlin.js.inline.context.InliningContext; import org.jetbrains.kotlin.js.inline.context.NamingContext; import org.jetbrains.kotlin.js.inline.util.*; +import org.jetbrains.kotlin.js.translate.expression.InlineMetadata; import org.jetbrains.kotlin.resolve.inline.InlineStrategy; import java.util.*; @@ -64,6 +65,7 @@ public class JsInliner extends JsVisitorWithContextImpl { private final LinkedList inlineCallInfos = new LinkedList<>(); private final Function1 canBeExtractedByInliner = node -> node instanceof JsInvocation && hasToBeInlined((JsInvocation) node); + private int inlineFunctionDepth; public static void process( @NotNull JsConfig.Reporter reporter, @@ -266,6 +268,10 @@ public class JsInliner extends JsVisitorWithContextImpl { @Override public boolean visit(@NotNull JsInvocation call, @NotNull JsContext context) { + if (InlineMetadata.decompose(call) != null) { + inlineFunctionDepth++; + } + if (!hasToBeInlined(call)) return true; JsFunction containingFunction = getCurrentNamedFunction(); @@ -280,7 +286,10 @@ public class JsInliner extends JsVisitorWithContextImpl { reportInlineCycle(call, definition.getFunction()); } else if (!processedFunctions.contains(definition.getFunction())) { + inlineFunctionDepth++; visit(definition); + inlineFunctionDepth--; + return false; } return true; @@ -288,6 +297,10 @@ public class JsInliner extends JsVisitorWithContextImpl { @Override public void endVisit(@NotNull JsInvocation x, @NotNull JsContext ctx) { + if (InlineMetadata.decompose(x) != null) { + inlineFunctionDepth--; + } + if (hasToBeInlined(x)) { inline(x, ctx); } @@ -381,7 +394,7 @@ public class JsInliner extends JsVisitorWithContextImpl { String tag = getImportTag(jsVars); if (tag != null) { JsName name = jsVars.getVars().get(0).getName(); - JsName existingName = existingImports == null ? MetadataProperties.getLocalAlias(name) : null; + JsName existingName = inlineFunctionDepth == 0 ? MetadataProperties.getLocalAlias(name) : null; if (existingName == null) { existingName = existingImports.computeIfAbsent(tag, t -> { copiedStatements.add(jsVars);