diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index c3ecd508ed8..4b71254f03d 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -3840,6 +3840,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/classes/exceptionConstructor.kt"); } + @TestMetadata("extensionFunWithDefaultParam.kt") + public void testExtensionFunWithDefaultParam() throws Exception { + runTest("compiler/testData/codegen/box/classes/extensionFunWithDefaultParam.kt"); + } + @TestMetadata("extensionOnNamedClassObject.kt") public void testExtensionOnNamedClassObject() throws Exception { runTest("compiler/testData/codegen/box/classes/extensionOnNamedClassObject.kt"); diff --git a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsDefaultArgumentStubGenerator.kt b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsDefaultArgumentStubGenerator.kt index 982da3cc052..82623bd231c 100644 --- a/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsDefaultArgumentStubGenerator.kt +++ b/compiler/ir/backend.js/src/org/jetbrains/kotlin/ir/backend/js/lower/JsDefaultArgumentStubGenerator.kt @@ -37,11 +37,12 @@ class JsDefaultArgumentStubGenerator(override val context: JsIrBackendContext) : ): IrExpression { val paramCount = oldIrFunction.valueParameters.size val invokeFunctionN = resolveInvoke(paramCount) - // NOTE: currently we do not have a syntax to perform super extension call - // but in case we have such functionality in the future the logic bellow should be fixed + return irCall(invokeFunctionN, IrStatementOrigin.INVOKE).apply { dispatchReceiver = irImplicitCast(irGet(handlerDeclaration), invokeFunctionN.dispatchReceiverParameter!!.type) - assert(newIrFunction.extensionReceiverParameter == null) + // NOTE: currently we do not have a syntax to perform super extension call + // that's why we've used to just fail with an exception in case we have extension function in for JS IR compilation + // TODO: that was overkill, however, we still need to revisit this issue later on params.forEachIndexed { i, variable -> putValueArgument(i, irGet(variable)) } } } diff --git a/compiler/testData/codegen/box/classes/extensionFunWithDefaultParam.kt b/compiler/testData/codegen/box/classes/extensionFunWithDefaultParam.kt new file mode 100644 index 00000000000..34dfe24ed10 --- /dev/null +++ b/compiler/testData/codegen/box/classes/extensionFunWithDefaultParam.kt @@ -0,0 +1,38 @@ +// DONT_TARGET_EXACT_BACKEND: WASM +// WASM_MUTE_REASON: IGNORED_IN_JS +// IGNORE_BACKEND: NATIVE + +open class MyLogic { + protected open val postfix = "ZZZ" + open fun String.foo(prefix: String = "XXX"): String = transform(prefix + this + postfix) + protected fun transform(a: String) = "$a:$a" + fun result(): String { + return "YYY".foo() + } +} +open class MyLogicWithDifferentPostfix : MyLogic() { + override val postfix = "WWW" +} + +class MyLogicSpecified : MyLogic() { + override fun String.foo(prefix: String): String = "$prefix::$this::$postfix" +} + +fun box(): String { + val result1 = MyLogic().result() + if (result1 != "XXXYYYZZZ:XXXYYYZZZ") { + return "fail1: ${result1}" + } + + val result2 = MyLogicWithDifferentPostfix().result() + if (result2 != "XXXYYYWWW:XXXYYYWWW") { + return "fail2: ${result2}" + } + + val result3 = MyLogicSpecified().result() + if (result3 != "XXX::YYY::ZZZ") { + return "fail3: ${result3}" + } + + return "OK" +} \ No newline at end of file diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 621a623ddbe..b175f9f569d 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -3860,6 +3860,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/classes/exceptionConstructor.kt"); } + @TestMetadata("extensionFunWithDefaultParam.kt") + public void testExtensionFunWithDefaultParam() throws Exception { + runTest("compiler/testData/codegen/box/classes/extensionFunWithDefaultParam.kt"); + } + @TestMetadata("extensionOnNamedClassObject.kt") public void testExtensionOnNamedClassObject() throws Exception { runTest("compiler/testData/codegen/box/classes/extensionOnNamedClassObject.kt"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 6f4a70523f5..2ee2e8e18c8 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -3865,6 +3865,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/classes/exceptionConstructor.kt"); } + @TestMetadata("extensionFunWithDefaultParam.kt") + public void testExtensionFunWithDefaultParam() throws Exception { + runTest("compiler/testData/codegen/box/classes/extensionFunWithDefaultParam.kt"); + } + @TestMetadata("extensionOnNamedClassObject.kt") public void testExtensionOnNamedClassObject() throws Exception { runTest("compiler/testData/codegen/box/classes/extensionOnNamedClassObject.kt"); diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 9c988ade812..328025700e5 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -3840,6 +3840,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/classes/exceptionConstructor.kt"); } + @TestMetadata("extensionFunWithDefaultParam.kt") + public void testExtensionFunWithDefaultParam() throws Exception { + runTest("compiler/testData/codegen/box/classes/extensionFunWithDefaultParam.kt"); + } + @TestMetadata("extensionOnNamedClassObject.kt") public void testExtensionOnNamedClassObject() throws Exception { runTest("compiler/testData/codegen/box/classes/extensionOnNamedClassObject.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index dac3666dac3..e94581ca30c 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -3015,6 +3015,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/classes/exceptionConstructor.kt"); } + @TestMetadata("extensionFunWithDefaultParam.kt") + public void testExtensionFunWithDefaultParam() throws Exception { + runTest("compiler/testData/codegen/box/classes/extensionFunWithDefaultParam.kt"); + } + @TestMetadata("extensionOnNamedClassObject.kt") public void testExtensionOnNamedClassObject() throws Exception { runTest("compiler/testData/codegen/box/classes/extensionOnNamedClassObject.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index 3d82eb44618..230765ea840 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -3015,6 +3015,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/classes/exceptionConstructor.kt"); } + @TestMetadata("extensionFunWithDefaultParam.kt") + public void testExtensionFunWithDefaultParam() throws Exception { + runTest("compiler/testData/codegen/box/classes/extensionFunWithDefaultParam.kt"); + } + @TestMetadata("extensionOnNamedClassObject.kt") public void testExtensionOnNamedClassObject() throws Exception { runTest("compiler/testData/codegen/box/classes/extensionOnNamedClassObject.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index f61dfa989cc..7892ef2e51c 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -3015,6 +3015,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/classes/exceptionConstructor.kt"); } + @TestMetadata("extensionFunWithDefaultParam.kt") + public void testExtensionFunWithDefaultParam() throws Exception { + runTest("compiler/testData/codegen/box/classes/extensionFunWithDefaultParam.kt"); + } + @TestMetadata("extensionOnNamedClassObject.kt") public void testExtensionOnNamedClassObject() throws Exception { runTest("compiler/testData/codegen/box/classes/extensionOnNamedClassObject.kt");