[FIR] Fix incorrect do-while loop transforming order and IR generating
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+13
-1
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user