FIR body resolve: support subject type calculation

This commit is contained in:
Mikhail Glukhikh
2019-04-11 17:26:23 +03:00
parent e05dfb6541
commit 8b718c6822
15 changed files with 128 additions and 35 deletions
@@ -15,7 +15,6 @@ import org.jetbrains.kotlin.fir.descriptors.FirModuleDescriptor
import org.jetbrains.kotlin.fir.expressions.*
import org.jetbrains.kotlin.fir.expressions.impl.FirElseIfTrueCondition
import org.jetbrains.kotlin.fir.expressions.impl.FirUnitExpression
import org.jetbrains.kotlin.fir.expressions.impl.FirWhenSubjectExpression
import org.jetbrains.kotlin.fir.references.FirPropertyFromParameterCallableReference
import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider
import org.jetbrains.kotlin.fir.resolve.buildUseSiteScope
@@ -798,12 +797,6 @@ internal class Fir2IrVisitor(
private fun FirExpression.toIrExpression(): IrExpression {
return when (this) {
is FirBlock -> convertToIrExpressionOrBlock()
is FirWhenSubjectExpression -> {
val lastSubjectVariable = subjectVariableStack.last()
convertWithOffsets { startOffset, endOffset ->
IrGetValueImpl(startOffset, endOffset, lastSubjectVariable.type, lastSubjectVariable.symbol)
}
}
is FirUnitExpression -> convertWithOffsets { startOffset, endOffset ->
IrGetObjectValueImpl(
startOffset, endOffset, unitType,
@@ -917,6 +910,13 @@ internal class Fir2IrVisitor(
}
}
override fun visitWhenSubjectExpression(whenSubjectExpression: FirWhenSubjectExpression, data: Any?): IrElement {
val lastSubjectVariable = subjectVariableStack.last()
return whenSubjectExpression.convertWithOffsets { startOffset, endOffset ->
IrGetValueImpl(startOffset, endOffset, lastSubjectVariable.type, lastSubjectVariable.symbol)
}
}
private val loopMap = mutableMapOf<FirLoop, IrLoop>()
override fun visitDoWhileLoop(doWhileLoop: FirDoWhileLoop, data: Any?): IrElement {