[FIR] Fix incorrect do-while loop transforming order and IR generating
This commit is contained in:
@@ -1014,8 +1014,8 @@ internal class Fir2IrVisitor(
|
|||||||
).apply {
|
).apply {
|
||||||
loopMap[doWhileLoop] = this
|
loopMap[doWhileLoop] = this
|
||||||
label = doWhileLoop.label?.name
|
label = doWhileLoop.label?.name
|
||||||
condition = doWhileLoop.condition.toIrExpression()
|
|
||||||
body = doWhileLoop.block.convertToIrExpressionOrBlock()
|
body = doWhileLoop.block.convertToIrExpressionOrBlock()
|
||||||
|
condition = doWhileLoop.condition.toIrExpression()
|
||||||
loopMap.remove(doWhileLoop)
|
loopMap.remove(doWhileLoop)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+13
-1
@@ -6,7 +6,19 @@
|
|||||||
package org.jetbrains.kotlin.fir.expressions.impl
|
package org.jetbrains.kotlin.fir.expressions.impl
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirDoWhileLoop
|
import org.jetbrains.kotlin.fir.expressions.FirDoWhileLoop
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
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
|
CONST Int type=kotlin.Int value=42
|
||||||
condition: CALL 'public final fun not (): kotlin.Boolean declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
|
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
|
$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
|
arg1: CONST Int type=kotlin.Unit value=42
|
||||||
|
|||||||
Reference in New Issue
Block a user