Fix JVM IR inliner

This commit is contained in:
Mikhael Bogdanov
2019-04-16 16:17:42 +02:00
committed by Dmitry Petrov
parent c545481db9
commit be0b2e064b
2 changed files with 6 additions and 9 deletions
@@ -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 {
@@ -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<IrDeclaration>()
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)
}
})