FIR2IR: provide correct origins for 'for' loops

This commit is contained in:
Mikhail Glukhikh
2020-02-11 16:28:29 +03:00
parent 83e68be2dc
commit 2bfce4f127
14 changed files with 198 additions and 169 deletions
@@ -779,11 +779,15 @@ class Fir2IrDeclarationStorage(
} }
} }
fun createAndSaveIrVariable(variable: FirVariable<*>): IrVariable { fun createAndSaveIrVariable(variable: FirVariable<*>, givenOrigin: IrDeclarationOrigin? = null): IrVariable {
val type = variable.returnTypeRef.toIrType(session, this) val type = variable.returnTypeRef.toIrType(session, this)
// Some temporary variables are produced in RawFirBuilder, but we consistently use special names for them. // Some temporary variables are produced in RawFirBuilder, but we consistently use special names for them.
val origin = val origin = when {
if (variable.name.isSpecial) IrDeclarationOrigin.IR_TEMPORARY_VARIABLE else IrDeclarationOrigin.DEFINED givenOrigin != null -> givenOrigin
variable.name == Name.special("<iterator>") -> IrDeclarationOrigin.FOR_LOOP_ITERATOR
variable.name.isSpecial -> IrDeclarationOrigin.IR_TEMPORARY_VARIABLE
else -> IrDeclarationOrigin.DEFINED
}
val irVariable = variable.convertWithOffsets { startOffset, endOffset -> val irVariable = variable.convertWithOffsets { startOffset, endOffset ->
declareIrVariable( declareIrVariable(
startOffset, endOffset, origin, startOffset, endOffset, origin,
@@ -469,9 +469,14 @@ class Fir2IrVisitor(
private fun visitLocalVariable(variable: FirProperty): IrElement { private fun visitLocalVariable(variable: FirProperty): IrElement {
assert(variable.isLocal) assert(variable.isLocal)
val irVariable = declarationStorage.createAndSaveIrVariable(variable) val initializer = variable.initializer
val isNextVariable = initializer is FirFunctionCall &&
initializer.resolvedNamedFunctionSymbol()?.callableId?.isIteratorNext() == true &&
variable.source.psi?.parent is KtForExpression
val irVariable = declarationStorage.createAndSaveIrVariable(
variable, if (isNextVariable) IrDeclarationOrigin.FOR_LOOP_VARIABLE else null
)
return irVariable.setParentByParentStack().apply { return irVariable.setParentByParentStack().apply {
val initializer = variable.initializer
if (initializer != null) { if (initializer != null) {
this.initializer = initializer.toIrExpression() this.initializer = initializer.toIrExpression()
} }
@@ -671,7 +676,13 @@ class Fir2IrVisitor(
is FirPropertyFromParameterResolvedNamedReference -> IrStatementOrigin.INITIALIZE_PROPERTY_FROM_PARAMETER is FirPropertyFromParameterResolvedNamedReference -> IrStatementOrigin.INITIALIZE_PROPERTY_FROM_PARAMETER
is FirResolvedNamedReference -> when (resolvedSymbol) { is FirResolvedNamedReference -> when (resolvedSymbol) {
is AccessorSymbol, is SyntheticPropertySymbol -> IrStatementOrigin.GET_PROPERTY is AccessorSymbol, is SyntheticPropertySymbol -> IrStatementOrigin.GET_PROPERTY
is FirNamedFunctionSymbol -> if (resolvedSymbol.callableId.isInvoke()) IrStatementOrigin.INVOKE else null is FirNamedFunctionSymbol -> when {
resolvedSymbol.callableId.isInvoke() -> IrStatementOrigin.INVOKE
source.psi is KtForExpression && resolvedSymbol.callableId.isIteratorNext() -> IrStatementOrigin.FOR_LOOP_NEXT
source.psi is KtForExpression && resolvedSymbol.callableId.isIteratorHasNext() -> IrStatementOrigin.FOR_LOOP_HAS_NEXT
source.psi is KtForExpression && resolvedSymbol.callableId.isIterator() -> IrStatementOrigin.FOR_LOOP_ITERATOR
else -> null
}
else -> null else -> null
} }
else -> null else -> null
@@ -857,16 +868,24 @@ class Fir2IrVisitor(
val convertibleCall = if (functionCall.toResolvedCallableSymbol()?.fir is FirIntegerOperator) { val convertibleCall = if (functionCall.toResolvedCallableSymbol()?.fir is FirIntegerOperator) {
functionCall.copy().transformSingle(integerApproximator, null) functionCall.copy().transformSingle(integerApproximator, null)
} else { } else {
functionCall.replaceCalleeReferenceWithOverridden() val resolvedSymbol = functionCall.resolvedNamedFunctionSymbol()
if (resolvedSymbol != null) {
functionCall.replaceCalleeReferenceWithOverridden(resolvedSymbol)
} else {
functionCall
}
} }
return convertibleCall.toIrExpression(convertibleCall.typeRef) return convertibleCall.toIrExpression(convertibleCall.typeRef)
.applyCallArguments(convertibleCall).applyTypeArguments(convertibleCall).applyReceivers(convertibleCall) .applyCallArguments(convertibleCall).applyTypeArguments(convertibleCall).applyReceivers(convertibleCall)
} }
private fun FirFunctionCall.resolvedNamedFunctionSymbol(): FirNamedFunctionSymbol? {
val calleeReference = (calleeReference as? FirResolvedNamedReference) ?: return null
return calleeReference.resolvedSymbol as? FirNamedFunctionSymbol
}
// Use the generic invoke & next methods to match bridges generated by the backend. // Use the generic invoke & next methods to match bridges generated by the backend.
private fun FirFunctionCall.replaceCalleeReferenceWithOverridden(): FirFunctionCall { private fun FirFunctionCall.replaceCalleeReferenceWithOverridden(resolvedSymbol: FirNamedFunctionSymbol): FirFunctionCall {
val calleeReference = (calleeReference as? FirResolvedNamedReference) ?: return this
val resolvedSymbol = (calleeReference.resolvedSymbol as? FirNamedFunctionSymbol) ?: return this
val overriddenSymbol = resolvedSymbol.overriddenSymbol ?: return this val overriddenSymbol = resolvedSymbol.overriddenSymbol ?: return this
if (resolvedSymbol.callableId.isInvoke() || resolvedSymbol.callableId.isIteratorNext()) { if (resolvedSymbol.callableId.isInvoke() || resolvedSymbol.callableId.isIteratorNext()) {
return copy( return copy(
@@ -1090,7 +1109,7 @@ class Fir2IrVisitor(
} }
} }
private fun FirBlock.convertToIrExpressionOrBlock(): IrExpression { private fun FirBlock.convertToIrExpressionOrBlock(origin: IrStatementOrigin? = null): IrExpression {
if (statements.size == 1) { if (statements.size == 1) {
val firStatement = statements.single() val firStatement = statements.single()
if (firStatement is FirExpression) { if (firStatement is FirExpression) {
@@ -1101,7 +1120,7 @@ class Fir2IrVisitor(
(statements.lastOrNull() as? FirExpression)?.typeRef?.toIrType(this@Fir2IrVisitor.session, declarationStorage) ?: unitType (statements.lastOrNull() as? FirExpression)?.typeRef?.toIrType(this@Fir2IrVisitor.session, declarationStorage) ?: unitType
return convertWithOffsets { startOffset, endOffset -> return convertWithOffsets { startOffset, endOffset ->
IrBlockImpl( IrBlockImpl(
startOffset, endOffset, type, null, startOffset, endOffset, type, origin,
statements.mapNotNull { it.toIrStatement() } statements.mapNotNull { it.toIrStatement() }
) )
} }
@@ -1204,15 +1223,13 @@ class Fir2IrVisitor(
override fun visitWhileLoop(whileLoop: FirWhileLoop, data: Any?): IrElement { override fun visitWhileLoop(whileLoop: FirWhileLoop, data: Any?): IrElement {
return whileLoop.convertWithOffsets { startOffset, endOffset -> return whileLoop.convertWithOffsets { startOffset, endOffset ->
IrWhileLoopImpl( val origin = if (whileLoop.psi is KtForExpression) IrStatementOrigin.FOR_LOOP_INNER_WHILE
startOffset, endOffset, unitType, else IrStatementOrigin.WHILE_LOOP
if (whileLoop.psi is KtForExpression) IrStatementOrigin.FOR_LOOP_INNER_WHILE IrWhileLoopImpl(startOffset, endOffset, unitType, origin).apply {
else IrStatementOrigin.WHILE_LOOP
).apply {
loopMap[whileLoop] = this loopMap[whileLoop] = this
label = whileLoop.label?.name label = whileLoop.label?.name
condition = whileLoop.condition.toIrExpression() condition = whileLoop.condition.toIrExpression()
body = whileLoop.block.convertToIrExpressionOrBlock() body = whileLoop.block.convertToIrExpressionOrBlock(origin)
loopMap.remove(whileLoop) loopMap.remove(whileLoop)
} }
} }
@@ -483,4 +483,12 @@ fun CallableId.isKFunctionInvoke() =
&& packageName.asString() == "kotlin.reflect" && packageName.asString() == "kotlin.reflect"
fun CallableId.isIteratorNext() = fun CallableId.isIteratorNext() =
callableName.asString() == "next" && className?.asString()?.equals("Iterator") == true && packageName.asString() == "kotlin.collections" callableName.asString() == "next" && className?.asString()?.endsWith("Iterator") == true
&& packageName.asString() == "kotlin.collections"
fun CallableId.isIteratorHasNext() =
callableName.asString() == "hasNext" && className?.asString()?.endsWith("Iterator") == true
&& packageName.asString() == "kotlin.collections"
fun CallableId.isIterator() =
callableName.asString() == "iterator" && packageName.asString() == "kotlin.collections"
@@ -7,14 +7,14 @@ FILE fqName:<root> fileName:/badBreakContinue.kt
BLOCK_BODY BLOCK_BODY
WHILE label=L1 origin=WHILE_LOOP WHILE label=L1 origin=WHILE_LOOP
condition: CONST Boolean type=kotlin.Boolean value=true condition: CONST Boolean type=kotlin.Boolean value=true
body: BLOCK type=kotlin.Nothing origin=null body: BLOCK type=kotlin.Nothing origin=WHILE_LOOP
ERROR_EXPR 'Unbound loop: break@@@[ERROR_EXPR(Cannot bind label ERROR to a loop)] ' type=kotlin.Nothing ERROR_EXPR 'Unbound loop: break@@@[ERROR_EXPR(Cannot bind label ERROR to a loop)] ' type=kotlin.Nothing
ERROR_EXPR 'Unbound loop: continue@@@[ERROR_EXPR(Cannot bind label ERROR to a loop)] ' type=kotlin.Nothing ERROR_EXPR 'Unbound loop: continue@@@[ERROR_EXPR(Cannot bind label ERROR to a loop)] ' type=kotlin.Nothing
FUN name:test3 visibility:public modality:FINAL <> () returnType:kotlin.Unit FUN name:test3 visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY BLOCK_BODY
WHILE label=L1 origin=WHILE_LOOP WHILE label=L1 origin=WHILE_LOOP
condition: CONST Boolean type=kotlin.Boolean value=true condition: CONST Boolean type=kotlin.Boolean value=true
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=WHILE_LOOP
VAR name:lambda type:kotlin.Function0<kotlin.Nothing> [val] VAR name:lambda type:kotlin.Function0<kotlin.Nothing> [val]
FUN_EXPR type=kotlin.Function0<kotlin.Nothing> origin=LAMBDA FUN_EXPR type=kotlin.Function0<kotlin.Nothing> origin=LAMBDA
FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> () returnType:kotlin.Nothing FUN LOCAL_FUNCTION_FOR_LAMBDA name:<anonymous> visibility:local modality:FINAL <> () returnType:kotlin.Nothing
@@ -25,7 +25,7 @@ FILE fqName:<root> fileName:/badBreakContinue.kt
BLOCK_BODY BLOCK_BODY
WHILE label=null origin=WHILE_LOOP WHILE label=null origin=WHILE_LOOP
condition: ERROR_EXPR 'Unbound loop: break@@@[ERROR_EXPR(Cannot bind unlabeled jump to a loop)] ' type=kotlin.Nothing condition: ERROR_EXPR 'Unbound loop: break@@@[ERROR_EXPR(Cannot bind unlabeled jump to a loop)] ' type=kotlin.Nothing
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=WHILE_LOOP
WHILE label=null origin=WHILE_LOOP WHILE label=null origin=WHILE_LOOP
condition: ERROR_EXPR 'Unbound loop: continue@@@[ERROR_EXPR(Cannot bind unlabeled jump to a loop)] ' type=kotlin.Nothing condition: ERROR_EXPR 'Unbound loop: continue@@@[ERROR_EXPR(Cannot bind unlabeled jump to a loop)] ' type=kotlin.Nothing
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=WHILE_LOOP
@@ -17,19 +17,19 @@ FILE fqName:<root> fileName:/breakContinue.kt
BLOCK_BODY BLOCK_BODY
WHILE label=OUTER origin=WHILE_LOOP WHILE label=OUTER origin=WHILE_LOOP
condition: CONST Boolean type=kotlin.Boolean value=true condition: CONST Boolean type=kotlin.Boolean value=true
body: BLOCK type=kotlin.Nothing origin=null body: BLOCK type=kotlin.Nothing origin=WHILE_LOOP
WHILE label=INNER origin=WHILE_LOOP WHILE label=INNER origin=WHILE_LOOP
condition: CONST Boolean type=kotlin.Boolean value=true condition: CONST Boolean type=kotlin.Boolean value=true
body: BLOCK type=kotlin.Nothing origin=null body: BLOCK type=kotlin.Nothing origin=WHILE_LOOP
BREAK label=INNER loop.label=INNER BREAK label=INNER loop.label=INNER
BREAK label=OUTER loop.label=OUTER BREAK label=OUTER loop.label=OUTER
BREAK label=OUTER loop.label=OUTER BREAK label=OUTER loop.label=OUTER
WHILE label=OUTER origin=WHILE_LOOP WHILE label=OUTER origin=WHILE_LOOP
condition: CONST Boolean type=kotlin.Boolean value=true condition: CONST Boolean type=kotlin.Boolean value=true
body: BLOCK type=kotlin.Nothing origin=null body: BLOCK type=kotlin.Nothing origin=WHILE_LOOP
WHILE label=INNER origin=WHILE_LOOP WHILE label=INNER origin=WHILE_LOOP
condition: CONST Boolean type=kotlin.Boolean value=true condition: CONST Boolean type=kotlin.Boolean value=true
body: BLOCK type=kotlin.Nothing origin=null body: BLOCK type=kotlin.Nothing origin=WHILE_LOOP
CONTINUE label=INNER loop.label=INNER CONTINUE label=INNER loop.label=INNER
CONTINUE label=OUTER loop.label=OUTER CONTINUE label=OUTER loop.label=OUTER
CONTINUE label=OUTER loop.label=OUTER CONTINUE label=OUTER loop.label=OUTER
@@ -37,14 +37,14 @@ FILE fqName:<root> fileName:/breakContinue.kt
BLOCK_BODY BLOCK_BODY
WHILE label=L origin=WHILE_LOOP WHILE label=L origin=WHILE_LOOP
condition: CONST Boolean type=kotlin.Boolean value=true condition: CONST Boolean type=kotlin.Boolean value=true
body: BLOCK type=kotlin.Nothing origin=null body: BLOCK type=kotlin.Nothing origin=WHILE_LOOP
WHILE label=L origin=WHILE_LOOP WHILE label=L origin=WHILE_LOOP
condition: CONST Boolean type=kotlin.Boolean value=true condition: CONST Boolean type=kotlin.Boolean value=true
body: BREAK label=L loop.label=L body: BREAK label=L loop.label=L
BREAK label=L loop.label=L BREAK label=L loop.label=L
WHILE label=L origin=WHILE_LOOP WHILE label=L origin=WHILE_LOOP
condition: CONST Boolean type=kotlin.Boolean value=true condition: CONST Boolean type=kotlin.Boolean value=true
body: BLOCK type=kotlin.Nothing origin=null body: BLOCK type=kotlin.Nothing origin=WHILE_LOOP
WHILE label=L origin=WHILE_LOOP WHILE label=L origin=WHILE_LOOP
condition: CONST Boolean type=kotlin.Boolean value=true condition: CONST Boolean type=kotlin.Boolean value=true
body: CONTINUE label=L loop.label=L body: CONTINUE label=L loop.label=L
@@ -4,7 +4,7 @@ FILE fqName:<root> fileName:/breakContinueInLoopHeader.kt
BLOCK_BODY BLOCK_BODY
WHILE label=L origin=WHILE_LOOP WHILE label=L origin=WHILE_LOOP
condition: CONST Boolean type=kotlin.Boolean value=true condition: CONST Boolean type=kotlin.Boolean value=true
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=WHILE_LOOP
WHILE label=L2 origin=WHILE_LOOP WHILE label=L2 origin=WHILE_LOOP
condition: BLOCK type=kotlin.Boolean origin=ELVIS condition: BLOCK type=kotlin.Boolean origin=ELVIS
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:kotlin.Boolean? [val] VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:kotlin.Boolean? [val]
@@ -19,13 +19,13 @@ FILE fqName:<root> fileName:/breakContinueInLoopHeader.kt
if: CONST Boolean type=kotlin.Boolean value=true if: CONST Boolean type=kotlin.Boolean value=true
then: TYPE_OP type=kotlin.Boolean origin=IMPLICIT_CAST typeOperand=kotlin.Boolean then: TYPE_OP type=kotlin.Boolean origin=IMPLICIT_CAST typeOperand=kotlin.Boolean
GET_VAR 'val tmp_0: kotlin.Boolean? [val] declared in <root>.test1' type=kotlin.Boolean? origin=null GET_VAR 'val tmp_0: kotlin.Boolean? [val] declared in <root>.test1' type=kotlin.Boolean? origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=WHILE_LOOP
FUN name:test2 visibility:public modality:FINAL <> (c:kotlin.Boolean?) returnType:kotlin.Unit FUN name:test2 visibility:public modality:FINAL <> (c:kotlin.Boolean?) returnType:kotlin.Unit
VALUE_PARAMETER name:c index:0 type:kotlin.Boolean? VALUE_PARAMETER name:c index:0 type:kotlin.Boolean?
BLOCK_BODY BLOCK_BODY
WHILE label=L origin=WHILE_LOOP WHILE label=L origin=WHILE_LOOP
condition: CONST Boolean type=kotlin.Boolean value=true condition: CONST Boolean type=kotlin.Boolean value=true
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=WHILE_LOOP
WHILE label=L2 origin=WHILE_LOOP WHILE label=L2 origin=WHILE_LOOP
condition: BLOCK type=kotlin.Boolean origin=ELVIS condition: BLOCK type=kotlin.Boolean origin=ELVIS
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:kotlin.Boolean? [val] VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:kotlin.Boolean? [val]
@@ -40,15 +40,15 @@ FILE fqName:<root> fileName:/breakContinueInLoopHeader.kt
if: CONST Boolean type=kotlin.Boolean value=true if: CONST Boolean type=kotlin.Boolean value=true
then: TYPE_OP type=kotlin.Boolean origin=IMPLICIT_CAST typeOperand=kotlin.Boolean then: TYPE_OP type=kotlin.Boolean origin=IMPLICIT_CAST typeOperand=kotlin.Boolean
GET_VAR 'val tmp_1: kotlin.Boolean? [val] declared in <root>.test2' type=kotlin.Boolean? origin=null GET_VAR 'val tmp_1: kotlin.Boolean? [val] declared in <root>.test2' type=kotlin.Boolean? origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=WHILE_LOOP
FUN name:test3 visibility:public modality:FINAL <> (ss:kotlin.collections.List<kotlin.String>?) returnType:kotlin.Unit FUN name:test3 visibility:public modality:FINAL <> (ss:kotlin.collections.List<kotlin.String>?) returnType:kotlin.Unit
VALUE_PARAMETER name:ss index:0 type:kotlin.collections.List<kotlin.String>? VALUE_PARAMETER name:ss index:0 type:kotlin.collections.List<kotlin.String>?
BLOCK_BODY BLOCK_BODY
WHILE label=L origin=WHILE_LOOP WHILE label=L origin=WHILE_LOOP
condition: CONST Boolean type=kotlin.Boolean value=true condition: CONST Boolean type=kotlin.Boolean value=true
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=WHILE_LOOP
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:kotlin.collections.Iterator<kotlin.String> [val] VAR FOR_LOOP_ITERATOR name:tmp_2 type:kotlin.collections.Iterator<kotlin.String> [val]
CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=null CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
$this: BLOCK type=kotlin.collections.List<kotlin.String> origin=ELVIS $this: BLOCK type=kotlin.collections.List<kotlin.String> origin=ELVIS
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.collections.List<kotlin.String>? [val] VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.collections.List<kotlin.String>? [val]
GET_VAR 'ss: kotlin.collections.List<kotlin.String>? declared in <root>.test3' type=kotlin.collections.List<kotlin.String>? origin=null GET_VAR 'ss: kotlin.collections.List<kotlin.String>? declared in <root>.test3' type=kotlin.collections.List<kotlin.String>? origin=null
@@ -63,20 +63,20 @@ FILE fqName:<root> fileName:/breakContinueInLoopHeader.kt
then: TYPE_OP type=kotlin.collections.List<kotlin.String> origin=IMPLICIT_CAST typeOperand=kotlin.collections.List<kotlin.String> then: TYPE_OP type=kotlin.collections.List<kotlin.String> origin=IMPLICIT_CAST typeOperand=kotlin.collections.List<kotlin.String>
GET_VAR 'val tmp_3: kotlin.collections.List<kotlin.String>? [val] declared in <root>.test3' type=kotlin.collections.List<kotlin.String>? origin=null GET_VAR 'val tmp_3: kotlin.collections.List<kotlin.String>? [val] declared in <root>.test3' type=kotlin.collections.List<kotlin.String>? origin=null
WHILE label=L2 origin=FOR_LOOP_INNER_WHILE WHILE label=L2 origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_2: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.test3' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_2: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.test3' type=kotlin.collections.Iterator<kotlin.String> origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR name:s type:kotlin.String [val] VAR FOR_LOOP_VARIABLE name:s type:kotlin.String [val]
CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=null CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_2: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.test3' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_2: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.test3' type=kotlin.collections.Iterator<kotlin.String> origin=null
FUN name:test4 visibility:public modality:FINAL <> (ss:kotlin.collections.List<kotlin.String>?) returnType:kotlin.Unit FUN name:test4 visibility:public modality:FINAL <> (ss:kotlin.collections.List<kotlin.String>?) returnType:kotlin.Unit
VALUE_PARAMETER name:ss index:0 type:kotlin.collections.List<kotlin.String>? VALUE_PARAMETER name:ss index:0 type:kotlin.collections.List<kotlin.String>?
BLOCK_BODY BLOCK_BODY
WHILE label=L origin=WHILE_LOOP WHILE label=L origin=WHILE_LOOP
condition: CONST Boolean type=kotlin.Boolean value=true condition: CONST Boolean type=kotlin.Boolean value=true
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=WHILE_LOOP
VAR IR_TEMPORARY_VARIABLE name:tmp_4 type:kotlin.collections.Iterator<kotlin.String> [val] VAR FOR_LOOP_ITERATOR name:tmp_4 type:kotlin.collections.Iterator<kotlin.String> [val]
CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=null CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
$this: BLOCK type=kotlin.collections.List<kotlin.String> origin=ELVIS $this: BLOCK type=kotlin.collections.List<kotlin.String> origin=ELVIS
VAR IR_TEMPORARY_VARIABLE name:tmp_5 type:kotlin.collections.List<kotlin.String>? [val] VAR IR_TEMPORARY_VARIABLE name:tmp_5 type:kotlin.collections.List<kotlin.String>? [val]
GET_VAR 'ss: kotlin.collections.List<kotlin.String>? declared in <root>.test4' type=kotlin.collections.List<kotlin.String>? origin=null GET_VAR 'ss: kotlin.collections.List<kotlin.String>? declared in <root>.test4' type=kotlin.collections.List<kotlin.String>? origin=null
@@ -91,11 +91,11 @@ FILE fqName:<root> fileName:/breakContinueInLoopHeader.kt
then: TYPE_OP type=kotlin.collections.List<kotlin.String> origin=IMPLICIT_CAST typeOperand=kotlin.collections.List<kotlin.String> then: TYPE_OP type=kotlin.collections.List<kotlin.String> origin=IMPLICIT_CAST typeOperand=kotlin.collections.List<kotlin.String>
GET_VAR 'val tmp_5: kotlin.collections.List<kotlin.String>? [val] declared in <root>.test4' type=kotlin.collections.List<kotlin.String>? origin=null GET_VAR 'val tmp_5: kotlin.collections.List<kotlin.String>? [val] declared in <root>.test4' type=kotlin.collections.List<kotlin.String>? origin=null
WHILE label=L2 origin=FOR_LOOP_INNER_WHILE WHILE label=L2 origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_4: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.test4' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_4: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.test4' type=kotlin.collections.Iterator<kotlin.String> origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR name:s type:kotlin.String [val] VAR FOR_LOOP_VARIABLE name:s type:kotlin.String [val]
CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=null CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_4: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.test4' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_4: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.test4' type=kotlin.collections.Iterator<kotlin.String> origin=null
FUN name:test5 visibility:public modality:FINAL <> () returnType:kotlin.Unit FUN name:test5 visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY BLOCK_BODY
@@ -103,7 +103,7 @@ FILE fqName:<root> fileName:/breakContinueInLoopHeader.kt
CONST Int type=kotlin.Int value=0 CONST Int type=kotlin.Int value=0
WHILE label=Outer origin=WHILE_LOOP WHILE label=Outer origin=WHILE_LOOP
condition: CONST Boolean type=kotlin.Boolean value=true condition: CONST Boolean type=kotlin.Boolean value=true
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=WHILE_LOOP
VAR IR_TEMPORARY_VARIABLE name:tmp_6 type:kotlin.Int [val] VAR IR_TEMPORARY_VARIABLE name:tmp_6 type:kotlin.Int [val]
GET_VAR 'var i: kotlin.Int [var] declared in <root>.test5' type=kotlin.Int origin=null GET_VAR 'var i: kotlin.Int [var] declared in <root>.test5' type=kotlin.Int origin=null
SET_VAR 'var i: kotlin.Int [var] declared in <root>.test5' type=kotlin.Unit origin=null SET_VAR 'var i: kotlin.Int [var] declared in <root>.test5' type=kotlin.Unit origin=null
@@ -12,15 +12,15 @@ FILE fqName:<root> fileName:/breakContinueInWhen.kt
GET_VAR 'i: kotlin.Int declared in <root>.testBreakFor.<anonymous>' type=kotlin.Int origin=null GET_VAR 'i: kotlin.Int declared in <root>.testBreakFor.<anonymous>' type=kotlin.Int origin=null
VAR name:k type:kotlin.Int [var] VAR name:k type:kotlin.Int [var]
CONST Int type=kotlin.Int value=0 CONST Int type=kotlin.Int value=0
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:kotlin.collections.IntIterator [val] VAR FOR_LOOP_ITERATOR name:tmp_0 type:kotlin.collections.IntIterator [val]
CALL 'public final fun iterator (): kotlin.collections.IntIterator [operator] declared in kotlin.IntArray' type=kotlin.collections.IntIterator origin=null CALL 'public final fun iterator (): kotlin.collections.IntIterator [operator] declared in kotlin.IntArray' type=kotlin.collections.IntIterator origin=null
$this: GET_VAR 'val xs: kotlin.IntArray [val] declared in <root>.testBreakFor' type=kotlin.IntArray origin=null $this: GET_VAR 'val xs: kotlin.IntArray [val] declared in <root>.testBreakFor' type=kotlin.IntArray origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_0: kotlin.collections.IntIterator [val] declared in <root>.testBreakFor' type=kotlin.collections.IntIterator origin=null $this: GET_VAR 'val tmp_0: kotlin.collections.IntIterator [val] declared in <root>.testBreakFor' type=kotlin.collections.IntIterator origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR name:x type:kotlin.Int [val] VAR FOR_LOOP_VARIABLE name:x type:kotlin.Int [val]
CALL 'public final fun next (): kotlin.Int [operator] declared in kotlin.collections.IntIterator' type=kotlin.Int origin=null CALL 'public final fun next (): kotlin.Int [operator] declared in kotlin.collections.IntIterator' type=kotlin.Int origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_0: kotlin.collections.IntIterator [val] declared in <root>.testBreakFor' type=kotlin.collections.IntIterator origin=null $this: GET_VAR 'val tmp_0: kotlin.collections.IntIterator [val] declared in <root>.testBreakFor' type=kotlin.collections.IntIterator origin=null
WHEN type=kotlin.Unit origin=WHEN WHEN type=kotlin.Unit origin=WHEN
BRANCH BRANCH
@@ -69,15 +69,15 @@ FILE fqName:<root> fileName:/breakContinueInWhen.kt
GET_VAR 'i: kotlin.Int declared in <root>.testContinueFor.<anonymous>' type=kotlin.Int origin=null GET_VAR 'i: kotlin.Int declared in <root>.testContinueFor.<anonymous>' type=kotlin.Int origin=null
VAR name:k type:kotlin.Int [var] VAR name:k type:kotlin.Int [var]
CONST Int type=kotlin.Int value=0 CONST Int type=kotlin.Int value=0
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:kotlin.collections.IntIterator [val] VAR FOR_LOOP_ITERATOR name:tmp_1 type:kotlin.collections.IntIterator [val]
CALL 'public final fun iterator (): kotlin.collections.IntIterator [operator] declared in kotlin.IntArray' type=kotlin.collections.IntIterator origin=null CALL 'public final fun iterator (): kotlin.collections.IntIterator [operator] declared in kotlin.IntArray' type=kotlin.collections.IntIterator origin=null
$this: GET_VAR 'val xs: kotlin.IntArray [val] declared in <root>.testContinueFor' type=kotlin.IntArray origin=null $this: GET_VAR 'val xs: kotlin.IntArray [val] declared in <root>.testContinueFor' type=kotlin.IntArray origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_1: kotlin.collections.IntIterator [val] declared in <root>.testContinueFor' type=kotlin.collections.IntIterator origin=null $this: GET_VAR 'val tmp_1: kotlin.collections.IntIterator [val] declared in <root>.testContinueFor' type=kotlin.collections.IntIterator origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR name:x type:kotlin.Int [val] VAR FOR_LOOP_VARIABLE name:x type:kotlin.Int [val]
CALL 'public final fun next (): kotlin.Int [operator] declared in kotlin.collections.IntIterator' type=kotlin.Int origin=null CALL 'public final fun next (): kotlin.Int [operator] declared in kotlin.collections.IntIterator' type=kotlin.Int origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_1: kotlin.collections.IntIterator [val] declared in <root>.testContinueFor' type=kotlin.collections.IntIterator origin=null $this: GET_VAR 'val tmp_1: kotlin.collections.IntIterator [val] declared in <root>.testContinueFor' type=kotlin.collections.IntIterator origin=null
WHEN type=kotlin.Unit origin=WHEN WHEN type=kotlin.Unit origin=WHEN
BRANCH BRANCH
@@ -4,15 +4,15 @@ FILE fqName:<root> fileName:/withVarargViewedAsArray.kt
BLOCK_BODY BLOCK_BODY
VAR name:result type:kotlin.Int [var] VAR name:result type:kotlin.Int [var]
CONST Int type=kotlin.Int value=0 CONST Int type=kotlin.Int value=0
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:kotlin.collections.IntIterator [val] VAR FOR_LOOP_ITERATOR name:tmp_0 type:kotlin.collections.IntIterator [val]
CALL 'public final fun iterator (): kotlin.collections.IntIterator [operator] declared in kotlin.IntArray' type=kotlin.collections.IntIterator origin=null CALL 'public final fun iterator (): kotlin.collections.IntIterator [operator] declared in kotlin.IntArray' type=kotlin.collections.IntIterator origin=null
$this: GET_VAR 'args: kotlin.IntArray [vararg] declared in <root>.sum' type=kotlin.IntArray origin=null $this: GET_VAR 'args: kotlin.IntArray [vararg] declared in <root>.sum' type=kotlin.IntArray origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_0: kotlin.collections.IntIterator [val] declared in <root>.sum' type=kotlin.collections.IntIterator origin=null $this: GET_VAR 'val tmp_0: kotlin.collections.IntIterator [val] declared in <root>.sum' type=kotlin.collections.IntIterator origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR name:arg type:kotlin.Int [val] VAR FOR_LOOP_VARIABLE name:arg type:kotlin.Int [val]
CALL 'public final fun next (): kotlin.Int [operator] declared in kotlin.collections.IntIterator' type=kotlin.Int origin=null CALL 'public final fun next (): kotlin.Int [operator] declared in kotlin.collections.IntIterator' type=kotlin.Int origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_0: kotlin.collections.IntIterator [val] declared in <root>.sum' type=kotlin.collections.IntIterator origin=null $this: GET_VAR 'val tmp_0: kotlin.collections.IntIterator [val] declared in <root>.sum' type=kotlin.collections.IntIterator origin=null
SET_VAR 'var result: kotlin.Int [var] declared in <root>.sum' type=kotlin.Unit origin=null SET_VAR 'var result: kotlin.Int [var] declared in <root>.sum' type=kotlin.Unit origin=null
CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null CALL 'public final fun plus (other: kotlin.Int): kotlin.Int [operator] declared in kotlin.Int' type=kotlin.Int origin=null
+27 -27
View File
@@ -2,65 +2,65 @@ FILE fqName:<root> fileName:/for.kt
FUN name:testEmpty visibility:public modality:FINAL <> (ss:kotlin.collections.List<kotlin.String>) returnType:kotlin.Unit FUN name:testEmpty visibility:public modality:FINAL <> (ss:kotlin.collections.List<kotlin.String>) returnType:kotlin.Unit
VALUE_PARAMETER name:ss index:0 type:kotlin.collections.List<kotlin.String> VALUE_PARAMETER name:ss index:0 type:kotlin.collections.List<kotlin.String>
BLOCK_BODY BLOCK_BODY
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:kotlin.collections.Iterator<kotlin.String> [val] VAR FOR_LOOP_ITERATOR name:tmp_0 type:kotlin.collections.Iterator<kotlin.String> [val]
CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=null CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
$this: GET_VAR 'ss: kotlin.collections.List<kotlin.String> declared in <root>.testEmpty' type=kotlin.collections.List<kotlin.String> origin=null $this: GET_VAR 'ss: kotlin.collections.List<kotlin.String> declared in <root>.testEmpty' type=kotlin.collections.List<kotlin.String> origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_0: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testEmpty' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_0: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testEmpty' type=kotlin.collections.Iterator<kotlin.String> origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR name:s type:kotlin.String [val] VAR FOR_LOOP_VARIABLE name:s type:kotlin.String [val]
CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=null CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_0: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testEmpty' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_0: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testEmpty' type=kotlin.collections.Iterator<kotlin.String> origin=null
FUN name:testIterable visibility:public modality:FINAL <> (ss:kotlin.collections.List<kotlin.String>) returnType:kotlin.Unit FUN name:testIterable visibility:public modality:FINAL <> (ss:kotlin.collections.List<kotlin.String>) returnType:kotlin.Unit
VALUE_PARAMETER name:ss index:0 type:kotlin.collections.List<kotlin.String> VALUE_PARAMETER name:ss index:0 type:kotlin.collections.List<kotlin.String>
BLOCK_BODY BLOCK_BODY
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:kotlin.collections.Iterator<kotlin.String> [val] VAR FOR_LOOP_ITERATOR name:tmp_1 type:kotlin.collections.Iterator<kotlin.String> [val]
CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=null CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
$this: GET_VAR 'ss: kotlin.collections.List<kotlin.String> declared in <root>.testIterable' type=kotlin.collections.List<kotlin.String> origin=null $this: GET_VAR 'ss: kotlin.collections.List<kotlin.String> declared in <root>.testIterable' type=kotlin.collections.List<kotlin.String> origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_1: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testIterable' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_1: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testIterable' type=kotlin.collections.Iterator<kotlin.String> origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR name:s type:kotlin.String [val] VAR FOR_LOOP_VARIABLE name:s type:kotlin.String [val]
CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=null CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_1: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testIterable' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_1: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testIterable' type=kotlin.collections.Iterator<kotlin.String> origin=null
CALL 'public final fun println (message: kotlin.Any?): kotlin.Unit [inline] declared in kotlin.io' type=kotlin.Unit origin=null CALL 'public final fun println (message: kotlin.Any?): kotlin.Unit [inline] declared in kotlin.io' type=kotlin.Unit origin=null
message: GET_VAR 'val s: kotlin.String [val] declared in <root>.testIterable' type=kotlin.String origin=null message: GET_VAR 'val s: kotlin.String [val] declared in <root>.testIterable' type=kotlin.String origin=null
FUN name:testDestructuring visibility:public modality:FINAL <> (pp:kotlin.collections.List<kotlin.Pair<kotlin.Int, kotlin.String>>) returnType:kotlin.Unit FUN name:testDestructuring visibility:public modality:FINAL <> (pp:kotlin.collections.List<kotlin.Pair<kotlin.Int, kotlin.String>>) returnType:kotlin.Unit
VALUE_PARAMETER name:pp index:0 type:kotlin.collections.List<kotlin.Pair<kotlin.Int, kotlin.String>> VALUE_PARAMETER name:pp index:0 type:kotlin.collections.List<kotlin.Pair<kotlin.Int, kotlin.String>>
BLOCK_BODY BLOCK_BODY
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> [val] VAR FOR_LOOP_ITERATOR name:tmp_2 type:kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> [val]
CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> origin=null CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> origin=FOR_LOOP_ITERATOR
$this: GET_VAR 'pp: kotlin.collections.List<kotlin.Pair<kotlin.Int, kotlin.String>> declared in <root>.testDestructuring' type=kotlin.collections.List<kotlin.Pair<kotlin.Int, kotlin.String>> origin=null $this: GET_VAR 'pp: kotlin.collections.List<kotlin.Pair<kotlin.Int, kotlin.String>> declared in <root>.testDestructuring' type=kotlin.collections.List<kotlin.Pair<kotlin.Int, kotlin.String>> origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_2: kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> [val] declared in <root>.testDestructuring' type=kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> origin=null $this: GET_VAR 'val tmp_2: kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> [val] declared in <root>.testDestructuring' type=kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.Pair<kotlin.Int, kotlin.String> [val] VAR FOR_LOOP_VARIABLE name:<destruct> type:kotlin.Pair<kotlin.Int, kotlin.String> [val]
CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.Pair<kotlin.Int, kotlin.String> origin=null CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.Pair<kotlin.Int, kotlin.String> origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_2: kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> [val] declared in <root>.testDestructuring' type=kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> origin=null $this: GET_VAR 'val tmp_2: kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> [val] declared in <root>.testDestructuring' type=kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> origin=null
VAR name:i type:kotlin.Int [val] VAR name:i type:kotlin.Int [val]
CALL 'public final fun component1 (): kotlin.Int [operator] declared in kotlin.Pair' type=kotlin.Int origin=null CALL 'public final fun component1 (): kotlin.Int [operator] declared in kotlin.Pair' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_3: kotlin.Pair<kotlin.Int, kotlin.String> [val] declared in <root>.testDestructuring' type=kotlin.Pair<kotlin.Int, kotlin.String> origin=null $this: GET_VAR 'val <destruct>: kotlin.Pair<kotlin.Int, kotlin.String> [val] declared in <root>.testDestructuring' type=kotlin.Pair<kotlin.Int, kotlin.String> origin=null
VAR name:s type:kotlin.String [val] VAR name:s type:kotlin.String [val]
CALL 'public final fun component2 (): kotlin.String [operator] declared in kotlin.Pair' type=kotlin.String origin=null CALL 'public final fun component2 (): kotlin.String [operator] declared in kotlin.Pair' type=kotlin.String origin=null
$this: GET_VAR 'val tmp_3: kotlin.Pair<kotlin.Int, kotlin.String> [val] declared in <root>.testDestructuring' type=kotlin.Pair<kotlin.Int, kotlin.String> origin=null $this: GET_VAR 'val <destruct>: kotlin.Pair<kotlin.Int, kotlin.String> [val] declared in <root>.testDestructuring' type=kotlin.Pair<kotlin.Int, kotlin.String> origin=null
CALL 'public final fun println (message: kotlin.Int): kotlin.Unit [inline] declared in kotlin.io' type=kotlin.Unit origin=null CALL 'public final fun println (message: kotlin.Int): kotlin.Unit [inline] declared in kotlin.io' type=kotlin.Unit origin=null
message: GET_VAR 'val i: kotlin.Int [val] declared in <root>.testDestructuring' type=kotlin.Int origin=null message: GET_VAR 'val i: kotlin.Int [val] declared in <root>.testDestructuring' type=kotlin.Int origin=null
CALL 'public final fun println (message: kotlin.Any?): kotlin.Unit [inline] declared in kotlin.io' type=kotlin.Unit origin=null CALL 'public final fun println (message: kotlin.Any?): kotlin.Unit [inline] declared in kotlin.io' type=kotlin.Unit origin=null
message: GET_VAR 'val s: kotlin.String [val] declared in <root>.testDestructuring' type=kotlin.String origin=null message: GET_VAR 'val s: kotlin.String [val] declared in <root>.testDestructuring' type=kotlin.String origin=null
FUN name:testRange visibility:public modality:FINAL <> () returnType:kotlin.Unit FUN name:testRange visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY BLOCK_BODY
VAR IR_TEMPORARY_VARIABLE name:tmp_4 type:kotlin.collections.IntIterator [val] VAR FOR_LOOP_ITERATOR name:tmp_3 type:kotlin.collections.IntIterator [val]
CALL 'public open fun iterator (): kotlin.collections.IntIterator [operator] declared in kotlin.ranges.IntProgression' type=kotlin.collections.IntIterator origin=null CALL 'public open fun iterator (): kotlin.collections.IntIterator [operator] declared in kotlin.ranges.IntProgression' type=kotlin.collections.IntIterator origin=null
$this: CALL 'public final fun rangeTo (other: kotlin.Int): kotlin.ranges.IntRange [operator] declared in kotlin.Int' type=kotlin.ranges.IntRange origin=null $this: CALL 'public final fun rangeTo (other: kotlin.Int): kotlin.ranges.IntRange [operator] declared in kotlin.Int' type=kotlin.ranges.IntRange origin=null
$this: CONST Int type=kotlin.Int value=1 $this: CONST Int type=kotlin.Int value=1
other: CONST Int type=kotlin.Int value=10 other: CONST Int type=kotlin.Int value=10
WHILE label=null origin=FOR_LOOP_INNER_WHILE WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_4: kotlin.collections.IntIterator [val] declared in <root>.testRange' type=kotlin.collections.IntIterator origin=null $this: GET_VAR 'val tmp_3: kotlin.collections.IntIterator [val] declared in <root>.testRange' type=kotlin.collections.IntIterator origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR name:i type:kotlin.Int [val] VAR FOR_LOOP_VARIABLE name:i type:kotlin.Int [val]
CALL 'public final fun next (): kotlin.Int [operator] declared in kotlin.collections.IntIterator' type=kotlin.Int origin=null CALL 'public final fun next (): kotlin.Int [operator] declared in kotlin.collections.IntIterator' type=kotlin.Int origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_4: kotlin.collections.IntIterator [val] declared in <root>.testRange' type=kotlin.collections.IntIterator origin=null $this: GET_VAR 'val tmp_3: kotlin.collections.IntIterator [val] declared in <root>.testRange' type=kotlin.collections.IntIterator origin=null
@@ -2,39 +2,39 @@ FILE fqName:<root> fileName:/forWithBreakContinue.kt
FUN name:testForBreak1 visibility:public modality:FINAL <> (ss:kotlin.collections.List<kotlin.String>) returnType:kotlin.Unit FUN name:testForBreak1 visibility:public modality:FINAL <> (ss:kotlin.collections.List<kotlin.String>) returnType:kotlin.Unit
VALUE_PARAMETER name:ss index:0 type:kotlin.collections.List<kotlin.String> VALUE_PARAMETER name:ss index:0 type:kotlin.collections.List<kotlin.String>
BLOCK_BODY BLOCK_BODY
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:kotlin.collections.Iterator<kotlin.String> [val] VAR FOR_LOOP_ITERATOR name:tmp_0 type:kotlin.collections.Iterator<kotlin.String> [val]
CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=null CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
$this: GET_VAR 'ss: kotlin.collections.List<kotlin.String> declared in <root>.testForBreak1' type=kotlin.collections.List<kotlin.String> origin=null $this: GET_VAR 'ss: kotlin.collections.List<kotlin.String> declared in <root>.testForBreak1' type=kotlin.collections.List<kotlin.String> origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_0: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForBreak1' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_0: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForBreak1' type=kotlin.collections.Iterator<kotlin.String> origin=null
body: BLOCK type=kotlin.Nothing origin=null body: BLOCK type=kotlin.Nothing origin=FOR_LOOP_INNER_WHILE
VAR name:s type:kotlin.String [val] VAR FOR_LOOP_VARIABLE name:s type:kotlin.String [val]
CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=null CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_0: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForBreak1' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_0: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForBreak1' type=kotlin.collections.Iterator<kotlin.String> origin=null
BREAK label=null loop.label=null BREAK label=null loop.label=null
FUN name:testForBreak2 visibility:public modality:FINAL <> (ss:kotlin.collections.List<kotlin.String>) returnType:kotlin.Unit FUN name:testForBreak2 visibility:public modality:FINAL <> (ss:kotlin.collections.List<kotlin.String>) returnType:kotlin.Unit
VALUE_PARAMETER name:ss index:0 type:kotlin.collections.List<kotlin.String> VALUE_PARAMETER name:ss index:0 type:kotlin.collections.List<kotlin.String>
BLOCK_BODY BLOCK_BODY
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:kotlin.collections.Iterator<kotlin.String> [val] VAR FOR_LOOP_ITERATOR name:tmp_1 type:kotlin.collections.Iterator<kotlin.String> [val]
CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=null CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
$this: GET_VAR 'ss: kotlin.collections.List<kotlin.String> declared in <root>.testForBreak2' type=kotlin.collections.List<kotlin.String> origin=null $this: GET_VAR 'ss: kotlin.collections.List<kotlin.String> declared in <root>.testForBreak2' type=kotlin.collections.List<kotlin.String> origin=null
WHILE label=OUTER origin=FOR_LOOP_INNER_WHILE WHILE label=OUTER origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_1: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForBreak2' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_1: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForBreak2' type=kotlin.collections.Iterator<kotlin.String> origin=null
body: BLOCK type=kotlin.Nothing origin=null body: BLOCK type=kotlin.Nothing origin=FOR_LOOP_INNER_WHILE
VAR name:s1 type:kotlin.String [val] VAR FOR_LOOP_VARIABLE name:s1 type:kotlin.String [val]
CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=null CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_1: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForBreak2' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_1: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForBreak2' type=kotlin.collections.Iterator<kotlin.String> origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:kotlin.collections.Iterator<kotlin.String> [val] VAR FOR_LOOP_ITERATOR name:tmp_2 type:kotlin.collections.Iterator<kotlin.String> [val]
CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=null CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
$this: GET_VAR 'ss: kotlin.collections.List<kotlin.String> declared in <root>.testForBreak2' type=kotlin.collections.List<kotlin.String> origin=null $this: GET_VAR 'ss: kotlin.collections.List<kotlin.String> declared in <root>.testForBreak2' type=kotlin.collections.List<kotlin.String> origin=null
WHILE label=INNER origin=FOR_LOOP_INNER_WHILE WHILE label=INNER origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_2: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForBreak2' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_2: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForBreak2' type=kotlin.collections.Iterator<kotlin.String> origin=null
body: BLOCK type=kotlin.Nothing origin=null body: BLOCK type=kotlin.Nothing origin=FOR_LOOP_INNER_WHILE
VAR name:s2 type:kotlin.String [val] VAR FOR_LOOP_VARIABLE name:s2 type:kotlin.String [val]
CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=null CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_2: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForBreak2' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_2: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForBreak2' type=kotlin.collections.Iterator<kotlin.String> origin=null
BREAK label=OUTER loop.label=OUTER BREAK label=OUTER loop.label=OUTER
BREAK label=INNER loop.label=INNER BREAK label=INNER loop.label=INNER
@@ -43,39 +43,39 @@ FILE fqName:<root> fileName:/forWithBreakContinue.kt
FUN name:testForContinue1 visibility:public modality:FINAL <> (ss:kotlin.collections.List<kotlin.String>) returnType:kotlin.Unit FUN name:testForContinue1 visibility:public modality:FINAL <> (ss:kotlin.collections.List<kotlin.String>) returnType:kotlin.Unit
VALUE_PARAMETER name:ss index:0 type:kotlin.collections.List<kotlin.String> VALUE_PARAMETER name:ss index:0 type:kotlin.collections.List<kotlin.String>
BLOCK_BODY BLOCK_BODY
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.collections.Iterator<kotlin.String> [val] VAR FOR_LOOP_ITERATOR name:tmp_3 type:kotlin.collections.Iterator<kotlin.String> [val]
CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=null CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
$this: GET_VAR 'ss: kotlin.collections.List<kotlin.String> declared in <root>.testForContinue1' type=kotlin.collections.List<kotlin.String> origin=null $this: GET_VAR 'ss: kotlin.collections.List<kotlin.String> declared in <root>.testForContinue1' type=kotlin.collections.List<kotlin.String> origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_3: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForContinue1' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_3: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForContinue1' type=kotlin.collections.Iterator<kotlin.String> origin=null
body: BLOCK type=kotlin.Nothing origin=null body: BLOCK type=kotlin.Nothing origin=FOR_LOOP_INNER_WHILE
VAR name:s type:kotlin.String [val] VAR FOR_LOOP_VARIABLE name:s type:kotlin.String [val]
CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=null CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_3: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForContinue1' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_3: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForContinue1' type=kotlin.collections.Iterator<kotlin.String> origin=null
CONTINUE label=null loop.label=null CONTINUE label=null loop.label=null
FUN name:testForContinue2 visibility:public modality:FINAL <> (ss:kotlin.collections.List<kotlin.String>) returnType:kotlin.Unit FUN name:testForContinue2 visibility:public modality:FINAL <> (ss:kotlin.collections.List<kotlin.String>) returnType:kotlin.Unit
VALUE_PARAMETER name:ss index:0 type:kotlin.collections.List<kotlin.String> VALUE_PARAMETER name:ss index:0 type:kotlin.collections.List<kotlin.String>
BLOCK_BODY BLOCK_BODY
VAR IR_TEMPORARY_VARIABLE name:tmp_4 type:kotlin.collections.Iterator<kotlin.String> [val] VAR FOR_LOOP_ITERATOR name:tmp_4 type:kotlin.collections.Iterator<kotlin.String> [val]
CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=null CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
$this: GET_VAR 'ss: kotlin.collections.List<kotlin.String> declared in <root>.testForContinue2' type=kotlin.collections.List<kotlin.String> origin=null $this: GET_VAR 'ss: kotlin.collections.List<kotlin.String> declared in <root>.testForContinue2' type=kotlin.collections.List<kotlin.String> origin=null
WHILE label=OUTER origin=FOR_LOOP_INNER_WHILE WHILE label=OUTER origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_4: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForContinue2' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_4: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForContinue2' type=kotlin.collections.Iterator<kotlin.String> origin=null
body: BLOCK type=kotlin.Nothing origin=null body: BLOCK type=kotlin.Nothing origin=FOR_LOOP_INNER_WHILE
VAR name:s1 type:kotlin.String [val] VAR FOR_LOOP_VARIABLE name:s1 type:kotlin.String [val]
CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=null CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_4: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForContinue2' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_4: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForContinue2' type=kotlin.collections.Iterator<kotlin.String> origin=null
VAR IR_TEMPORARY_VARIABLE name:tmp_5 type:kotlin.collections.Iterator<kotlin.String> [val] VAR FOR_LOOP_ITERATOR name:tmp_5 type:kotlin.collections.Iterator<kotlin.String> [val]
CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=null CALL 'public abstract fun iterator (): kotlin.collections.Iterator<kotlin.String> [operator] declared in kotlin.collections.List' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
$this: GET_VAR 'ss: kotlin.collections.List<kotlin.String> declared in <root>.testForContinue2' type=kotlin.collections.List<kotlin.String> origin=null $this: GET_VAR 'ss: kotlin.collections.List<kotlin.String> declared in <root>.testForContinue2' type=kotlin.collections.List<kotlin.String> origin=null
WHILE label=INNER origin=FOR_LOOP_INNER_WHILE WHILE label=INNER origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_5: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForContinue2' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_5: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForContinue2' type=kotlin.collections.Iterator<kotlin.String> origin=null
body: BLOCK type=kotlin.Nothing origin=null body: BLOCK type=kotlin.Nothing origin=FOR_LOOP_INNER_WHILE
VAR name:s2 type:kotlin.String [val] VAR FOR_LOOP_VARIABLE name:s2 type:kotlin.String [val]
CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=null CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=kotlin.String origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_5: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForContinue2' type=kotlin.collections.Iterator<kotlin.String> origin=null $this: GET_VAR 'val tmp_5: kotlin.collections.Iterator<kotlin.String> [val] declared in <root>.testForContinue2' type=kotlin.collections.Iterator<kotlin.String> origin=null
CONTINUE label=OUTER loop.label=OUTER CONTINUE label=OUTER loop.label=OUTER
CONTINUE label=INNER loop.label=INNER CONTINUE label=INNER loop.label=INNER
@@ -105,13 +105,13 @@ FILE fqName:<root> fileName:/forWithImplicitReceivers.kt
FUN name:test visibility:public modality:FINAL <> ($receiver:<root>.IReceiver) returnType:kotlin.Unit FUN name:test visibility:public modality:FINAL <> ($receiver:<root>.IReceiver) returnType:kotlin.Unit
$receiver: VALUE_PARAMETER name:<this> type:<root>.IReceiver $receiver: VALUE_PARAMETER name:<this> type:<root>.IReceiver
BLOCK_BODY BLOCK_BODY
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:<root>.IntCell [val] VAR FOR_LOOP_ITERATOR name:tmp_1 type:<root>.IntCell [val]
CALL 'public open fun iterator (): <root>.IntCell [operator] declared in <root>.IReceiver' type=<root>.IntCell origin=null CALL 'public open fun iterator (): <root>.IntCell [operator] declared in <root>.IReceiver' type=<root>.IntCell origin=null
$this: GET_VAR '<this>: <root>.IReceiver declared in <root>.test' type=<root>.IReceiver origin=null $this: GET_VAR '<this>: <root>.IReceiver declared in <root>.test' type=<root>.IReceiver origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public open fun hasNext (): kotlin.Boolean [operator] declared in <root>.IReceiver' type=kotlin.Boolean origin=null condition: CALL 'public open fun hasNext (): kotlin.Boolean [operator] declared in <root>.IReceiver' type=kotlin.Boolean origin=null
$this: GET_VAR '<this>: <root>.IReceiver declared in <root>.test' type=<root>.IReceiver origin=null $this: GET_VAR '<this>: <root>.IReceiver declared in <root>.test' type=<root>.IReceiver origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR name:i type:kotlin.Int [val] VAR name:i type:kotlin.Int [val]
CALL 'public open fun next (): kotlin.Int [operator] declared in <root>.IReceiver' type=kotlin.Int origin=null CALL 'public open fun next (): kotlin.Int [operator] declared in <root>.IReceiver' type=kotlin.Int origin=null
$this: GET_VAR '<this>: <root>.IReceiver declared in <root>.test' type=<root>.IReceiver origin=null $this: GET_VAR '<this>: <root>.IReceiver declared in <root>.test' type=<root>.IReceiver origin=null
@@ -7,7 +7,7 @@ FILE fqName:<root> fileName:/whileDoWhile.kt
condition: CALL 'public final fun less (arg0: kotlin.Int, arg1: kotlin.Int): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=LT condition: CALL 'public final fun less (arg0: kotlin.Int, arg1: kotlin.Int): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=LT
arg0: GET_VAR 'var x: kotlin.Int [var] declared in <root>.test' type=kotlin.Int origin=null arg0: GET_VAR 'var x: kotlin.Int [var] declared in <root>.test' type=kotlin.Int origin=null
arg1: CONST Int type=kotlin.Int value=0 arg1: CONST Int type=kotlin.Int value=0
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=WHILE_LOOP
WHILE label=null origin=WHILE_LOOP WHILE label=null origin=WHILE_LOOP
condition: CALL 'public final fun less (arg0: kotlin.Int, arg1: kotlin.Int): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=LT condition: CALL 'public final fun less (arg0: kotlin.Int, arg1: kotlin.Int): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=LT
arg0: GET_VAR 'var x: kotlin.Int [var] declared in <root>.test' type=kotlin.Int origin=null arg0: GET_VAR 'var x: kotlin.Int [var] declared in <root>.test' type=kotlin.Int origin=null
@@ -23,7 +23,7 @@ FILE fqName:<root> fileName:/whileDoWhile.kt
condition: CALL 'public final fun less (arg0: kotlin.Int, arg1: kotlin.Int): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=LT condition: CALL 'public final fun less (arg0: kotlin.Int, arg1: kotlin.Int): kotlin.Boolean declared in kotlin.internal.ir' type=kotlin.Boolean origin=LT
arg0: GET_VAR 'var x: kotlin.Int [var] declared in <root>.test' type=kotlin.Int origin=null arg0: GET_VAR 'var x: kotlin.Int [var] declared in <root>.test' type=kotlin.Int origin=null
arg1: CONST Int type=kotlin.Int value=10 arg1: CONST Int type=kotlin.Int value=10
body: BLOCK type=kotlin.Int origin=null body: BLOCK type=kotlin.Int origin=WHILE_LOOP
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:kotlin.Int [val] VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:kotlin.Int [val]
GET_VAR 'var x: kotlin.Int [var] declared in <root>.test' type=kotlin.Int origin=null GET_VAR 'var x: kotlin.Int [var] declared in <root>.test' type=kotlin.Int origin=null
SET_VAR 'var x: kotlin.Int [var] declared in <root>.test' type=kotlin.Unit origin=null SET_VAR 'var x: kotlin.Int [var] declared in <root>.test' type=kotlin.Unit origin=null
@@ -69,7 +69,7 @@ FILE fqName:<root> fileName:/whileDoWhile.kt
WHILE label=null origin=WHILE_LOOP WHILE label=null origin=WHILE_LOOP
condition: TYPE_OP type=kotlin.Boolean origin=IMPLICIT_CAST typeOperand=kotlin.Boolean condition: TYPE_OP type=kotlin.Boolean origin=IMPLICIT_CAST typeOperand=kotlin.Boolean
GET_VAR 'val a: kotlin.Any? [val] declared in <root>.testSmartcastInCondition' type=kotlin.Any? origin=null GET_VAR 'val a: kotlin.Any? [val] declared in <root>.testSmartcastInCondition' type=kotlin.Any? origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=WHILE_LOOP
DO_WHILE label=null origin=DO_WHILE_LOOP DO_WHILE label=null origin=DO_WHILE_LOOP
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=null
condition: TYPE_OP type=kotlin.Boolean origin=IMPLICIT_CAST typeOperand=kotlin.Boolean condition: TYPE_OP type=kotlin.Boolean origin=IMPLICIT_CAST typeOperand=kotlin.Boolean
@@ -12,7 +12,7 @@ FILE fqName:<root> fileName:/coercionInLoop.kt
WHILE label=null origin=WHILE_LOOP WHILE label=null origin=WHILE_LOOP
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null
$this: GET_VAR 'val x: kotlin.collections.DoubleIterator [val] declared in <root>.box' type=kotlin.collections.DoubleIterator origin=null $this: GET_VAR 'val x: kotlin.collections.DoubleIterator [val] declared in <root>.box' type=kotlin.collections.DoubleIterator origin=null
body: BLOCK type=kotlin.Int origin=null body: BLOCK type=kotlin.Int origin=WHILE_LOOP
WHEN type=kotlin.Unit origin=IF WHEN type=kotlin.Unit origin=IF
BRANCH BRANCH
if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ if: CALL 'public final fun not (): kotlin.Boolean [operator] declared in kotlin.Boolean' type=kotlin.Boolean origin=EXCLEQ
@@ -4,34 +4,34 @@ FILE fqName:<root> fileName:/enhancedNullabilityInForLoop.kt
BLOCK_BODY BLOCK_BODY
FUN name:testForInListUnused visibility:public modality:FINAL <> () returnType:kotlin.Unit FUN name:testForInListUnused visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY BLOCK_BODY
VAR IR_TEMPORARY_VARIABLE name:tmp_0 type:kotlin.collections.MutableIterator<<root>.P> [val] VAR FOR_LOOP_ITERATOR name:tmp_0 type:kotlin.collections.MutableIterator<<root>.P> [val]
CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<<root>.P> [operator] declared in kotlin.collections.MutableCollection' type=kotlin.collections.MutableIterator<<root>.P> origin=null CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<<root>.P> [operator] declared in kotlin.collections.MutableCollection' type=kotlin.collections.MutableIterator<<root>.P> origin=FOR_LOOP_ITERATOR
$this: CALL 'public open fun listOfNotNull (): kotlin.collections.List<<root>.P>? [operator] declared in <root>.J' type=kotlin.collections.List<<root>.P>? origin=null $this: CALL 'public open fun listOfNotNull (): kotlin.collections.List<<root>.P>? [operator] declared in <root>.J' type=kotlin.collections.List<<root>.P>? origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_0: kotlin.collections.MutableIterator<<root>.P> [val] declared in <root>.testForInListUnused' type=kotlin.collections.MutableIterator<<root>.P> origin=null $this: GET_VAR 'val tmp_0: kotlin.collections.MutableIterator<<root>.P> [val] declared in <root>.testForInListUnused' type=kotlin.collections.MutableIterator<<root>.P> origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR name:x type:<root>.P [val] VAR FOR_LOOP_VARIABLE name:x type:<root>.P [val]
CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [operator] declared in kotlin.collections.Iterator' type=<root>.P origin=null CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [operator] declared in kotlin.collections.Iterator' type=<root>.P origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_0: kotlin.collections.MutableIterator<<root>.P> [val] declared in <root>.testForInListUnused' type=kotlin.collections.MutableIterator<<root>.P> origin=null $this: GET_VAR 'val tmp_0: kotlin.collections.MutableIterator<<root>.P> [val] declared in <root>.testForInListUnused' type=kotlin.collections.MutableIterator<<root>.P> origin=null
FUN name:testForInListDestructured visibility:public modality:FINAL <> () returnType:kotlin.Unit FUN name:testForInListDestructured visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY BLOCK_BODY
VAR IR_TEMPORARY_VARIABLE name:tmp_1 type:kotlin.collections.MutableIterator<<root>.P> [val] VAR FOR_LOOP_ITERATOR name:tmp_1 type:kotlin.collections.MutableIterator<<root>.P> [val]
CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<<root>.P> [operator] declared in kotlin.collections.MutableCollection' type=kotlin.collections.MutableIterator<<root>.P> origin=null CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<<root>.P> [operator] declared in kotlin.collections.MutableCollection' type=kotlin.collections.MutableIterator<<root>.P> origin=FOR_LOOP_ITERATOR
$this: CALL 'public open fun listOfNotNull (): kotlin.collections.List<<root>.P>? [operator] declared in <root>.J' type=kotlin.collections.List<<root>.P>? origin=null $this: CALL 'public open fun listOfNotNull (): kotlin.collections.List<<root>.P>? [operator] declared in <root>.J' type=kotlin.collections.List<<root>.P>? origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_1: kotlin.collections.MutableIterator<<root>.P> [val] declared in <root>.testForInListDestructured' type=kotlin.collections.MutableIterator<<root>.P> origin=null $this: GET_VAR 'val tmp_1: kotlin.collections.MutableIterator<<root>.P> [val] declared in <root>.testForInListDestructured' type=kotlin.collections.MutableIterator<<root>.P> origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR IR_TEMPORARY_VARIABLE name:tmp_2 type:<root>.P [val] VAR FOR_LOOP_VARIABLE name:<destruct> type:<root>.P [val]
CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [operator] declared in kotlin.collections.Iterator' type=<root>.P origin=null CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [operator] declared in kotlin.collections.Iterator' type=<root>.P origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_1: kotlin.collections.MutableIterator<<root>.P> [val] declared in <root>.testForInListDestructured' type=kotlin.collections.MutableIterator<<root>.P> origin=null $this: GET_VAR 'val tmp_1: kotlin.collections.MutableIterator<<root>.P> [val] declared in <root>.testForInListDestructured' type=kotlin.collections.MutableIterator<<root>.P> origin=null
VAR name:x type:kotlin.Int [val] VAR name:x type:kotlin.Int [val]
CALL 'public final fun component1 (): kotlin.Int declared in <root>.P' type=kotlin.Int origin=null CALL 'public final fun component1 (): kotlin.Int declared in <root>.P' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_2: <root>.P [val] declared in <root>.testForInListDestructured' type=<root>.P origin=null $this: GET_VAR 'val <destruct>: <root>.P [val] declared in <root>.testForInListDestructured' type=<root>.P origin=null
VAR name:y type:kotlin.Int [val] VAR name:y type:kotlin.Int [val]
CALL 'public final fun component2 (): kotlin.Int declared in <root>.P' type=kotlin.Int origin=null CALL 'public final fun component2 (): kotlin.Int declared in <root>.P' type=kotlin.Int origin=null
$this: GET_VAR 'val tmp_2: <root>.P [val] declared in <root>.testForInListDestructured' type=<root>.P origin=null $this: GET_VAR 'val <destruct>: <root>.P [val] declared in <root>.testForInListDestructured' type=<root>.P origin=null
FUN name:testDesugaredForInList visibility:public modality:FINAL <> () returnType:kotlin.Unit FUN name:testDesugaredForInList visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY BLOCK_BODY
VAR name:iterator type:kotlin.collections.MutableIterator<<root>.P> [val] VAR name:iterator type:kotlin.collections.MutableIterator<<root>.P> [val]
@@ -40,36 +40,36 @@ FILE fqName:<root> fileName:/enhancedNullabilityInForLoop.kt
WHILE label=null origin=WHILE_LOOP WHILE label=null origin=WHILE_LOOP
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null
$this: GET_VAR 'val iterator: kotlin.collections.MutableIterator<<root>.P> [val] declared in <root>.testDesugaredForInList' type=kotlin.collections.MutableIterator<<root>.P> origin=null $this: GET_VAR 'val iterator: kotlin.collections.MutableIterator<<root>.P> [val] declared in <root>.testDesugaredForInList' type=kotlin.collections.MutableIterator<<root>.P> origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=WHILE_LOOP
VAR name:x type:<root>.P [val] VAR name:x type:<root>.P [val]
CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [operator] declared in kotlin.collections.Iterator' type=<root>.P origin=null CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [operator] declared in kotlin.collections.Iterator' type=<root>.P origin=null
$this: GET_VAR 'val iterator: kotlin.collections.MutableIterator<<root>.P> [val] declared in <root>.testDesugaredForInList' type=kotlin.collections.MutableIterator<<root>.P> origin=null $this: GET_VAR 'val iterator: kotlin.collections.MutableIterator<<root>.P> [val] declared in <root>.testDesugaredForInList' type=kotlin.collections.MutableIterator<<root>.P> origin=null
FUN name:testForInArrayUnused visibility:public modality:FINAL <> (j:<root>.J) returnType:kotlin.Unit FUN name:testForInArrayUnused visibility:public modality:FINAL <> (j:<root>.J) returnType:kotlin.Unit
VALUE_PARAMETER name:j index:0 type:<root>.J VALUE_PARAMETER name:j index:0 type:<root>.J
BLOCK_BODY BLOCK_BODY
VAR IR_TEMPORARY_VARIABLE name:tmp_3 type:kotlin.collections.Iterator<<root>.P?> [val] VAR FOR_LOOP_ITERATOR name:tmp_2 type:kotlin.collections.Iterator<<root>.P?> [val]
CALL 'public final fun iterator (): kotlin.collections.Iterator<<root>.P?> [operator] declared in kotlin.Array' type=kotlin.collections.Iterator<<root>.P?> origin=null CALL 'public final fun iterator (): kotlin.collections.Iterator<<root>.P?> [operator] declared in kotlin.Array' type=kotlin.collections.Iterator<<root>.P?> origin=null
$this: CALL 'public open fun arrayOfNotNull (): kotlin.Array<out <root>.P?>? [operator] declared in <root>.J' type=kotlin.Array<out <root>.P?>? origin=null $this: CALL 'public open fun arrayOfNotNull (): kotlin.Array<out <root>.P?>? [operator] declared in <root>.J' type=kotlin.Array<out <root>.P?>? origin=null
$this: GET_VAR 'j: <root>.J declared in <root>.testForInArrayUnused' type=<root>.J origin=null $this: GET_VAR 'j: <root>.J declared in <root>.testForInArrayUnused' type=<root>.J origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_3: kotlin.collections.Iterator<<root>.P?> [val] declared in <root>.testForInArrayUnused' type=kotlin.collections.Iterator<<root>.P?> origin=null $this: GET_VAR 'val tmp_2: kotlin.collections.Iterator<<root>.P?> [val] declared in <root>.testForInArrayUnused' type=kotlin.collections.Iterator<<root>.P?> origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR name:x type:<root>.P? [val] VAR FOR_LOOP_VARIABLE name:x type:<root>.P? [val]
CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=<root>.P? origin=null CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=<root>.P? origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_3: kotlin.collections.Iterator<<root>.P?> [val] declared in <root>.testForInArrayUnused' type=kotlin.collections.Iterator<<root>.P?> origin=null $this: GET_VAR 'val tmp_2: kotlin.collections.Iterator<<root>.P?> [val] declared in <root>.testForInArrayUnused' type=kotlin.collections.Iterator<<root>.P?> origin=null
FUN name:testForInListUse visibility:public modality:FINAL <> () returnType:kotlin.Unit FUN name:testForInListUse visibility:public modality:FINAL <> () returnType:kotlin.Unit
BLOCK_BODY BLOCK_BODY
VAR IR_TEMPORARY_VARIABLE name:tmp_4 type:kotlin.collections.MutableIterator<<root>.P> [val] VAR FOR_LOOP_ITERATOR name:tmp_3 type:kotlin.collections.MutableIterator<<root>.P> [val]
CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<<root>.P> [operator] declared in kotlin.collections.MutableCollection' type=kotlin.collections.MutableIterator<<root>.P> origin=null CALL 'public abstract fun iterator (): kotlin.collections.MutableIterator<<root>.P> [operator] declared in kotlin.collections.MutableCollection' type=kotlin.collections.MutableIterator<<root>.P> origin=FOR_LOOP_ITERATOR
$this: CALL 'public open fun listOfNotNull (): kotlin.collections.List<<root>.P>? [operator] declared in <root>.J' type=kotlin.collections.List<<root>.P>? origin=null $this: CALL 'public open fun listOfNotNull (): kotlin.collections.List<<root>.P>? [operator] declared in <root>.J' type=kotlin.collections.List<<root>.P>? origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_4: kotlin.collections.MutableIterator<<root>.P> [val] declared in <root>.testForInListUse' type=kotlin.collections.MutableIterator<<root>.P> origin=null $this: GET_VAR 'val tmp_3: kotlin.collections.MutableIterator<<root>.P> [val] declared in <root>.testForInListUse' type=kotlin.collections.MutableIterator<<root>.P> origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR name:x type:<root>.P [val] VAR FOR_LOOP_VARIABLE name:x type:<root>.P [val]
CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [operator] declared in kotlin.collections.Iterator' type=<root>.P origin=null CALL 'public abstract fun next (): T of kotlin.collections.MutableIterator [operator] declared in kotlin.collections.Iterator' type=<root>.P origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_4: kotlin.collections.MutableIterator<<root>.P> [val] declared in <root>.testForInListUse' type=kotlin.collections.MutableIterator<<root>.P> origin=null $this: GET_VAR 'val tmp_3: kotlin.collections.MutableIterator<<root>.P> [val] declared in <root>.testForInListUse' type=kotlin.collections.MutableIterator<<root>.P> origin=null
CALL 'public final fun use (s: <root>.P): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null CALL 'public final fun use (s: <root>.P): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
s: GET_VAR 'val x: <root>.P [val] declared in <root>.testForInListUse' type=<root>.P origin=null s: GET_VAR 'val x: <root>.P [val] declared in <root>.testForInListUse' type=<root>.P origin=null
CALL 'public open fun use (s: <root>.P): kotlin.Unit [operator] declared in <root>.J' type=kotlin.Unit origin=null CALL 'public open fun use (s: <root>.P): kotlin.Unit [operator] declared in <root>.J' type=kotlin.Unit origin=null
@@ -77,17 +77,17 @@ FILE fqName:<root> fileName:/enhancedNullabilityInForLoop.kt
FUN name:testForInArrayUse visibility:public modality:FINAL <> (j:<root>.J) returnType:kotlin.Unit FUN name:testForInArrayUse visibility:public modality:FINAL <> (j:<root>.J) returnType:kotlin.Unit
VALUE_PARAMETER name:j index:0 type:<root>.J VALUE_PARAMETER name:j index:0 type:<root>.J
BLOCK_BODY BLOCK_BODY
VAR IR_TEMPORARY_VARIABLE name:tmp_5 type:kotlin.collections.Iterator<<root>.P?> [val] VAR FOR_LOOP_ITERATOR name:tmp_4 type:kotlin.collections.Iterator<<root>.P?> [val]
CALL 'public final fun iterator (): kotlin.collections.Iterator<<root>.P?> [operator] declared in kotlin.Array' type=kotlin.collections.Iterator<<root>.P?> origin=null CALL 'public final fun iterator (): kotlin.collections.Iterator<<root>.P?> [operator] declared in kotlin.Array' type=kotlin.collections.Iterator<<root>.P?> origin=null
$this: CALL 'public open fun arrayOfNotNull (): kotlin.Array<out <root>.P?>? [operator] declared in <root>.J' type=kotlin.Array<out <root>.P?>? origin=null $this: CALL 'public open fun arrayOfNotNull (): kotlin.Array<out <root>.P?>? [operator] declared in <root>.J' type=kotlin.Array<out <root>.P?>? origin=null
$this: GET_VAR 'j: <root>.J declared in <root>.testForInArrayUse' type=<root>.J origin=null $this: GET_VAR 'j: <root>.J declared in <root>.testForInArrayUse' type=<root>.J origin=null
WHILE label=null origin=FOR_LOOP_INNER_WHILE WHILE label=null origin=FOR_LOOP_INNER_WHILE
condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=null condition: CALL 'public abstract fun hasNext (): kotlin.Boolean [operator] declared in kotlin.collections.Iterator' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
$this: GET_VAR 'val tmp_5: kotlin.collections.Iterator<<root>.P?> [val] declared in <root>.testForInArrayUse' type=kotlin.collections.Iterator<<root>.P?> origin=null $this: GET_VAR 'val tmp_4: kotlin.collections.Iterator<<root>.P?> [val] declared in <root>.testForInArrayUse' type=kotlin.collections.Iterator<<root>.P?> origin=null
body: BLOCK type=kotlin.Unit origin=null body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
VAR name:x type:<root>.P? [val] VAR FOR_LOOP_VARIABLE name:x type:<root>.P? [val]
CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=<root>.P? origin=null CALL 'public abstract fun next (): T of kotlin.collections.Iterator [operator] declared in kotlin.collections.Iterator' type=<root>.P? origin=FOR_LOOP_NEXT
$this: GET_VAR 'val tmp_5: kotlin.collections.Iterator<<root>.P?> [val] declared in <root>.testForInArrayUse' type=kotlin.collections.Iterator<<root>.P?> origin=null $this: GET_VAR 'val tmp_4: kotlin.collections.Iterator<<root>.P?> [val] declared in <root>.testForInArrayUse' type=kotlin.collections.Iterator<<root>.P?> origin=null
CALL 'public final fun use (s: <root>.P): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null CALL 'public final fun use (s: <root>.P): kotlin.Unit declared in <root>' type=kotlin.Unit origin=null
s: GET_VAR 'val x: <root>.P? [val] declared in <root>.testForInArrayUse' type=<root>.P? origin=null s: GET_VAR 'val x: <root>.P? [val] declared in <root>.testForInArrayUse' type=<root>.P? origin=null
CALL 'public open fun use (s: <root>.P): kotlin.Unit [operator] declared in <root>.J' type=kotlin.Unit origin=null CALL 'public open fun use (s: <root>.P): kotlin.Unit [operator] declared in <root>.J' type=kotlin.Unit origin=null