JVM_IR: use substituted return type in function reference invoke
#KT-46982 Fixed
This commit is contained in:
+6
@@ -2446,6 +2446,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
|
|||||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
|
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("arrayConstructor.kt")
|
||||||
|
public void testArrayConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/callableReference/arrayConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("arrayConstructorArgument.kt")
|
@TestMetadata("arrayConstructorArgument.kt")
|
||||||
public void testArrayConstructorArgument() throws Exception {
|
public void testArrayConstructorArgument() throws Exception {
|
||||||
|
|||||||
+3
-2
@@ -383,6 +383,7 @@ internal class FunctionReferenceLowering(private val context: JvmBackendContext)
|
|||||||
// The type of the reference is KFunction<in A1, ..., in An, out R>
|
// The type of the reference is KFunction<in A1, ..., in An, out R>
|
||||||
private val parameterTypes = (irFunctionReference.type as IrSimpleType).arguments.map { (it as IrTypeProjection).type }
|
private val parameterTypes = (irFunctionReference.type as IrSimpleType).arguments.map { (it as IrTypeProjection).type }
|
||||||
private val argumentTypes = parameterTypes.dropLast(1)
|
private val argumentTypes = parameterTypes.dropLast(1)
|
||||||
|
private val referenceReturnType = parameterTypes.last()
|
||||||
|
|
||||||
private val typeArgumentsMap = irFunctionReference.typeSubstitutionMap
|
private val typeArgumentsMap = irFunctionReference.typeSubstitutionMap
|
||||||
|
|
||||||
@@ -671,7 +672,7 @@ internal class FunctionReferenceLowering(private val context: JvmBackendContext)
|
|||||||
functionReferenceClass.addFunction {
|
functionReferenceClass.addFunction {
|
||||||
setSourceRange(if (isLambda) callee else irFunctionReference)
|
setSourceRange(if (isLambda) callee else irFunctionReference)
|
||||||
name = superMethod.name
|
name = superMethod.name
|
||||||
returnType = callee.returnType
|
returnType = referenceReturnType
|
||||||
isSuspend = callee.isSuspend
|
isSuspend = callee.isSuspend
|
||||||
}.apply {
|
}.apply {
|
||||||
overriddenSymbols += superMethod.symbol
|
overriddenSymbols += superMethod.symbol
|
||||||
@@ -703,7 +704,7 @@ internal class FunctionReferenceLowering(private val context: JvmBackendContext)
|
|||||||
|
|
||||||
body = context.createJvmIrBuilder(symbol, startOffset, endOffset).run {
|
body = context.createJvmIrBuilder(symbol, startOffset, endOffset).run {
|
||||||
var unboundIndex = 0
|
var unboundIndex = 0
|
||||||
val call = irCall(callee).apply {
|
val call = irCall(callee.symbol, referenceReturnType).apply {
|
||||||
for (typeParameter in irFunctionReference.symbol.owner.allTypeParameters) {
|
for (typeParameter in irFunctionReference.symbol.owner.allTypeParameters) {
|
||||||
putTypeArgument(typeParameter.index, typeArgumentsMap[typeParameter.symbol])
|
putTypeArgument(typeParameter.index, typeArgumentsMap[typeParameter.symbol])
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
// WITH_RUNTIME
|
||||||
|
// IGNORE_BACKEND: JS_IR
|
||||||
|
fun g(b: (Int, (Int) -> String) -> Array<String>): Array<String> =
|
||||||
|
b(1) { "OK" }
|
||||||
|
|
||||||
|
fun box(): String = g(::Array)[0]
|
||||||
+6
@@ -2446,6 +2446,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true);
|
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("arrayConstructor.kt")
|
||||||
|
public void testArrayConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/callableReference/arrayConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("arrayConstructorArgument.kt")
|
@TestMetadata("arrayConstructorArgument.kt")
|
||||||
public void testArrayConstructorArgument() throws Exception {
|
public void testArrayConstructorArgument() throws Exception {
|
||||||
|
|||||||
+6
@@ -2446,6 +2446,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
|
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("arrayConstructor.kt")
|
||||||
|
public void testArrayConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/callableReference/arrayConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("arrayConstructorArgument.kt")
|
@TestMetadata("arrayConstructorArgument.kt")
|
||||||
public void testArrayConstructorArgument() throws Exception {
|
public void testArrayConstructorArgument() throws Exception {
|
||||||
|
|||||||
+5
@@ -2170,6 +2170,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true);
|
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("arrayConstructor.kt")
|
||||||
|
public void testArrayConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/callableReference/arrayConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("arrayConstructorArgument.kt")
|
@TestMetadata("arrayConstructorArgument.kt")
|
||||||
public void testArrayConstructorArgument() throws Exception {
|
public void testArrayConstructorArgument() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/callableReference/arrayConstructorArgument.kt");
|
runTest("compiler/testData/codegen/box/callableReference/arrayConstructorArgument.kt");
|
||||||
|
|||||||
js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java
Generated
+5
@@ -1460,6 +1460,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes
|
|||||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR_ES6, true);
|
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR_ES6, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("arrayConstructor.kt")
|
||||||
|
public void testArrayConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/callableReference/arrayConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("arrayConstructorArgument.kt")
|
@TestMetadata("arrayConstructorArgument.kt")
|
||||||
public void testArrayConstructorArgument() throws Exception {
|
public void testArrayConstructorArgument() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/callableReference/arrayConstructorArgument.kt");
|
runTest("compiler/testData/codegen/box/callableReference/arrayConstructorArgument.kt");
|
||||||
|
|||||||
Generated
+5
@@ -1460,6 +1460,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR, true);
|
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("arrayConstructor.kt")
|
||||||
|
public void testArrayConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/callableReference/arrayConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("arrayConstructorArgument.kt")
|
@TestMetadata("arrayConstructorArgument.kt")
|
||||||
public void testArrayConstructorArgument() throws Exception {
|
public void testArrayConstructorArgument() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/callableReference/arrayConstructorArgument.kt");
|
runTest("compiler/testData/codegen/box/callableReference/arrayConstructorArgument.kt");
|
||||||
|
|||||||
Generated
+5
@@ -1460,6 +1460,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS, true);
|
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("arrayConstructor.kt")
|
||||||
|
public void testArrayConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/callableReference/arrayConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("arrayConstructorArgument.kt")
|
@TestMetadata("arrayConstructorArgument.kt")
|
||||||
public void testArrayConstructorArgument() throws Exception {
|
public void testArrayConstructorArgument() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/callableReference/arrayConstructorArgument.kt");
|
runTest("compiler/testData/codegen/box/callableReference/arrayConstructorArgument.kt");
|
||||||
|
|||||||
js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/wasm/semantics/IrCodegenBoxWasmTestGenerated.java
Generated
+5
@@ -1270,6 +1270,11 @@ public class IrCodegenBoxWasmTestGenerated extends AbstractIrCodegenBoxWasmTest
|
|||||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference"), Pattern.compile("^([^_](.+))\\.kt$"), null, TargetBackend.WASM, true);
|
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference"), Pattern.compile("^([^_](.+))\\.kt$"), null, TargetBackend.WASM, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("arrayConstructor.kt")
|
||||||
|
public void testArrayConstructor() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/callableReference/arrayConstructor.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("arrayOf.kt")
|
@TestMetadata("arrayOf.kt")
|
||||||
public void testArrayOf() throws Exception {
|
public void testArrayOf() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/callableReference/arrayOf.kt");
|
runTest("compiler/testData/codegen/box/callableReference/arrayOf.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user