[IR] Visit file annotations in IR interpreter

#KT-55866 Fixed
This commit is contained in:
Ivan Kylchik
2023-04-24 10:26:50 +02:00
committed by Space Team
parent 1ba900be44
commit 3d4f3d2f57
12 changed files with 64 additions and 7 deletions
@@ -22,6 +22,11 @@ internal class IrConstDeclarationAnnotationTransformer(
onError: (IrFile, IrElement, IrErrorExpression) -> Unit,
suppressExceptions: Boolean,
) : IrConstAnnotationTransformer(interpreter, irFile, mode, evaluatedConstTracker, onWarning, onError, suppressExceptions) {
override fun visitFile(declaration: IrFile, data: Nothing?): IrFile {
transformAnnotations(declaration)
return super.visitFile(declaration, data)
}
override fun visitDeclaration(declaration: IrDeclarationBase, data: Nothing?): IrStatement {
transformAnnotations(declaration)
return super.visitDeclaration(declaration, data)
@@ -9,7 +9,7 @@ import org.jetbrains.kotlin.constant.ErrorValue
import org.jetbrains.kotlin.constant.EvaluatedConstTracker
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.declarations.IrFile
import org.jetbrains.kotlin.ir.declarations.name
import org.jetbrains.kotlin.ir.declarations.nameWithPackage
import org.jetbrains.kotlin.ir.expressions.IrConst
import org.jetbrains.kotlin.ir.expressions.IrErrorExpression
import org.jetbrains.kotlin.ir.expressions.IrExpression
@@ -19,7 +19,6 @@ import org.jetbrains.kotlin.ir.interpreter.IrInterpreterConfiguration
import org.jetbrains.kotlin.ir.interpreter.toConstantValue
import org.jetbrains.kotlin.ir.util.dump
import org.jetbrains.kotlin.ir.visitors.IrElementTransformer
import org.jetbrains.kotlin.name.Name
fun IrFile.transformConst(
interpreter: IrInterpreter,
@@ -99,7 +98,7 @@ internal abstract class IrConstTransformer(
}
evaluatedConstTracker?.save(
result.startOffset, result.endOffset, irFile.fqName.child(Name.identifier(irFile.name)).asString(),
result.startOffset, result.endOffset, irFile.nameWithPackage,
constant = if (result is IrErrorExpression) ErrorValue.create(result.description)
else (result as IrConst<*>).toConstantValue()
)