IR: vararg: process not only functions, but fiel and property initializer
This commit is contained in:
committed by
vvlevchenko
parent
b6d5dd5a68
commit
c1b1f7b45c
+18
-10
@@ -1,6 +1,6 @@
|
|||||||
package org.jetbrains.kotlin.backend.konan.lower
|
package org.jetbrains.kotlin.backend.konan.lower
|
||||||
|
|
||||||
import org.jetbrains.kotlin.backend.common.FunctionLoweringPass
|
import org.jetbrains.kotlin.backend.common.DeclarationContainerLoweringPass
|
||||||
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
|
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
|
||||||
import org.jetbrains.kotlin.backend.konan.Context
|
import org.jetbrains.kotlin.backend.konan.Context
|
||||||
import org.jetbrains.kotlin.backend.konan.KonanPlatform
|
import org.jetbrains.kotlin.backend.konan.KonanPlatform
|
||||||
@@ -10,9 +10,12 @@ import org.jetbrains.kotlin.builtins.KotlinBuiltIns
|
|||||||
import org.jetbrains.kotlin.builtins.PrimitiveType
|
import org.jetbrains.kotlin.builtins.PrimitiveType
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
|
||||||
import org.jetbrains.kotlin.ir.builders.*
|
import org.jetbrains.kotlin.ir.IrElement
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
import org.jetbrains.kotlin.ir.builders.IrBuilderWithScope
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrVariable
|
import org.jetbrains.kotlin.ir.builders.Scope
|
||||||
|
import org.jetbrains.kotlin.ir.builders.irGet
|
||||||
|
import org.jetbrains.kotlin.ir.builders.irSetVar
|
||||||
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.*
|
import org.jetbrains.kotlin.ir.expressions.*
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrBlockImpl
|
||||||
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
|
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
|
||||||
@@ -26,14 +29,19 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils
|
|||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
|
||||||
|
|
||||||
class VarargInjectionLowering internal constructor(val context: Context): FunctionLoweringPass {
|
class VarargInjectionLowering internal constructor(val context: Context): DeclarationContainerLoweringPass {
|
||||||
override fun lower(irFunction: IrFunction) {
|
override fun lower(irDeclarationContainer: IrDeclarationContainer) {
|
||||||
if (irFunction.body != null)
|
irDeclarationContainer.declarations.forEach{
|
||||||
lower(irFunction.descriptor, irFunction.body!!)
|
when (it) {
|
||||||
|
is IrField -> lower(it.descriptor, it.initializer)
|
||||||
|
is IrFunction -> lower(it.descriptor, it.body)
|
||||||
|
is IrProperty -> lower(it.descriptor, it.backingField)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun lower(owner:FunctionDescriptor, irBody: IrBody) {
|
private fun lower(owner:DeclarationDescriptor, element: IrElement?) {
|
||||||
irBody.transformChildrenVoid(object: IrElementTransformerVoid() {
|
element?.transformChildrenVoid(object: IrElementTransformerVoid() {
|
||||||
val transformer = this
|
val transformer = this
|
||||||
override fun visitCall(expression: IrCall): IrExpression {
|
override fun visitCall(expression: IrCall): IrExpression {
|
||||||
log("call of: ${expression.descriptor}")
|
log("call of: ${expression.descriptor}")
|
||||||
|
|||||||
Reference in New Issue
Block a user