diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java b/js/js.translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java index d757402d892..321c21d7207 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/expression/ExpressionVisitor.java @@ -170,7 +170,15 @@ public final class ExpressionVisitor extends TranslatorVisitor { @NotNull public JsNode visitCallExpression(@NotNull JetCallExpression expression, @NotNull TranslationContext context) { - return CallExpressionTranslator.translate(expression, null, context).source(expression); + if (InlinedCallExpressionTranslator.shouldBeInlined(expression, context) && + BindingContextUtilPackage.isUsedAsExpression(expression, context.bindingContext())) { + TemporaryVariable temporaryVariable = context.declareTemporary(null); + JsExpression callResult = CallExpressionTranslator.translate(expression, null, context).source(expression); + context.addStatementToCurrentBlock(JsAstUtils.assignment(temporaryVariable.reference(), callResult).makeStmt()); + return temporaryVariable.reference(); + } else { + return CallExpressionTranslator.translate(expression, null, context).source(expression); + } } @Override diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/reference/QualifiedExpressionTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/reference/QualifiedExpressionTranslator.java index 4de9bf3af4d..4e34013a839 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/reference/QualifiedExpressionTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/reference/QualifiedExpressionTranslator.java @@ -22,6 +22,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.PackageViewDescriptor; import org.jetbrains.jet.lang.psi.*; +import org.jetbrains.jet.lang.resolve.bindingContextUtil.BindingContextUtilPackage; import org.jetbrains.k2js.translate.context.TemporaryVariable; import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.utils.ErrorReportingUtils; @@ -68,7 +69,15 @@ public final class QualifiedExpressionTranslator { return VariableAccessTranslator.newInstance(context, (JetSimpleNameExpression)selector, receiver).translateAsGet(); } if (selector instanceof JetCallExpression) { - return invokeCallExpressionTranslator(receiver, selector, context); + if (InlinedCallExpressionTranslator.shouldBeInlined((JetCallExpression) selector, context) && + BindingContextUtilPackage.isUsedAsExpression(selector, context.bindingContext())) { + TemporaryVariable temporaryVariable = context.declareTemporary(null); + JsExpression result = invokeCallExpressionTranslator(receiver, selector, context); + context.addStatementToCurrentBlock(JsAstUtils.assignment(temporaryVariable.reference(), result).makeStmt()); + return temporaryVariable.reference(); + } else { + return invokeCallExpressionTranslator(receiver, selector, context); + } } //TODO: never get there if (selector instanceof JetSimpleNameExpression) {