[IR][provisional function expression] do generate function reference with offset of call site.
This commit is contained in:
+17
-6
@@ -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<ProvisionalFunctionExpressionLoweringContext>,
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user