[IR] Remove superQualifier property from IrCall
This commit is contained in:
+1
-1
@@ -91,7 +91,7 @@ class RenderIrElementWithDescriptorsVisitor : IrElementVisitor<String, Nothing?>
|
|||||||
"type=${expression.type.render()} origin=${expression.origin}"
|
"type=${expression.type.render()} origin=${expression.origin}"
|
||||||
|
|
||||||
private fun IrCall.renderSuperQualifier(): String =
|
private fun IrCall.renderSuperQualifier(): String =
|
||||||
superQualifier?.let { "superQualifier=${it.name} " } ?: ""
|
superQualifierSymbol?.let { "superQualifier=${it.owner.name} " } ?: ""
|
||||||
|
|
||||||
override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: Nothing?): String =
|
override fun visitDelegatingConstructorCall(expression: IrDelegatingConstructorCall, data: Nothing?): String =
|
||||||
"DELEGATING_CONSTRUCTOR_CALL '${expression.descriptor}'"
|
"DELEGATING_CONSTRUCTOR_CALL '${expression.descriptor}'"
|
||||||
|
|||||||
+1
-1
@@ -368,7 +368,7 @@ class ExpressionCodegen(
|
|||||||
}
|
}
|
||||||
|
|
||||||
expression.dispatchReceiver?.let { receiver ->
|
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)
|
callGenerator.genValueAndPut(callee.dispatchReceiverParameter!!, receiver, type, this, data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -306,7 +306,7 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val isInterface = calleeParent.isJvmInterface
|
val isInterface = calleeParent.isJvmInterface
|
||||||
val isSuperCall = (expression as? IrCall)?.superQualifier != null
|
val isSuperCall = (expression as? IrCall)?.superQualifierSymbol != null
|
||||||
|
|
||||||
val invokeOpcode = when {
|
val invokeOpcode = when {
|
||||||
callee.dispatchReceiverParameter == null -> Opcodes.INVOKESTATIC
|
callee.dispatchReceiverParameter == null -> Opcodes.INVOKESTATIC
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ object Clone : IntrinsicMethod() {
|
|||||||
override fun invoke(expression: IrFunctionAccessExpression, codegen: ExpressionCodegen, data: BlockInfo) = with(codegen) {
|
override fun invoke(expression: IrFunctionAccessExpression, codegen: ExpressionCodegen, data: BlockInfo) = with(codegen) {
|
||||||
val result = expression.dispatchReceiver!!.accept(this, data).materialized
|
val result = expression.dispatchReceiver!!.accept(this, data).materialized
|
||||||
assert(!AsmUtil.isPrimitive(result.type)) { "clone() of primitive type" }
|
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)
|
mv.visitMethodInsn(opcode, "java/lang/Object", "clone", "()Ljava/lang/Object;", false)
|
||||||
MaterialValue(codegen, AsmTypes.OBJECT_TYPE, context.irBuiltIns.anyNType)
|
MaterialValue(codegen, AsmTypes.OBJECT_TYPE, context.irBuiltIns.anyNType)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,10 +16,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.ir.expressions
|
package org.jetbrains.kotlin.ir.expressions
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
|
||||||
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||||
|
|
||||||
interface IrCall : IrFunctionAccessExpression {
|
interface IrCall : IrFunctionAccessExpression {
|
||||||
val superQualifier: ClassDescriptor?
|
|
||||||
val superQualifierSymbol: IrClassSymbol?
|
val superQualifierSymbol: IrClassSymbol?
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -79,12 +79,6 @@ class IrCallImpl(
|
|||||||
descriptor.valueParameters.size, origin, superQualifierSymbol
|
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 =
|
override fun <R, D> accept(visitor: IrElementVisitor<R, D>, data: D): R =
|
||||||
visitor.visitCall(this, data)
|
visitor.visitCall(this, data)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -377,7 +377,7 @@ fun IrFunction.isFakeOverriddenFromAny(): Boolean {
|
|||||||
return (this as IrSimpleFunction).overriddenSymbols.all { it.owner.isFakeOverriddenFromAny() }
|
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 {
|
fun IrDeclaration.isEffectivelyExternal(): Boolean {
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user