[IR] Replace adhoc remappers to common one ValueRemapper
This commit is contained in:
+10
-19
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.backend.js.lower
|
||||
import org.jetbrains.kotlin.backend.common.BodyLoweringPass
|
||||
import org.jetbrains.kotlin.backend.common.DeclarationTransformer
|
||||
import org.jetbrains.kotlin.backend.common.getOrPut
|
||||
import org.jetbrains.kotlin.backend.common.ir.ValueRemapper
|
||||
import org.jetbrains.kotlin.backend.common.ir.copyTo
|
||||
import org.jetbrains.kotlin.backend.common.ir.copyTypeParametersFrom
|
||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
|
||||
@@ -20,14 +21,17 @@ import org.jetbrains.kotlin.ir.backend.js.ir.JsIrBuilder
|
||||
import org.jetbrains.kotlin.ir.builders.declarations.buildFun
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.expressions.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrRawFunctionReferenceImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl
|
||||
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
|
||||
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
|
||||
import org.jetbrains.kotlin.ir.types.impl.IrSimpleTypeImpl
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
|
||||
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
|
||||
@@ -140,21 +144,19 @@ class SecondaryConstructorLowering(val context: JsIrBackendContext) : Declaratio
|
||||
ThisUsageReplaceTransformer(
|
||||
constructor.symbol,
|
||||
delegate.symbol,
|
||||
oldValueParameters.zip(delegate.valueParameters).toMap()
|
||||
oldValueParameters.zip(delegate.valueParameters).associate { (old, new) -> old.symbol to new.symbol }
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private class ThisUsageReplaceTransformer(
|
||||
val constructor: IrConstructorSymbol,
|
||||
val function: IrFunctionSymbol,
|
||||
val symbolMapping: Map<IrValueParameter, IrValueParameter>
|
||||
) : IrElementTransformerVoid() {
|
||||
|
||||
val newThisSymbol = symbolMapping.values.last().symbol
|
||||
symbolMapping: Map<IrValueSymbol, IrValueSymbol>
|
||||
) : ValueRemapper(symbolMapping) {
|
||||
private val newThisSymbol = symbolMapping.values.last()
|
||||
|
||||
override fun visitReturn(expression: IrReturn): IrExpression =
|
||||
if (expression.returnTargetSymbol != constructor)
|
||||
@@ -167,17 +169,6 @@ class SecondaryConstructorLowering(val context: JsIrBackendContext) : Declaratio
|
||||
function,
|
||||
IrGetValueImpl(expression.startOffset, expression.endOffset, newThisSymbol.owner.type, newThisSymbol)
|
||||
)
|
||||
|
||||
override fun visitGetValue(expression: IrGetValue) = symbolMapping[expression.symbol.owner]?.let {
|
||||
expression.run { IrGetValueImpl(startOffset, endOffset, type, it.symbol, origin) }
|
||||
} ?: expression
|
||||
|
||||
override fun visitSetValue(expression: IrSetValue): IrExpression {
|
||||
expression.transformChildrenVoid()
|
||||
return symbolMapping[expression.symbol.owner]?.let {
|
||||
expression.run { IrSetValueImpl(startOffset, endOffset, type, it.symbol, expression.value, origin) }
|
||||
} ?: expression
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user