[IR] Remove superQualifier property from IrCall

This commit is contained in:
Roman Artemev
2019-10-08 18:12:48 +03:00
committed by romanart
parent ea5b529d19
commit eee594101a
7 changed files with 5 additions and 13 deletions
@@ -91,7 +91,7 @@ class RenderIrElementWithDescriptorsVisitor : IrElementVisitor<String, Nothing?>
"type=${expression.type.render()} origin=${expression.origin}"
private fun IrCall.renderSuperQualifier(): String =
superQualifier?.let { "superQualifier=${it.name} " } ?: ""
superQualifierSymbol?.let { "superQualifier=${it.owner.name} " } ?: ""
override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: Nothing?): String =
"DELEGATING_CONSTRUCTOR_CALL '${expression.descriptor}'"
@@ -368,7 +368,7 @@ class ExpressionCodegen(
}
expression.dispatchReceiver?.let { receiver ->
val type = if ((expression as? IrCall)?.superQualifier != null) receiver.asmType else callable.owner
val type = if ((expression as? IrCall)?.superQualifierSymbol != null) receiver.asmType else callable.owner
callGenerator.genValueAndPut(callee.dispatchReceiverParameter!!, receiver, type, this, data)
}
@@ -306,7 +306,7 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
}
val isInterface = calleeParent.isJvmInterface
val isSuperCall = (expression as? IrCall)?.superQualifier != null
val isSuperCall = (expression as? IrCall)?.superQualifierSymbol != null
val invokeOpcode = when {
callee.dispatchReceiverParameter == null -> Opcodes.INVOKESTATIC
@@ -27,7 +27,7 @@ object Clone : IntrinsicMethod() {
override fun invoke(expression: IrFunctionAccessExpression, codegen: ExpressionCodegen, data: BlockInfo) = with(codegen) {
val result = expression.dispatchReceiver!!.accept(this, data).materialized
assert(!AsmUtil.isPrimitive(result.type)) { "clone() of primitive type" }
val opcode = if (expression is IrCall && expression.superQualifier != null) Opcodes.INVOKESPECIAL else Opcodes.INVOKEVIRTUAL
val opcode = if (expression is IrCall && expression.superQualifierSymbol != null) Opcodes.INVOKESPECIAL else Opcodes.INVOKEVIRTUAL
mv.visitMethodInsn(opcode, "java/lang/Object", "clone", "()Ljava/lang/Object;", false)
MaterialValue(codegen, AsmTypes.OBJECT_TYPE, context.irBuiltIns.anyNType)
}
@@ -16,10 +16,8 @@
package org.jetbrains.kotlin.ir.expressions
import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
interface IrCall : IrFunctionAccessExpression {
val superQualifier: ClassDescriptor?
val superQualifierSymbol: IrClassSymbol?
}
@@ -79,12 +79,6 @@ class IrCallImpl(
descriptor.valueParameters.size, origin, superQualifierSymbol
)
constructor(startOffset: Int, endOffset: Int, type: IrType, symbol: IrFunctionSymbol, superQualifierSymbol : IrClassSymbol? = null) :
this(startOffset, endOffset, type, symbol, symbol.descriptor, superQualifierSymbol = superQualifierSymbol)
override val superQualifier: ClassDescriptor? = superQualifierSymbol?.descriptor
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
visitor.visitCall(this, data)
}
@@ -377,7 +377,7 @@ fun IrFunction.isFakeOverriddenFromAny(): Boolean {
return (this as IrSimpleFunction).overriddenSymbols.all { it.owner.isFakeOverriddenFromAny() }
}
fun IrCall.isSuperToAny() = superQualifier?.let { this.symbol.owner.isFakeOverriddenFromAny() } ?: false
fun IrCall.isSuperToAny() = superQualifierSymbol?.let { this.symbol.owner.isFakeOverriddenFromAny() } ?: false
fun IrDeclaration.isEffectivelyExternal(): Boolean {