IR: Fix InnerClassConstructorCallsLowering
Prevent repeated passes over nested functions.
This commit is contained in:
committed by
Alexander Udalov
parent
a8730eae62
commit
417c570243
+8
-15
@@ -5,18 +5,12 @@
|
||||
|
||||
package org.jetbrains.kotlin.backend.common.lower
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.BackendContext
|
||||
import org.jetbrains.kotlin.backend.common.BodyLoweringPass
|
||||
import org.jetbrains.kotlin.backend.common.ClassLoweringPass
|
||||
import org.jetbrains.kotlin.backend.common.IrElementTransformerVoidWithContext
|
||||
import org.jetbrains.kotlin.backend.common.*
|
||||
import org.jetbrains.kotlin.backend.common.phaser.makeIrFilePhase
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
import org.jetbrains.kotlin.ir.builders.irGet
|
||||
import org.jetbrains.kotlin.ir.builders.irSetField
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrConstructor
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFunction
|
||||
import org.jetbrains.kotlin.ir.declarations.IrValueParameter
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
||||
@@ -122,9 +116,9 @@ val innerClassConstructorCallsPhase = makeIrFilePhase(
|
||||
description = "Handle constructor calls for inner classes"
|
||||
)
|
||||
|
||||
class InnerClassConstructorCallsLowering(val context: BackendContext) : BodyLoweringPass {
|
||||
override fun lower(irBody: IrBody) {
|
||||
irBody.transformChildrenVoid(object : IrElementTransformerVoid() {
|
||||
class InnerClassConstructorCallsLowering(val context: BackendContext) : FileLoweringPass {
|
||||
override fun lower(irFile: IrFile) {
|
||||
irFile.transformChildrenVoid(object : IrElementTransformerVoid() {
|
||||
override fun visitConstructorCall(expression: IrConstructorCall): IrExpression {
|
||||
expression.transformChildrenVoid(this)
|
||||
|
||||
@@ -190,12 +184,11 @@ class InnerClassConstructorCallsLowering(val context: BackendContext) : BodyLowe
|
||||
}
|
||||
|
||||
newReference.let {
|
||||
it.copyTypeArgumentsFrom(expression)
|
||||
// TODO: This is wrong, since we moved all parameters into value parameters,
|
||||
// but changing it breaks JS IR in CallableReferenceLowering.
|
||||
it.dispatchReceiver = expression.dispatchReceiver
|
||||
it.extensionReceiver = expression.extensionReceiver
|
||||
for (t in 0 until expression.typeArgumentsCount) {
|
||||
it.putTypeArgument(t, expression.getTypeArgument(t))
|
||||
}
|
||||
|
||||
for (v in 0 until expression.valueArgumentsCount) {
|
||||
it.putValueArgument(v, expression.getValueArgument(v))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user