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:
Dmitry Petrov
2019-07-15 13:09:48 +03:00
parent 41b59f9b9a
commit ffd9b45ef3
61 changed files with 121 additions and 96 deletions
@@ -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) =