JVM IR: change generation scheme of property $delegate methods
Generate $delegate method as instance method in PropertyReferenceDelegationLowering, and remove dispatch receiver later in MakePropertyDelegateMethodsStatic. The method needs to be static to be non-overridable (see delegateMethodIsNonOverridable.kt), and public to be accessible in reflection. Otherwise we generated incorrect IR where a static function accessed an instance field of the containing class, which failed in multiple places including LocalDeclarationsLowering. #KT-48350 Fixed
This commit is contained in:
committed by
Alexander Udalov
parent
50508da156
commit
04c5bbdcf8
+2
-1
@@ -185,7 +185,8 @@ class LocalDeclarationsLowering(
|
||||
override fun irGet(startOffset: Int, endOffset: Int, valueDeclaration: IrValueDeclaration): IrExpression? {
|
||||
val field = classContext.capturedValueToField[valueDeclaration] ?: return null
|
||||
|
||||
val receiver = member.dispatchReceiverParameter!!
|
||||
val receiver = member.dispatchReceiverParameter
|
||||
?: error("No dispatch receiver parameter for ${member.render()}")
|
||||
return IrGetFieldImpl(
|
||||
startOffset, endOffset, field.symbol, field.type,
|
||||
receiver = IrGetValueImpl(startOffset, endOffset, receiver.type, receiver.symbol)
|
||||
|
||||
Reference in New Issue
Block a user