JS IR: fix origin for callable references with bound reciever
In case of IrFunctionReference with type SuspendFunction (no K!) there was a misalignment between the base class (Any) and the origin (LAMBDA..). As a result the SuspendFunctionLowering was getting confused and produced hanging code.
This commit is contained in:
+1
-1
@@ -122,7 +122,7 @@ class CallableReferenceLowering(private val context: CommonBackendContext) : Bod
|
|||||||
visibility = Visibilities.LOCAL
|
visibility = Visibilities.LOCAL
|
||||||
// A callable reference results in a synthetic class, while a lambda is not synthetic.
|
// A callable reference results in a synthetic class, while a lambda is not synthetic.
|
||||||
// We don't produce GENERATED_SAM_IMPLEMENTATION, which is always synthetic.
|
// We don't produce GENERATED_SAM_IMPLEMENTATION, which is always synthetic.
|
||||||
origin = if (isKReference) FUNCTION_REFERENCE_IMPL else LAMBDA_IMPL
|
origin = if (isKReference || !isLambda) FUNCTION_REFERENCE_IMPL else LAMBDA_IMPL
|
||||||
name = SpecialNames.NO_NAME_PROVIDED
|
name = SpecialNames.NO_NAME_PROVIDED
|
||||||
}.apply {
|
}.apply {
|
||||||
superTypes = listOf(superClass, reference.type)
|
superTypes = listOf(superClass, reference.type)
|
||||||
|
|||||||
Vendored
-2
@@ -2,8 +2,6 @@
|
|||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// WITH_COROUTINES
|
// WITH_COROUTINES
|
||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
// IGNORE_BACKEND_FIR: JVM_IR
|
||||||
// TARGET_BACKEND: JVM
|
|
||||||
// ^ this test hangs on JS_IR (even if it's IGNOREd)
|
|
||||||
// IGNORE_BACKEND: JVM_IR
|
// IGNORE_BACKEND: JVM_IR
|
||||||
|
|
||||||
import helpers.*
|
import helpers.*
|
||||||
|
|||||||
Vendored
-2
@@ -2,8 +2,6 @@
|
|||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// WITH_COROUTINES
|
// WITH_COROUTINES
|
||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
// IGNORE_BACKEND_FIR: JVM_IR
|
||||||
// TARGET_BACKEND: JVM
|
|
||||||
// ^ this test hangs on JS_IR (even if it's IGNOREd)
|
|
||||||
// IGNORE_BACKEND: JVM_IR
|
// IGNORE_BACKEND: JVM_IR
|
||||||
|
|
||||||
import helpers.*
|
import helpers.*
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
// !LANGUAGE: +SuspendConversion
|
// !LANGUAGE: +SuspendConversion
|
||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
// IGNORE_BACKEND_FIR: JVM_IR
|
||||||
// IGNORE_BACKEND: JVM_IR, JS_IR
|
// IGNORE_BACKEND: JVM_IR
|
||||||
// ^ TODO fix suspend coercion for bound function references in JVM_IR
|
// ^ TODO fix suspend coercion for bound function references in JVM_IR
|
||||||
// FILE: suspendCovnersion.kt
|
// FILE: suspendCovnersion.kt
|
||||||
|
|
||||||
|
|||||||
Generated
+10
@@ -1577,6 +1577,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR, true);
|
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("bound.kt")
|
||||||
|
public void testBound() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/bound.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("crossInline.kt")
|
@TestMetadata("crossInline.kt")
|
||||||
public void testCrossInline() throws Exception {
|
public void testCrossInline() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/crossInline.kt");
|
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/crossInline.kt");
|
||||||
@@ -1597,6 +1602,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/inlineAdaptedWithVarargs.kt");
|
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/inlineAdaptedWithVarargs.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("inlineBound.kt")
|
||||||
|
public void testInlineBound() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/inlineBound.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("inlineSimple.kt")
|
@TestMetadata("inlineSimple.kt")
|
||||||
public void testInlineSimple() throws Exception {
|
public void testInlineSimple() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/inlineSimple.kt");
|
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/inlineSimple.kt");
|
||||||
|
|||||||
+10
@@ -1577,6 +1577,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS, true);
|
KotlinTestUtils.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("bound.kt")
|
||||||
|
public void testBound() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/bound.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("crossInline.kt")
|
@TestMetadata("crossInline.kt")
|
||||||
public void testCrossInline() throws Exception {
|
public void testCrossInline() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/crossInline.kt");
|
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/crossInline.kt");
|
||||||
@@ -1597,6 +1602,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/inlineAdaptedWithVarargs.kt");
|
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/inlineAdaptedWithVarargs.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("inlineBound.kt")
|
||||||
|
public void testInlineBound() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/inlineBound.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("inlineSimple.kt")
|
@TestMetadata("inlineSimple.kt")
|
||||||
public void testInlineSimple() throws Exception {
|
public void testInlineSimple() throws Exception {
|
||||||
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/inlineSimple.kt");
|
runTest("compiler/testData/codegen/box/callableReference/adaptedReferences/suspendConversion/inlineSimple.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user