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) { override fun lower(irFile: IrFile) {
irFile.transformChildrenVoid(object : IrElementTransformerVoidWithContext() { irFile.transformChildrenVoid(object : IrElementTransformerVoidWithContext() {
override fun visitCall(expression: IrCall): IrExpression { override fun visitFunctionAccess(expression: IrFunctionAccessExpression): IrExpression {
val callee = expression.symbol.owner val callee = expression.symbol.owner
if (callee.isInlineFunctionCall(context)) { if (callee.isInlineFunctionCall(context)) {
//TODO: more wise filtering //TODO: more wise filtering
@@ -121,7 +121,7 @@ internal class CallableReferenceLowering(val context: JvmBackendContext) : FileL
invokeFun.symbol, invokeFun.descriptor, invokeFun.symbol, invokeFun.descriptor,
1, 1,
expression.origin, expression.origin,
expression.superQualifier?.let { context.ir.symbols.externalSymbolTable.referenceClass(it) } (expression as? IrCall)?.superQualifier?.let { context.ir.symbols.externalSymbolTable.referenceClass(it) }
).apply { ).apply {
putTypeArgument(0, expression.type) putTypeArgument(0, expression.type)
dispatchReceiver = expression.dispatchReceiver dispatchReceiver = expression.dispatchReceiver
@@ -131,7 +131,7 @@ internal class CallableReferenceLowering(val context: JvmBackendContext) : FileL
} else expression } else expression
//TODO: clean //TODO: clean
return super.visitCall(newCall) return super.visitFunctionAccess(newCall)
} }
override fun visitFunctionReference(expression: IrFunctionReference): IrExpression { 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.IrClass
import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrDeclaration
import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.*
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.util.isFunction import org.jetbrains.kotlin.ir.util.isFunction
import org.jetbrains.kotlin.ir.util.isNullable import org.jetbrains.kotlin.ir.util.isNullable
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
@@ -34,7 +31,7 @@ private class RemoveDeclarationsThatWouldBeInlinedLowering(val context: JvmBacke
override fun lower(irFile: IrFile) { override fun lower(irFile: IrFile) {
val loweredLambdasToDelete = hashSetOf<IrDeclaration>() val loweredLambdasToDelete = hashSetOf<IrDeclaration>()
irFile.transformChildrenVoid(object : IrElementTransformerVoid() { irFile.transformChildrenVoid(object : IrElementTransformerVoid() {
override fun visitCall(expression: IrCall): IrExpression { override fun visitFunctionAccess(expression: IrFunctionAccessExpression): IrExpression {
val owner = expression.symbol.owner val owner = expression.symbol.owner
if (expression.symbol.owner.isInlineFunctionCall(context)) { if (expression.symbol.owner.isInlineFunctionCall(context)) {
owner.valueParameters.filter { owner.valueParameters.filter {
@@ -49,7 +46,7 @@ private class RemoveDeclarationsThatWouldBeInlinedLowering(val context: JvmBacke
} }
} }
return super.visitCall(expression) return super.visitFunctionAccess(expression)
} }
}) })