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) {
|
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 {
|
||||||
|
|||||||
+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.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)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user