From be0b2e064b97c3fb053409f3039a84237689ea4c Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Tue, 16 Apr 2019 16:17:42 +0200 Subject: [PATCH] Fix JVM IR inliner --- .../backend/jvm/lower/CallableReferenceLowering.kt | 6 +++--- .../RemoveDeclarationsThatWouldBeInlinedLowering.kt | 9 +++------ 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CallableReferenceLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CallableReferenceLowering.kt index 3440eb134c0..6847fde95de 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CallableReferenceLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/CallableReferenceLowering.kt @@ -83,7 +83,7 @@ internal class CallableReferenceLowering(val context: JvmBackendContext) : FileL override fun lower(irFile: IrFile) { irFile.transformChildrenVoid(object : IrElementTransformerVoidWithContext() { - override fun visitCall(expression: IrCall): IrExpression { + override fun visitFunctionAccess(expression: IrFunctionAccessExpression): IrExpression { val callee = expression.symbol.owner if (callee.isInlineFunctionCall(context)) { //TODO: more wise filtering @@ -121,7 +121,7 @@ internal class CallableReferenceLowering(val context: JvmBackendContext) : FileL invokeFun.symbol, invokeFun.descriptor, 1, expression.origin, - expression.superQualifier?.let { context.ir.symbols.externalSymbolTable.referenceClass(it) } + (expression as? IrCall)?.superQualifier?.let { context.ir.symbols.externalSymbolTable.referenceClass(it) } ).apply { putTypeArgument(0, expression.type) dispatchReceiver = expression.dispatchReceiver @@ -131,7 +131,7 @@ internal class CallableReferenceLowering(val context: JvmBackendContext) : FileL } else expression //TODO: clean - return super.visitCall(newCall) + return super.visitFunctionAccess(newCall) } override fun visitFunctionReference(expression: IrFunctionReference): IrExpression { diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/RemoveDeclarationsThatWouldBeInlinedLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/RemoveDeclarationsThatWouldBeInlinedLowering.kt index 22d95669f60..1b63133ccd7 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/RemoveDeclarationsThatWouldBeInlinedLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/RemoveDeclarationsThatWouldBeInlinedLowering.kt @@ -14,10 +14,7 @@ import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrFile -import org.jetbrains.kotlin.ir.expressions.IrCall -import org.jetbrains.kotlin.ir.expressions.IrContainerExpression -import org.jetbrains.kotlin.ir.expressions.IrExpression -import org.jetbrains.kotlin.ir.expressions.IrFunctionReference +import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.util.isFunction import org.jetbrains.kotlin.ir.util.isNullable import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid @@ -34,7 +31,7 @@ private class RemoveDeclarationsThatWouldBeInlinedLowering(val context: JvmBacke override fun lower(irFile: IrFile) { val loweredLambdasToDelete = hashSetOf() irFile.transformChildrenVoid(object : IrElementTransformerVoid() { - override fun visitCall(expression: IrCall): IrExpression { + override fun visitFunctionAccess(expression: IrFunctionAccessExpression): IrExpression { val owner = expression.symbol.owner if (expression.symbol.owner.isInlineFunctionCall(context)) { owner.valueParameters.filter { @@ -49,7 +46,7 @@ private class RemoveDeclarationsThatWouldBeInlinedLowering(val context: JvmBacke } } - return super.visitCall(expression) + return super.visitFunctionAccess(expression) } })