diff --git a/js/js.tests/test/org/jetbrains/k2js/test/semantics/DefaultArgumentsTest.java b/js/js.tests/test/org/jetbrains/k2js/test/semantics/DefaultArgumentsTest.java index 7b85103e6be..bfbc0e08cfe 100644 --- a/js/js.tests/test/org/jetbrains/k2js/test/semantics/DefaultArgumentsTest.java +++ b/js/js.tests/test/org/jetbrains/k2js/test/semantics/DefaultArgumentsTest.java @@ -71,4 +71,8 @@ public class DefaultArgumentsTest extends SingleFileTranslationTest { public void testComplexExpressionAsDefaultArgument() throws Exception { checkFooBoxIsOk(); } + + public void testDefaultArgumentsInFunctionWithExpressionAsBody() throws Exception { + checkFooBoxIsOk(); + } } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/utils/FunctionBodyTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/utils/FunctionBodyTranslator.java index a361b288a59..2007641fa51 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/utils/FunctionBodyTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/utils/FunctionBodyTranslator.java @@ -85,7 +85,7 @@ public final class FunctionBodyTranslator extends AbstractTranslator { JetExpression jetBodyExpression = declaration.getBodyExpression(); assert jetBodyExpression != null : "Cannot translate a body of an abstract function."; JsBlock jsBlock = new JsBlock(setDefaultValueForArguments(descriptor, context())); - jsBlock.getStatements().addAll(mayBeWrapWithReturn(Translation.translateExpression(jetBodyExpression, context())).getStatements()); + jsBlock.getStatements().addAll(mayBeWrapWithReturn(Translation.translateExpression(jetBodyExpression, context(), jsBlock)).getStatements()); return jsBlock; } diff --git a/js/js.translator/testData/defaultArguments/cases/defaultArgumentsInFunctionWithExpressionAsBody.kt b/js/js.translator/testData/defaultArguments/cases/defaultArgumentsInFunctionWithExpressionAsBody.kt new file mode 100644 index 00000000000..9627e6c7df1 --- /dev/null +++ b/js/js.translator/testData/defaultArguments/cases/defaultArgumentsInFunctionWithExpressionAsBody.kt @@ -0,0 +1,17 @@ +// KT-6037: KT-6037 Javascript default function arguments fill code generated in wrong order on method without "return keyword" +package foo + +inline fun id(x: T) = x + +fun test(arg: Int = 10) = id(arg) + +fun foo(value: String = "K") = "O" + try { value } catch(e: Exception) { "..." } + +fun box(): String { + + assertEquals(10, test()) + assertEquals(100, test(100)) + assertEquals("OK", foo()) + + return "OK" +} \ No newline at end of file