From c97697d7a99135c9c4c27cd33229cfc548e6df74 Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Fri, 27 Apr 2018 14:08:51 +0300 Subject: [PATCH] psi2ir: translate types in StatementGenerator TODO: DI --- .../kotlin/psi2ir/generators/StatementGenerator.kt | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StatementGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StatementGenerator.kt index 2c57c6c9106..6d9e64d9668 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StatementGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/StatementGenerator.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.impl.* import org.jetbrains.kotlin.ir.symbols.IrSymbol import org.jetbrains.kotlin.ir.util.ConstantValueGenerator +import org.jetbrains.kotlin.ir.util.TypeTranslator import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.endOffset import org.jetbrains.kotlin.psi.psiUtil.startOffset @@ -42,15 +43,23 @@ import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall import org.jetbrains.kotlin.resolve.calls.model.VariableAsFunctionResolvedCall import org.jetbrains.kotlin.resolve.constants.CompileTimeConstant import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator +import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.expressions.ExpressionTypingUtils class StatementGenerator( val bodyGenerator: BodyGenerator, override val scope: Scope -) : KtVisitor(), GeneratorWithScope { +) : KtVisitor(), + GeneratorWithScope { + override val context: GeneratorContext get() = bodyGenerator.context + val scopeOwner: DeclarationDescriptor get() = bodyGenerator.scopeOwner + private val typeTranslator = TypeTranslator(context.moduleDescriptor, context.symbolTable) + + private fun KotlinType.toIrType() = typeTranslator.translateType(this) + fun generateStatement(ktElement: KtElement): IrStatement = ktElement.genStmt() @@ -145,7 +154,7 @@ class StatementGenerator( if (isBlockBody) throw AssertionError("Use IrBlockBody and corresponding body generator to generate blocks as function bodies") val returnType = getInferredTypeWithImplicitCasts(expression) ?: context.builtIns.unitType - val irBlock = IrBlockImpl(expression.startOffset, expression.endOffset, returnType) + val irBlock = IrBlockImpl(expression.startOffset, expression.endOffset, returnType.toIrType()) expression.statements.forEach { irBlock.statements.add(it.genStmt())