[FIR] Fix incorrect do-while loop transforming order and IR generating

This commit is contained in:
Dmitriy Novozhilov
2019-08-21 11:49:25 +03:00
parent 42f171a8d2
commit 908b6ade1d
3 changed files with 15 additions and 3 deletions
@@ -1014,8 +1014,8 @@ internal class Fir2IrVisitor(
).apply {
loopMap[doWhileLoop] = this
label = doWhileLoop.label?.name
condition = doWhileLoop.condition.toIrExpression()
body = doWhileLoop.block.convertToIrExpressionOrBlock()
condition = doWhileLoop.condition.toIrExpression()
loopMap.remove(doWhileLoop)
}
}
@@ -6,7 +6,19 @@
package org.jetbrains.kotlin.fir.expressions.impl
import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.expressions.FirDoWhileLoop
import org.jetbrains.kotlin.fir.expressions.FirExpression
import org.jetbrains.kotlin.fir.transformInplace
import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.visitors.FirTransformer
class FirDoWhileLoopImpl(psi: PsiElement?, condition: FirExpression) : FirAbstractLoop(psi, condition), FirDoWhileLoop
class FirDoWhileLoopImpl(psi: PsiElement?, condition: FirExpression) : FirAbstractLoop(psi, condition), FirDoWhileLoop {
override fun <D> transformChildren(transformer: FirTransformer<D>, data: D): FirElement {
block = block.transformSingle(transformer, data)
condition = condition.transformSingle(transformer, data)
label = label?.transformSingle(transformer, data)
annotations.transformInplace(transformer, data)
return this
}
}
@@ -7,5 +7,5 @@ FILE fqName:<root> fileName:/localVarInDoWhile.kt
CONST Int type=kotlin.Int value=42
condition: CALL 'public final fun not (): kotlin.Boolean declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
$this: CALL 'public final fun EQEQ (arg0: kotlin.Any?, arg1: kotlin.Any?): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=EXCLEQ
arg0: ERROR_CALL 'Unresolved reference: <Unresolved name: x>#' type=IrErrorType
arg0: GET_VAR 'val x: kotlin.Int [val] declared in <root>.foo' type=kotlin.Int origin=null
arg1: CONST Int type=kotlin.Unit value=42