FIR2IR: load property setter noinline/crossinline flags
#KT-56234 Fixed
This commit is contained in:
+4
-2
@@ -304,13 +304,15 @@ class Fir2IrDeclarationStorage(
|
|||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
type: IrType,
|
type: IrType,
|
||||||
parent: IrFunction,
|
parent: IrFunction,
|
||||||
name: Name? = null
|
name: Name? = null,
|
||||||
|
isCrossinline: Boolean = false,
|
||||||
|
isNoinline: Boolean = false,
|
||||||
): IrValueParameter {
|
): IrValueParameter {
|
||||||
return irFactory.createValueParameter(
|
return irFactory.createValueParameter(
|
||||||
startOffset, endOffset, IrDeclarationOrigin.DEFINED, IrValueParameterSymbolImpl(),
|
startOffset, endOffset, IrDeclarationOrigin.DEFINED, IrValueParameterSymbolImpl(),
|
||||||
name ?: SpecialNames.IMPLICIT_SET_PARAMETER, 0, type,
|
name ?: SpecialNames.IMPLICIT_SET_PARAMETER, 0, type,
|
||||||
varargElementType = null,
|
varargElementType = null,
|
||||||
isCrossinline = false, isNoinline = false,
|
isCrossinline = isCrossinline, isNoinline = isNoinline,
|
||||||
isHidden = false, isAssignable = false
|
isHidden = false, isAssignable = false
|
||||||
).apply {
|
).apply {
|
||||||
this.parent = parent
|
this.parent = parent
|
||||||
|
|||||||
@@ -94,7 +94,9 @@ class Fir2IrLazyPropertyAccessor(
|
|||||||
typeConverter, conversionTypeContext
|
typeConverter, conversionTypeContext
|
||||||
),
|
),
|
||||||
parent = this@Fir2IrLazyPropertyAccessor,
|
parent = this@Fir2IrLazyPropertyAccessor,
|
||||||
name = valueParameter?.name
|
name = valueParameter?.name,
|
||||||
|
isCrossinline = valueParameter?.isCrossinline == true,
|
||||||
|
isNoinline = valueParameter?.isNoinline == true
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
+12
@@ -3842,6 +3842,12 @@ public class FirLightTreeBlackBoxInlineCodegenTestGenerated extends AbstractFirL
|
|||||||
runTest("compiler/testData/codegen/boxInline/property/augAssignmentAndIncViaConvention.kt");
|
runTest("compiler/testData/codegen/boxInline/property/augAssignmentAndIncViaConvention.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("crossinlineFunctional.kt")
|
||||||
|
public void testCrossinlineFunctional() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/boxInline/property/crossinlineFunctional.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("fromObject.kt")
|
@TestMetadata("fromObject.kt")
|
||||||
public void testFromObject() throws Exception {
|
public void testFromObject() throws Exception {
|
||||||
@@ -3854,6 +3860,12 @@ public class FirLightTreeBlackBoxInlineCodegenTestGenerated extends AbstractFirL
|
|||||||
runTest("compiler/testData/codegen/boxInline/property/kt22649.kt");
|
runTest("compiler/testData/codegen/boxInline/property/kt22649.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("noinlineFunctional.kt")
|
||||||
|
public void testNoinlineFunctional() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/boxInline/property/noinlineFunctional.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("property.kt")
|
@TestMetadata("property.kt")
|
||||||
public void testProperty() throws Exception {
|
public void testProperty() throws Exception {
|
||||||
|
|||||||
+12
@@ -3842,6 +3842,12 @@ public class FirLightTreeSerializeCompileKotlinAgainstInlineKotlinTestGenerated
|
|||||||
runTest("compiler/testData/codegen/boxInline/property/augAssignmentAndIncViaConvention.kt");
|
runTest("compiler/testData/codegen/boxInline/property/augAssignmentAndIncViaConvention.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("crossinlineFunctional.kt")
|
||||||
|
public void testCrossinlineFunctional() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/boxInline/property/crossinlineFunctional.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("fromObject.kt")
|
@TestMetadata("fromObject.kt")
|
||||||
public void testFromObject() throws Exception {
|
public void testFromObject() throws Exception {
|
||||||
@@ -3854,6 +3860,12 @@ public class FirLightTreeSerializeCompileKotlinAgainstInlineKotlinTestGenerated
|
|||||||
runTest("compiler/testData/codegen/boxInline/property/kt22649.kt");
|
runTest("compiler/testData/codegen/boxInline/property/kt22649.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("noinlineFunctional.kt")
|
||||||
|
public void testNoinlineFunctional() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/boxInline/property/noinlineFunctional.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("property.kt")
|
@TestMetadata("property.kt")
|
||||||
public void testProperty() throws Exception {
|
public void testProperty() throws Exception {
|
||||||
|
|||||||
+12
@@ -3842,6 +3842,12 @@ public class FirPsiBlackBoxInlineCodegenTestGenerated extends AbstractFirPsiBlac
|
|||||||
runTest("compiler/testData/codegen/boxInline/property/augAssignmentAndIncViaConvention.kt");
|
runTest("compiler/testData/codegen/boxInline/property/augAssignmentAndIncViaConvention.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("crossinlineFunctional.kt")
|
||||||
|
public void testCrossinlineFunctional() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/boxInline/property/crossinlineFunctional.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("fromObject.kt")
|
@TestMetadata("fromObject.kt")
|
||||||
public void testFromObject() throws Exception {
|
public void testFromObject() throws Exception {
|
||||||
@@ -3854,6 +3860,12 @@ public class FirPsiBlackBoxInlineCodegenTestGenerated extends AbstractFirPsiBlac
|
|||||||
runTest("compiler/testData/codegen/boxInline/property/kt22649.kt");
|
runTest("compiler/testData/codegen/boxInline/property/kt22649.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("noinlineFunctional.kt")
|
||||||
|
public void testNoinlineFunctional() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/boxInline/property/noinlineFunctional.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("property.kt")
|
@TestMetadata("property.kt")
|
||||||
public void testProperty() throws Exception {
|
public void testProperty() throws Exception {
|
||||||
|
|||||||
+12
@@ -3842,6 +3842,12 @@ public class FirPsiSerializeCompileKotlinAgainstInlineKotlinTestGenerated extend
|
|||||||
runTest("compiler/testData/codegen/boxInline/property/augAssignmentAndIncViaConvention.kt");
|
runTest("compiler/testData/codegen/boxInline/property/augAssignmentAndIncViaConvention.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("crossinlineFunctional.kt")
|
||||||
|
public void testCrossinlineFunctional() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/boxInline/property/crossinlineFunctional.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("fromObject.kt")
|
@TestMetadata("fromObject.kt")
|
||||||
public void testFromObject() throws Exception {
|
public void testFromObject() throws Exception {
|
||||||
@@ -3854,6 +3860,12 @@ public class FirPsiSerializeCompileKotlinAgainstInlineKotlinTestGenerated extend
|
|||||||
runTest("compiler/testData/codegen/boxInline/property/kt22649.kt");
|
runTest("compiler/testData/codegen/boxInline/property/kt22649.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("noinlineFunctional.kt")
|
||||||
|
public void testNoinlineFunctional() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/boxInline/property/noinlineFunctional.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("property.kt")
|
@TestMetadata("property.kt")
|
||||||
public void testProperty() throws Exception {
|
public void testProperty() throws Exception {
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
// TARGET_BACKEND: JVM_IR
|
||||||
|
// FILE: 1.kt
|
||||||
|
package test
|
||||||
|
|
||||||
|
class C {
|
||||||
|
var x: () -> Unit
|
||||||
|
inline get() = {}
|
||||||
|
inline set(crossinline value) {
|
||||||
|
bar { value() }
|
||||||
|
}
|
||||||
|
|
||||||
|
fun bar(i: I) = i.foo()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun interface I {
|
||||||
|
fun foo()
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: 2.kt
|
||||||
|
import test.*
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
var result = "fail"
|
||||||
|
val c = C()
|
||||||
|
c.x = { result = "OK" }
|
||||||
|
return result
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
// TARGET_BACKEND: JVM_IR
|
||||||
|
// IGNORE_BACKEND_MULTI_MODULE: JVM_MULTI_MODULE_IR_AGAINST_OLD
|
||||||
|
// FILE: 1.kt
|
||||||
|
package test
|
||||||
|
|
||||||
|
class C {
|
||||||
|
var x: () -> Unit
|
||||||
|
inline get() = {}
|
||||||
|
inline set(noinline value) {
|
||||||
|
bar(value)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun bar(i: I) = i.foo()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun interface I {
|
||||||
|
fun foo()
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: 2.kt
|
||||||
|
import test.*
|
||||||
|
|
||||||
|
fun box(): String {
|
||||||
|
var result = "fail"
|
||||||
|
val c = C()
|
||||||
|
c.x = { result = "OK" }
|
||||||
|
return result
|
||||||
|
}
|
||||||
+12
@@ -3842,6 +3842,12 @@ public class IrBlackBoxInlineCodegenTestGenerated extends AbstractIrBlackBoxInli
|
|||||||
runTest("compiler/testData/codegen/boxInline/property/augAssignmentAndIncViaConvention.kt");
|
runTest("compiler/testData/codegen/boxInline/property/augAssignmentAndIncViaConvention.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("crossinlineFunctional.kt")
|
||||||
|
public void testCrossinlineFunctional() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/boxInline/property/crossinlineFunctional.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("fromObject.kt")
|
@TestMetadata("fromObject.kt")
|
||||||
public void testFromObject() throws Exception {
|
public void testFromObject() throws Exception {
|
||||||
@@ -3854,6 +3860,12 @@ public class IrBlackBoxInlineCodegenTestGenerated extends AbstractIrBlackBoxInli
|
|||||||
runTest("compiler/testData/codegen/boxInline/property/kt22649.kt");
|
runTest("compiler/testData/codegen/boxInline/property/kt22649.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("noinlineFunctional.kt")
|
||||||
|
public void testNoinlineFunctional() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/boxInline/property/noinlineFunctional.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("property.kt")
|
@TestMetadata("property.kt")
|
||||||
public void testProperty() throws Exception {
|
public void testProperty() throws Exception {
|
||||||
|
|||||||
+12
@@ -3842,6 +3842,12 @@ public class IrCompileKotlinAgainstInlineKotlinTestGenerated extends AbstractIrC
|
|||||||
runTest("compiler/testData/codegen/boxInline/property/augAssignmentAndIncViaConvention.kt");
|
runTest("compiler/testData/codegen/boxInline/property/augAssignmentAndIncViaConvention.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("crossinlineFunctional.kt")
|
||||||
|
public void testCrossinlineFunctional() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/boxInline/property/crossinlineFunctional.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("fromObject.kt")
|
@TestMetadata("fromObject.kt")
|
||||||
public void testFromObject() throws Exception {
|
public void testFromObject() throws Exception {
|
||||||
@@ -3854,6 +3860,12 @@ public class IrCompileKotlinAgainstInlineKotlinTestGenerated extends AbstractIrC
|
|||||||
runTest("compiler/testData/codegen/boxInline/property/kt22649.kt");
|
runTest("compiler/testData/codegen/boxInline/property/kt22649.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("noinlineFunctional.kt")
|
||||||
|
public void testNoinlineFunctional() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/boxInline/property/noinlineFunctional.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("property.kt")
|
@TestMetadata("property.kt")
|
||||||
public void testProperty() throws Exception {
|
public void testProperty() throws Exception {
|
||||||
|
|||||||
+12
@@ -3842,6 +3842,12 @@ public class IrSerializeCompileKotlinAgainstInlineKotlinTestGenerated extends Ab
|
|||||||
runTest("compiler/testData/codegen/boxInline/property/augAssignmentAndIncViaConvention.kt");
|
runTest("compiler/testData/codegen/boxInline/property/augAssignmentAndIncViaConvention.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("crossinlineFunctional.kt")
|
||||||
|
public void testCrossinlineFunctional() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/boxInline/property/crossinlineFunctional.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("fromObject.kt")
|
@TestMetadata("fromObject.kt")
|
||||||
public void testFromObject() throws Exception {
|
public void testFromObject() throws Exception {
|
||||||
@@ -3854,6 +3860,12 @@ public class IrSerializeCompileKotlinAgainstInlineKotlinTestGenerated extends Ab
|
|||||||
runTest("compiler/testData/codegen/boxInline/property/kt22649.kt");
|
runTest("compiler/testData/codegen/boxInline/property/kt22649.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("noinlineFunctional.kt")
|
||||||
|
public void testNoinlineFunctional() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/boxInline/property/noinlineFunctional.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("property.kt")
|
@TestMetadata("property.kt")
|
||||||
public void testProperty() throws Exception {
|
public void testProperty() throws Exception {
|
||||||
|
|||||||
+12
@@ -3842,6 +3842,12 @@ public class JvmIrAgainstOldBoxInlineTestGenerated extends AbstractJvmIrAgainstO
|
|||||||
runTest("compiler/testData/codegen/boxInline/property/augAssignmentAndIncViaConvention.kt");
|
runTest("compiler/testData/codegen/boxInline/property/augAssignmentAndIncViaConvention.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("crossinlineFunctional.kt")
|
||||||
|
public void testCrossinlineFunctional() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/boxInline/property/crossinlineFunctional.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("fromObject.kt")
|
@TestMetadata("fromObject.kt")
|
||||||
public void testFromObject() throws Exception {
|
public void testFromObject() throws Exception {
|
||||||
@@ -3854,6 +3860,12 @@ public class JvmIrAgainstOldBoxInlineTestGenerated extends AbstractJvmIrAgainstO
|
|||||||
runTest("compiler/testData/codegen/boxInline/property/kt22649.kt");
|
runTest("compiler/testData/codegen/boxInline/property/kt22649.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("noinlineFunctional.kt")
|
||||||
|
public void testNoinlineFunctional() throws Exception {
|
||||||
|
runTest("compiler/testData/codegen/boxInline/property/noinlineFunctional.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("property.kt")
|
@TestMetadata("property.kt")
|
||||||
public void testProperty() throws Exception {
|
public void testProperty() throws Exception {
|
||||||
|
|||||||
Reference in New Issue
Block a user