diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ProvisionalFunctionExpressionLowering.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ProvisionalFunctionExpressionLowering.kt index 8421987cade..c879efd341c 100644 --- a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ProvisionalFunctionExpressionLowering.kt +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/lower/ProvisionalFunctionExpressionLowering.kt @@ -7,29 +7,40 @@ package org.jetbrains.kotlin.backend.common.lower import org.jetbrains.kotlin.backend.common.BodyLoweringPass import org.jetbrains.kotlin.backend.common.FileLoweringPass +import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.declarations.IrDeclaration import org.jetbrains.kotlin.ir.declarations.IrFile import org.jetbrains.kotlin.ir.expressions.IrBody +import org.jetbrains.kotlin.ir.expressions.IrCall import org.jetbrains.kotlin.ir.expressions.IrExpression import org.jetbrains.kotlin.ir.expressions.IrFunctionExpression import org.jetbrains.kotlin.ir.expressions.impl.IrBlockImpl import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionReferenceImpl +import org.jetbrains.kotlin.ir.visitors.IrElementTransformer import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid +class ProvisionalFunctionExpressionLoweringContext( + val outer: ProvisionalFunctionExpressionLoweringContext? = null, + val startOffset: Int? = null, + val endOffset: Int? = null) class ProvisionalFunctionExpressionLowering : - IrElementTransformerVoid(), + IrElementTransformer, BodyLoweringPass { override fun lower(irBody: IrBody, container: IrDeclaration) { - irBody.transformChildrenVoid(this) + irBody.transformChildren(this, ProvisionalFunctionExpressionLoweringContext()) } - override fun visitFunctionExpression(expression: IrFunctionExpression): IrExpression { - expression.transformChildrenVoid(this) + override fun visitCall(expression: IrCall, data: ProvisionalFunctionExpressionLoweringContext): IrElement { + return super.visitCall(expression, ProvisionalFunctionExpressionLoweringContext(data, expression.startOffset, expression.endOffset)) + } - val startOffset = expression.startOffset - val endOffset = expression.endOffset + override fun visitFunctionExpression(expression: IrFunctionExpression, data: ProvisionalFunctionExpressionLoweringContext): IrElement { + expression.transformChildren(this, ProvisionalFunctionExpressionLoweringContext(data)) + + val startOffset = data.startOffset ?: expression.startOffset + val endOffset = data.endOffset ?: expression.endOffset val type = expression.type val origin = expression.origin val function = expression.function