Fix JVM IR inliner
This commit is contained in:
committed by
Dmitry Petrov
parent
c545481db9
commit
be0b2e064b
+3
-3
@@ -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 {
|
||||
|
||||
+3
-6
@@ -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)
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user