Unwrap fake override on field access
This commit is contained in:
+5
-2
@@ -337,11 +337,14 @@ class ExpressionCodegen(
|
|||||||
private fun generateFieldValue(expression: IrFieldAccessExpression, data: BlockInfo): StackValue {
|
private fun generateFieldValue(expression: IrFieldAccessExpression, data: BlockInfo): StackValue {
|
||||||
val receiverValue = expression.receiver?.accept(this, data) ?: StackValue.none()
|
val receiverValue = expression.receiver?.accept(this, data) ?: StackValue.none()
|
||||||
val propertyDescriptor = expression.descriptor
|
val propertyDescriptor = expression.descriptor
|
||||||
val fieldType = typeMapper.mapType(propertyDescriptor.type)
|
|
||||||
|
val realDescriptor = DescriptorUtils.unwrapFakeOverride(propertyDescriptor)
|
||||||
|
val fieldType = typeMapper.mapType(realDescriptor.original.type)
|
||||||
val ownerType = typeMapper.mapImplementationOwner(propertyDescriptor)
|
val ownerType = typeMapper.mapImplementationOwner(propertyDescriptor)
|
||||||
val fieldName = propertyDescriptor.name.asString()
|
val fieldName = propertyDescriptor.name.asString()
|
||||||
val isStatic = expression.receiver == null // TODO
|
val isStatic = expression.receiver == null // TODO
|
||||||
return StackValue.field(fieldType, ownerType, fieldName, isStatic, receiverValue, propertyDescriptor)
|
|
||||||
|
return StackValue.field(fieldType, ownerType, fieldName, isStatic, receiverValue, realDescriptor)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun visitGetField(expression: IrGetField, data: BlockInfo): StackValue {
|
override fun visitGetField(expression: IrGetField, data: BlockInfo): StackValue {
|
||||||
|
|||||||
Reference in New Issue
Block a user