IrFunctionExpression: add 'origin'
This is actually either a LAMBDA or an ANONYMOUS_FUNCTION. Not quite sure if it's really required, but some tools such as IR-based decompiler might require this information.
This commit is contained in:
+13
-2
@@ -17,6 +17,7 @@
|
||||
package org.jetbrains.kotlin.psi2ir.generators
|
||||
|
||||
import org.jetbrains.kotlin.ir.IrStatement
|
||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.IrFunctionExpressionImpl
|
||||
import org.jetbrains.kotlin.psi.KtLambdaExpression
|
||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||
@@ -30,7 +31,12 @@ class LocalFunctionGenerator(statementGenerator: StatementGenerator) : Statement
|
||||
val lambdaExpressionType = getInferredTypeWithImplicitCastsOrFail(ktLambda).toIrType()
|
||||
val irLambdaFunction = FunctionGenerator(context).generateLambdaFunctionDeclaration(ktFun)
|
||||
|
||||
return IrFunctionExpressionImpl(ktLambda.startOffset, ktLambda.endOffset, lambdaExpressionType, irLambdaFunction)
|
||||
return IrFunctionExpressionImpl(
|
||||
ktLambda.startOffset, ktLambda.endOffset,
|
||||
lambdaExpressionType,
|
||||
irLambdaFunction,
|
||||
IrStatementOrigin.LAMBDA
|
||||
)
|
||||
}
|
||||
|
||||
fun generateFunction(ktFun: KtNamedFunction): IrStatement {
|
||||
@@ -38,7 +44,12 @@ class LocalFunctionGenerator(statementGenerator: StatementGenerator) : Statement
|
||||
if (ktFun.name != null) return irFun
|
||||
|
||||
val funExpressionType = getInferredTypeWithImplicitCastsOrFail(ktFun).toIrType()
|
||||
return IrFunctionExpressionImpl(ktFun.startOffset, ktFun.endOffset, funExpressionType, irFun)
|
||||
return IrFunctionExpressionImpl(
|
||||
ktFun.startOffset, ktFun.endOffset,
|
||||
funExpressionType,
|
||||
irFun,
|
||||
IrStatementOrigin.ANONYMOUS_FUNCTION
|
||||
)
|
||||
}
|
||||
|
||||
private fun generateFunctionDeclaration(ktFun: KtNamedFunction) =
|
||||
|
||||
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.ir.expressions
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
|
||||
interface IrFunctionExpression : IrExpression {
|
||||
|
||||
val origin: IrStatementOrigin
|
||||
var function: IrSimpleFunction
|
||||
|
||||
}
|
||||
+3
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.ir.expressions.impl
|
||||
|
||||
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
|
||||
import org.jetbrains.kotlin.ir.expressions.IrFunctionExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
|
||||
import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
@@ -15,7 +16,8 @@ class IrFunctionExpressionImpl(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
type: IrType,
|
||||
override var function: IrSimpleFunction
|
||||
override var function: IrSimpleFunction,
|
||||
override val origin: IrStatementOrigin
|
||||
) :
|
||||
IrExpressionBase(startOffset, endOffset, type),
|
||||
IrFunctionExpression {
|
||||
|
||||
@@ -593,7 +593,8 @@ open class DeepCopyIrTreeWithSymbols(
|
||||
IrFunctionExpressionImpl(
|
||||
expression.startOffset, expression.endOffset,
|
||||
expression.type.remapType(),
|
||||
expression.function.transform()
|
||||
expression.function.transform(),
|
||||
mapStatementOrigin(expression.origin)!!
|
||||
)
|
||||
|
||||
override fun visitClassReference(expression: IrClassReference): IrClassReference =
|
||||
|
||||
@@ -603,7 +603,7 @@ class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
|
||||
|
||||
override fun visitFunctionExpression(expression: IrFunctionExpression, data: Nothing?): String =
|
||||
buildTrimEnd {
|
||||
append("FUN_EXPR type=${expression.type.render()}")
|
||||
append("FUN_EXPR type=${expression.type.render()} origin=${expression.origin}")
|
||||
}
|
||||
|
||||
override fun visitClassReference(expression: IrClassReference, data: Nothing?): String =
|
||||
|
||||
Reference in New Issue
Block a user