[JS IR BE] Use symbol instead of declaration

This commit is contained in:
Roman Artemev
2019-02-13 19:01:13 +03:00
committed by romanart
parent 862ccd05df
commit c95d99dbe0
@@ -23,6 +23,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrPropertyReferenceImpl
import org.jetbrains.kotlin.ir.symbols.IrSimpleFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
@@ -33,7 +34,7 @@ import org.jetbrains.kotlin.name.Name
val STATIC_THIS_PARAMETER = object : IrDeclarationOriginImpl("STATIC_THIS_PARAMETER") {}
class PrivateMembersLowering(val context: JsIrBackendContext) : ClassLoweringPass {
private val memberMap = mutableMapOf<IrSimpleFunction, IrSimpleFunction>()
private val memberMap = mutableMapOf<IrSimpleFunctionSymbol, IrSimpleFunction>()
override fun lower(irClass: IrClass) {
@@ -41,7 +42,7 @@ class PrivateMembersLowering(val context: JsIrBackendContext) : ClassLoweringPas
irClass.declarations.transformFlat {
when (it) {
is IrSimpleFunction -> transformMemberToStaticFunction(it)?.let { staticFunction ->
memberMap[it] = staticFunction
memberMap[it.symbol] = staticFunction
listOf(staticFunction)
}
is IrProperty -> listOf(it.apply {
@@ -56,12 +57,12 @@ class PrivateMembersLowering(val context: JsIrBackendContext) : ClassLoweringPas
override fun visitCall(expression: IrCall): IrExpression {
super.visitCall(expression)
return memberMap[expression.symbol.owner]?.let {
return memberMap[expression.symbol]?.let {
transformPrivateToStaticCall(expression, it)
} ?: expression
}
override fun visitFunctionReference(expression: IrFunctionReference) = memberMap[expression.symbol.owner]?.let {
override fun visitFunctionReference(expression: IrFunctionReference) = memberMap[expression.symbol]?.let {
transformPrivateToStaticReference(expression) {
IrFunctionReferenceImpl(
expression.startOffset, expression.endOffset,
@@ -74,7 +75,7 @@ class PrivateMembersLowering(val context: JsIrBackendContext) : ClassLoweringPas
} ?: expression
override fun visitPropertyReference(expression: IrPropertyReference): IrExpression {
return if (expression.getter?.owner in memberMap || expression.setter?.owner in memberMap) {
return if (expression.getter in memberMap || expression.setter in memberMap) {
transformPrivateToStaticReference(expression) {
IrPropertyReferenceImpl(
expression.startOffset, expression.endOffset,
@@ -82,8 +83,8 @@ class PrivateMembersLowering(val context: JsIrBackendContext) : ClassLoweringPas
expression.descriptor,
expression.typeArgumentsCount,
expression.field,
memberMap[expression.getter?.owner]?.symbol ?: expression.getter,
memberMap[expression.setter?.owner]?.symbol ?: expression.setter,
memberMap[expression.getter]?.symbol ?: expression.getter,
memberMap[expression.setter]?.symbol ?: expression.setter,
expression.origin
)
}
@@ -132,7 +133,7 @@ class PrivateMembersLowering(val context: JsIrBackendContext) : ClassLoweringPas
}
private fun transformAccessor(accessor: IrSimpleFunction) =
transformMemberToStaticFunction(accessor)?.also { memberMap[accessor] = it } ?: accessor
transformMemberToStaticFunction(accessor)?.also { memberMap[accessor.symbol] = it } ?: accessor
private fun transformMemberToStaticFunction(function: IrSimpleFunction): IrSimpleFunction? {