JVM_IR. Reference fields

This commit is contained in:
Mikhael Bogdanov
2018-08-30 15:06:09 +02:00
committed by romanart
parent 92ce50b22c
commit e6b8ade096
2 changed files with 8 additions and 7 deletions
@@ -34,7 +34,7 @@ class JvmLower(val context: JvmBackendContext) {
LateinitLowering(context, true).lower(irFile)
ConstAndJvmFieldPropertiesLowering().lower(irFile)
ConstAndJvmFieldPropertiesLowering(context).lower(irFile)
PropertiesLowering().lower(irFile)
AnnotationLowering().runOnFilePostfix(irFile) //should be run before defaults lowering
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.backend.jvm.lower
import org.jetbrains.kotlin.backend.common.FileLoweringPass
import org.jetbrains.kotlin.backend.jvm.JvmBackendContext
import org.jetbrains.kotlin.codegen.JvmCodegenUtil
import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor
import org.jetbrains.kotlin.descriptors.PropertyGetterDescriptor
@@ -20,7 +21,7 @@ import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.synthetic.SyntheticJavaPropertyDescriptor
class ConstAndJvmFieldPropertiesLowering : IrElementTransformerVoid(), FileLoweringPass {
class ConstAndJvmFieldPropertiesLowering(val context: JvmBackendContext) : IrElementTransformerVoid(), FileLoweringPass {
override fun lower(irFile: IrFile) {
irFile.transformChildrenVoid(this)
}
@@ -55,12 +56,12 @@ class ConstAndJvmFieldPropertiesLowering : IrElementTransformerVoid(), FileLower
return IrSetFieldImpl(
expression.startOffset,
expression.endOffset,
descriptor.correspondingProperty,
context.ir.symbols.externalSymbolTable.referenceField(descriptor.correspondingProperty),
expression.dispatchReceiver,
expression.getValueArgument(descriptor.valueParameters.lastIndex)!!,
expression.type,
expression.origin,
expression.superQualifier
expression.superQualifier?.let { context.ir.symbols.externalSymbolTable.referenceClass(it) }
)
}
@@ -68,11 +69,11 @@ class ConstAndJvmFieldPropertiesLowering : IrElementTransformerVoid(), FileLower
return IrGetFieldImpl(
expression.startOffset,
expression.endOffset,
descriptor.correspondingProperty,
expression.dispatchReceiver,
context.ir.symbols.externalSymbolTable.referenceField(descriptor.correspondingProperty),
expression.type,
expression.dispatchReceiver,
expression.origin,
expression.superQualifier
expression.superQualifier?.let { context.ir.symbols.externalSymbolTable.referenceClass(it) }
)
}
}