Introduce special IrDeclarationOrigin's for for-loop variables
FOR_LOOP_ITERATOR
- temporary variable for for-loop iterator
FOR_LOOP_VARIABLE
- `x` in `for (x in xs)`
FOR_LOOP_IMPLICIT_VARIABLE
- temporary variable for for-loop with destructuring, e.g.:
for ((x, y) in xys)
=>
for (tmp in xys) {
val (x, y) = tmp
}
This commit is contained in:
+3
-3
@@ -155,7 +155,7 @@ class LoopExpressionGenerator(statementGenerator: StatementGenerator) : Statemen
|
|||||||
|
|
||||||
val iteratorCall = statementGenerator.pregenerateCall(iteratorResolvedCall)
|
val iteratorCall = statementGenerator.pregenerateCall(iteratorResolvedCall)
|
||||||
val irIteratorCall = callGenerator.generateCall(ktLoopRange, iteratorCall, IrStatementOrigin.FOR_LOOP_ITERATOR)
|
val irIteratorCall = callGenerator.generateCall(ktLoopRange, iteratorCall, IrStatementOrigin.FOR_LOOP_ITERATOR)
|
||||||
val irIterator = scope.createTemporaryVariable(irIteratorCall, "iterator")
|
val irIterator = scope.createTemporaryVariable(irIteratorCall, "iterator", origin = IrDeclarationOrigin.FOR_LOOP_ITERATOR)
|
||||||
val iteratorValue = VariableLValue(irIterator)
|
val iteratorValue = VariableLValue(irIterator)
|
||||||
irForBlock.statements.add(irIterator)
|
irForBlock.statements.add(irIterator)
|
||||||
|
|
||||||
@@ -178,12 +178,12 @@ class LoopExpressionGenerator(statementGenerator: StatementGenerator) : Statemen
|
|||||||
val irLoopParameter =
|
val irLoopParameter =
|
||||||
if (ktLoopParameter != null && ktLoopDestructuringDeclaration == null)
|
if (ktLoopParameter != null && ktLoopDestructuringDeclaration == null)
|
||||||
context.symbolTable.declareVariable(
|
context.symbolTable.declareVariable(
|
||||||
ktLoopParameter.startOffset, ktLoopParameter.endOffset, IrDeclarationOrigin.DEFINED,
|
ktLoopParameter.startOffset, ktLoopParameter.endOffset, IrDeclarationOrigin.FOR_LOOP_VARIABLE,
|
||||||
getOrFail(BindingContext.VALUE_PARAMETER, ktLoopParameter),
|
getOrFail(BindingContext.VALUE_PARAMETER, ktLoopParameter),
|
||||||
irNextCall
|
irNextCall
|
||||||
)
|
)
|
||||||
else
|
else
|
||||||
scope.createTemporaryVariable(irNextCall, "loop_parameter")
|
scope.createTemporaryVariable(irNextCall, "loop_parameter", origin = IrDeclarationOrigin.FOR_LOOP_IMPLICIT_VARIABLE)
|
||||||
irInnerBody.statements.add(irLoopParameter)
|
irInnerBody.statements.add(irLoopParameter)
|
||||||
|
|
||||||
if (ktLoopDestructuringDeclaration != null) {
|
if (ktLoopDestructuringDeclaration != null) {
|
||||||
|
|||||||
@@ -50,9 +50,14 @@ class Scope(val scopeOwnerSymbol: IrSymbol) {
|
|||||||
return if (nameHint != null) "tmp${index}_$nameHint" else "tmp$index"
|
return if (nameHint != null) "tmp${index}_$nameHint" else "tmp$index"
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createTemporaryVariable(irExpression: IrExpression, nameHint: String? = null, isMutable: Boolean = false): IrVariable =
|
fun createTemporaryVariable(
|
||||||
|
irExpression: IrExpression,
|
||||||
|
nameHint: String? = null,
|
||||||
|
isMutable: Boolean = false,
|
||||||
|
origin: IrDeclarationOrigin = IrDeclarationOrigin.IR_TEMPORARY_VARIABLE
|
||||||
|
): IrVariable =
|
||||||
IrVariableImpl(
|
IrVariableImpl(
|
||||||
irExpression.startOffset, irExpression.endOffset, IrDeclarationOrigin.IR_TEMPORARY_VARIABLE,
|
irExpression.startOffset, irExpression.endOffset, origin,
|
||||||
createDescriptorForTemporaryVariable(irExpression.type, nameHint, isMutable),
|
createDescriptorForTemporaryVariable(irExpression.type, nameHint, isMutable),
|
||||||
irExpression
|
irExpression
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -19,6 +19,9 @@ package org.jetbrains.kotlin.ir.declarations
|
|||||||
interface IrDeclarationOrigin {
|
interface IrDeclarationOrigin {
|
||||||
object DEFINED : IrDeclarationOriginImpl("DEFINED")
|
object DEFINED : IrDeclarationOriginImpl("DEFINED")
|
||||||
object FAKE_OVERRIDE : IrDeclarationOriginImpl("FAKE_OVERRIDE")
|
object FAKE_OVERRIDE : IrDeclarationOriginImpl("FAKE_OVERRIDE")
|
||||||
|
object FOR_LOOP_ITERATOR : IrDeclarationOriginImpl("FOR_LOOP_ITERATOR")
|
||||||
|
object FOR_LOOP_VARIABLE : IrDeclarationOriginImpl("FOR_LOOP_VARIABLE")
|
||||||
|
object FOR_LOOP_IMPLICIT_VARIABLE : IrDeclarationOriginImpl("FOR_LOOP_IMPLICIT_VARIABLE")
|
||||||
object PROPERTY_BACKING_FIELD : IrDeclarationOriginImpl("PROPERTY_BACKING_FIELD")
|
object PROPERTY_BACKING_FIELD : IrDeclarationOriginImpl("PROPERTY_BACKING_FIELD")
|
||||||
object DEFAULT_PROPERTY_ACCESSOR : IrDeclarationOriginImpl("DEFAULT_PROPERTY_ACCESSOR")
|
object DEFAULT_PROPERTY_ACCESSOR : IrDeclarationOriginImpl("DEFAULT_PROPERTY_ACCESSOR")
|
||||||
object DELEGATE : IrDeclarationOriginImpl("DELEGATE")
|
object DELEGATE : IrDeclarationOriginImpl("DELEGATE")
|
||||||
|
|||||||
+2
-2
@@ -9,7 +9,7 @@ CONTENT
|
|||||||
5 GET_VAR 'value-parameter i: Int' type=kotlin.Int origin=null
|
5 GET_VAR 'value-parameter i: Int' type=kotlin.Int origin=null
|
||||||
6 CALL 'rangeTo(Int): IntRange' type=kotlin.ranges.IntRange origin=RANGE
|
6 CALL 'rangeTo(Int): IntRange' type=kotlin.ranges.IntRange origin=RANGE
|
||||||
7 CALL 'iterator(): IntIterator' type=kotlin.collections.IntIterator origin=FOR_LOOP_ITERATOR
|
7 CALL 'iterator(): IntIterator' type=kotlin.collections.IntIterator origin=FOR_LOOP_ITERATOR
|
||||||
8 VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.IntIterator
|
8 VAR FOR_LOOP_ITERATOR val tmp0_iterator: kotlin.collections.IntIterator
|
||||||
9 WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
9 WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
||||||
OUTGOING -> BB 1
|
OUTGOING -> BB 1
|
||||||
While entry: WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
While entry: WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
||||||
@@ -26,7 +26,7 @@ INCOMING <- BB 1
|
|||||||
CONTENT
|
CONTENT
|
||||||
1 GET_VAR 'tmp0_iterator: IntIterator' type=kotlin.collections.IntIterator origin=null
|
1 GET_VAR 'tmp0_iterator: IntIterator' type=kotlin.collections.IntIterator origin=null
|
||||||
2 CALL 'next(): Int' type=kotlin.Int origin=FOR_LOOP_NEXT
|
2 CALL 'next(): Int' type=kotlin.Int origin=FOR_LOOP_NEXT
|
||||||
3 VAR val j: kotlin.Int
|
3 VAR FOR_LOOP_VARIABLE val j: kotlin.Int
|
||||||
4 SET_VAR 'result: Int' type=kotlin.Unit origin=MULTEQ
|
4 SET_VAR 'result: Int' type=kotlin.Unit origin=MULTEQ
|
||||||
OUTGOING -> BB 1
|
OUTGOING -> BB 1
|
||||||
While entry: WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
While entry: WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
||||||
|
|||||||
+2
-2
@@ -11,7 +11,7 @@ CONTENT
|
|||||||
7 CALL 'div(Int): Int' type=kotlin.Int origin=DIV
|
7 CALL 'div(Int): Int' type=kotlin.Int origin=DIV
|
||||||
8 CALL 'rangeTo(Int): IntRange' type=kotlin.ranges.IntRange origin=RANGE
|
8 CALL 'rangeTo(Int): IntRange' type=kotlin.ranges.IntRange origin=RANGE
|
||||||
9 CALL 'iterator(): IntIterator' type=kotlin.collections.IntIterator origin=FOR_LOOP_ITERATOR
|
9 CALL 'iterator(): IntIterator' type=kotlin.collections.IntIterator origin=FOR_LOOP_ITERATOR
|
||||||
10 VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.IntIterator
|
10 VAR FOR_LOOP_ITERATOR val tmp0_iterator: kotlin.collections.IntIterator
|
||||||
11 WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
11 WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
||||||
OUTGOING -> BB 1
|
OUTGOING -> BB 1
|
||||||
While entry: WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
While entry: WHILE label=null origin=FOR_LOOP_INNER_WHILE
|
||||||
@@ -28,7 +28,7 @@ INCOMING <- BB 1
|
|||||||
CONTENT
|
CONTENT
|
||||||
1 GET_VAR 'tmp0_iterator: IntIterator' type=kotlin.collections.IntIterator origin=null
|
1 GET_VAR 'tmp0_iterator: IntIterator' type=kotlin.collections.IntIterator origin=null
|
||||||
2 CALL 'next(): Int' type=kotlin.Int origin=FOR_LOOP_NEXT
|
2 CALL 'next(): Int' type=kotlin.Int origin=FOR_LOOP_NEXT
|
||||||
3 VAR val m: kotlin.Int
|
3 VAR FOR_LOOP_VARIABLE val m: kotlin.Int
|
||||||
4 WHEN type=kotlin.Unit origin=null
|
4 WHEN type=kotlin.Unit origin=null
|
||||||
5 GET_VAR 'value-parameter n: Int' type=kotlin.Int origin=null
|
5 GET_VAR 'value-parameter n: Int' type=kotlin.Int origin=null
|
||||||
6 GET_VAR 'm: Int' type=kotlin.Int origin=null
|
6 GET_VAR 'm: Int' type=kotlin.Int origin=null
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ FILE /breakContinueInLoopHeader.kt
|
|||||||
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=null
|
||||||
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
||||||
VAR IR_TEMPORARY_VARIABLE val tmp1_iterator: kotlin.collections.Iterator<kotlin.String>
|
VAR FOR_LOOP_ITERATOR val tmp1_iterator: kotlin.collections.Iterator<kotlin.String>
|
||||||
CALL 'iterator(): Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
|
CALL 'iterator(): Iterator<String>' 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 val tmp0_elvis_lhs: kotlin.collections.List<kotlin.String>?
|
VAR IR_TEMPORARY_VARIABLE val tmp0_elvis_lhs: kotlin.collections.List<kotlin.String>?
|
||||||
@@ -62,7 +62,7 @@ FILE /breakContinueInLoopHeader.kt
|
|||||||
condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||||
$this: GET_VAR 'tmp1_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp1_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||||
VAR val s: kotlin.String
|
VAR FOR_LOOP_VARIABLE val s: kotlin.String
|
||||||
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
||||||
$this: GET_VAR 'tmp1_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp1_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
FUN public fun test4(ss: kotlin.collections.List<kotlin.String>?): kotlin.Unit
|
FUN public fun test4(ss: kotlin.collections.List<kotlin.String>?): kotlin.Unit
|
||||||
@@ -72,7 +72,7 @@ FILE /breakContinueInLoopHeader.kt
|
|||||||
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=null
|
||||||
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
||||||
VAR IR_TEMPORARY_VARIABLE val tmp1_iterator: kotlin.collections.Iterator<kotlin.String>
|
VAR FOR_LOOP_ITERATOR val tmp1_iterator: kotlin.collections.Iterator<kotlin.String>
|
||||||
CALL 'iterator(): Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
|
CALL 'iterator(): Iterator<String>' 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 val tmp0_elvis_lhs: kotlin.collections.List<kotlin.String>?
|
VAR IR_TEMPORARY_VARIABLE val tmp0_elvis_lhs: kotlin.collections.List<kotlin.String>?
|
||||||
@@ -90,7 +90,7 @@ FILE /breakContinueInLoopHeader.kt
|
|||||||
condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||||
$this: GET_VAR 'tmp1_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp1_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||||
VAR val s: kotlin.String
|
VAR FOR_LOOP_VARIABLE val s: kotlin.String
|
||||||
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
||||||
$this: GET_VAR 'tmp1_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp1_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
FUN public fun test5(): kotlin.Unit
|
FUN public fun test5(): kotlin.Unit
|
||||||
|
|||||||
+6
-6
@@ -3,28 +3,28 @@ FILE /for.kt
|
|||||||
VALUE_PARAMETER value-parameter ss: kotlin.collections.List<kotlin.String>
|
VALUE_PARAMETER value-parameter ss: kotlin.collections.List<kotlin.String>
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
||||||
VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.Iterator<kotlin.String>
|
VAR FOR_LOOP_ITERATOR val tmp0_iterator: kotlin.collections.Iterator<kotlin.String>
|
||||||
CALL 'iterator(): Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
|
CALL 'iterator(): Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
|
||||||
$this: GET_VAR 'value-parameter ss: List<String>' type=kotlin.collections.List<kotlin.String> origin=null
|
$this: GET_VAR 'value-parameter ss: List<String>' 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 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||||
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||||
VAR val s: kotlin.String
|
VAR FOR_LOOP_VARIABLE val s: kotlin.String
|
||||||
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
||||||
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
FUN public fun testIterable(ss: kotlin.collections.List<kotlin.String>): kotlin.Unit
|
FUN public fun testIterable(ss: kotlin.collections.List<kotlin.String>): kotlin.Unit
|
||||||
VALUE_PARAMETER value-parameter ss: kotlin.collections.List<kotlin.String>
|
VALUE_PARAMETER value-parameter ss: kotlin.collections.List<kotlin.String>
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
||||||
VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.Iterator<kotlin.String>
|
VAR FOR_LOOP_ITERATOR val tmp0_iterator: kotlin.collections.Iterator<kotlin.String>
|
||||||
CALL 'iterator(): Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
|
CALL 'iterator(): Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
|
||||||
$this: GET_VAR 'value-parameter ss: List<String>' type=kotlin.collections.List<kotlin.String> origin=null
|
$this: GET_VAR 'value-parameter ss: List<String>' 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 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||||
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||||
VAR val s: kotlin.String
|
VAR FOR_LOOP_VARIABLE val s: kotlin.String
|
||||||
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
||||||
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
BLOCK type=kotlin.Unit origin=null
|
BLOCK type=kotlin.Unit origin=null
|
||||||
@@ -34,14 +34,14 @@ FILE /for.kt
|
|||||||
VALUE_PARAMETER value-parameter pp: kotlin.collections.List<kotlin.Pair<kotlin.Int, kotlin.String>>
|
VALUE_PARAMETER value-parameter pp: kotlin.collections.List<kotlin.Pair<kotlin.Int, kotlin.String>>
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
||||||
VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>>
|
VAR FOR_LOOP_ITERATOR val tmp0_iterator: kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>>
|
||||||
CALL 'iterator(): Iterator<Pair<Int, String>>' type=kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> origin=FOR_LOOP_ITERATOR
|
CALL 'iterator(): Iterator<Pair<Int, String>>' type=kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> origin=FOR_LOOP_ITERATOR
|
||||||
$this: GET_VAR 'value-parameter pp: List<Pair<Int, String>>' type=kotlin.collections.List<kotlin.Pair<kotlin.Int, kotlin.String>> origin=null
|
$this: GET_VAR 'value-parameter pp: List<Pair<Int, String>>' 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 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||||
$this: GET_VAR 'tmp0_iterator: Iterator<Pair<Int, String>>' type=kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> origin=null
|
$this: GET_VAR 'tmp0_iterator: Iterator<Pair<Int, String>>' type=kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> origin=null
|
||||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||||
VAR IR_TEMPORARY_VARIABLE val tmp1_loop_parameter: kotlin.Pair<kotlin.Int, kotlin.String>
|
VAR FOR_LOOP_IMPLICIT_VARIABLE val tmp1_loop_parameter: kotlin.Pair<kotlin.Int, kotlin.String>
|
||||||
CALL 'next(): Pair<Int, String>' type=kotlin.Pair<kotlin.Int, kotlin.String> origin=FOR_LOOP_NEXT
|
CALL 'next(): Pair<Int, String>' type=kotlin.Pair<kotlin.Int, kotlin.String> origin=FOR_LOOP_NEXT
|
||||||
$this: GET_VAR 'tmp0_iterator: Iterator<Pair<Int, String>>' type=kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> origin=null
|
$this: GET_VAR 'tmp0_iterator: Iterator<Pair<Int, String>>' type=kotlin.collections.Iterator<kotlin.Pair<kotlin.Int, kotlin.String>> origin=null
|
||||||
VAR val i: kotlin.Int
|
VAR val i: kotlin.Int
|
||||||
|
|||||||
@@ -3,14 +3,14 @@ FILE /forWithBreakContinue.kt
|
|||||||
VALUE_PARAMETER value-parameter ss: kotlin.collections.List<kotlin.String>
|
VALUE_PARAMETER value-parameter ss: kotlin.collections.List<kotlin.String>
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
||||||
VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.Iterator<kotlin.String>
|
VAR FOR_LOOP_ITERATOR val tmp0_iterator: kotlin.collections.Iterator<kotlin.String>
|
||||||
CALL 'iterator(): Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
|
CALL 'iterator(): Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
|
||||||
$this: GET_VAR 'value-parameter ss: List<String>' type=kotlin.collections.List<kotlin.String> origin=null
|
$this: GET_VAR 'value-parameter ss: List<String>' 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 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||||
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||||
VAR val s: kotlin.String
|
VAR FOR_LOOP_VARIABLE val s: kotlin.String
|
||||||
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
||||||
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
BLOCK type=kotlin.Nothing origin=null
|
BLOCK type=kotlin.Nothing origin=null
|
||||||
@@ -19,26 +19,26 @@ FILE /forWithBreakContinue.kt
|
|||||||
VALUE_PARAMETER value-parameter ss: kotlin.collections.List<kotlin.String>
|
VALUE_PARAMETER value-parameter ss: kotlin.collections.List<kotlin.String>
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
||||||
VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.Iterator<kotlin.String>
|
VAR FOR_LOOP_ITERATOR val tmp0_iterator: kotlin.collections.Iterator<kotlin.String>
|
||||||
CALL 'iterator(): Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
|
CALL 'iterator(): Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
|
||||||
$this: GET_VAR 'value-parameter ss: List<String>' type=kotlin.collections.List<kotlin.String> origin=null
|
$this: GET_VAR 'value-parameter ss: List<String>' 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 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||||
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||||
VAR val s1: kotlin.String
|
VAR FOR_LOOP_VARIABLE val s1: kotlin.String
|
||||||
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
||||||
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
BLOCK type=kotlin.Nothing origin=null
|
BLOCK type=kotlin.Nothing origin=null
|
||||||
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
||||||
VAR IR_TEMPORARY_VARIABLE val tmp1_iterator: kotlin.collections.Iterator<kotlin.String>
|
VAR FOR_LOOP_ITERATOR val tmp1_iterator: kotlin.collections.Iterator<kotlin.String>
|
||||||
CALL 'iterator(): Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
|
CALL 'iterator(): Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
|
||||||
$this: GET_VAR 'value-parameter ss: List<String>' type=kotlin.collections.List<kotlin.String> origin=null
|
$this: GET_VAR 'value-parameter ss: List<String>' 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 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||||
$this: GET_VAR 'tmp1_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp1_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||||
VAR val s2: kotlin.String
|
VAR FOR_LOOP_VARIABLE val s2: kotlin.String
|
||||||
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
||||||
$this: GET_VAR 'tmp1_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp1_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
BLOCK type=kotlin.Nothing origin=null
|
BLOCK type=kotlin.Nothing origin=null
|
||||||
@@ -50,14 +50,14 @@ FILE /forWithBreakContinue.kt
|
|||||||
VALUE_PARAMETER value-parameter ss: kotlin.collections.List<kotlin.String>
|
VALUE_PARAMETER value-parameter ss: kotlin.collections.List<kotlin.String>
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
||||||
VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.Iterator<kotlin.String>
|
VAR FOR_LOOP_ITERATOR val tmp0_iterator: kotlin.collections.Iterator<kotlin.String>
|
||||||
CALL 'iterator(): Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
|
CALL 'iterator(): Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
|
||||||
$this: GET_VAR 'value-parameter ss: List<String>' type=kotlin.collections.List<kotlin.String> origin=null
|
$this: GET_VAR 'value-parameter ss: List<String>' 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 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||||
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||||
VAR val s: kotlin.String
|
VAR FOR_LOOP_VARIABLE val s: kotlin.String
|
||||||
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
||||||
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
BLOCK type=kotlin.Nothing origin=null
|
BLOCK type=kotlin.Nothing origin=null
|
||||||
@@ -66,26 +66,26 @@ FILE /forWithBreakContinue.kt
|
|||||||
VALUE_PARAMETER value-parameter ss: kotlin.collections.List<kotlin.String>
|
VALUE_PARAMETER value-parameter ss: kotlin.collections.List<kotlin.String>
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
||||||
VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.Iterator<kotlin.String>
|
VAR FOR_LOOP_ITERATOR val tmp0_iterator: kotlin.collections.Iterator<kotlin.String>
|
||||||
CALL 'iterator(): Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
|
CALL 'iterator(): Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
|
||||||
$this: GET_VAR 'value-parameter ss: List<String>' type=kotlin.collections.List<kotlin.String> origin=null
|
$this: GET_VAR 'value-parameter ss: List<String>' 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 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||||
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||||
VAR val s1: kotlin.String
|
VAR FOR_LOOP_VARIABLE val s1: kotlin.String
|
||||||
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
||||||
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp0_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
BLOCK type=kotlin.Nothing origin=null
|
BLOCK type=kotlin.Nothing origin=null
|
||||||
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
||||||
VAR IR_TEMPORARY_VARIABLE val tmp1_iterator: kotlin.collections.Iterator<kotlin.String>
|
VAR FOR_LOOP_ITERATOR val tmp1_iterator: kotlin.collections.Iterator<kotlin.String>
|
||||||
CALL 'iterator(): Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
|
CALL 'iterator(): Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=FOR_LOOP_ITERATOR
|
||||||
$this: GET_VAR 'value-parameter ss: List<String>' type=kotlin.collections.List<kotlin.String> origin=null
|
$this: GET_VAR 'value-parameter ss: List<String>' 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 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT
|
||||||
$this: GET_VAR 'tmp1_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp1_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||||
VAR val s2: kotlin.String
|
VAR FOR_LOOP_VARIABLE val s2: kotlin.String
|
||||||
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
CALL 'next(): String' type=kotlin.String origin=FOR_LOOP_NEXT
|
||||||
$this: GET_VAR 'tmp1_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
$this: GET_VAR 'tmp1_iterator: Iterator<String>' type=kotlin.collections.Iterator<kotlin.String> origin=null
|
||||||
BLOCK type=kotlin.Nothing origin=null
|
BLOCK type=kotlin.Nothing origin=null
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ FILE /forWithImplicitReceivers.kt
|
|||||||
$receiver: VALUE_PARAMETER this@test: IReceiver
|
$receiver: VALUE_PARAMETER this@test: IReceiver
|
||||||
BLOCK_BODY
|
BLOCK_BODY
|
||||||
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
BLOCK type=kotlin.Unit origin=FOR_LOOP
|
||||||
VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: IntCell
|
VAR FOR_LOOP_ITERATOR val tmp0_iterator: IntCell
|
||||||
CALL 'iterator() on FiveTimes: IntCell' type=IntCell origin=FOR_LOOP_ITERATOR
|
CALL 'iterator() on FiveTimes: IntCell' type=IntCell origin=FOR_LOOP_ITERATOR
|
||||||
$this: GET_VAR 'this@test: IReceiver' type=IReceiver origin=null
|
$this: GET_VAR 'this@test: IReceiver' type=IReceiver origin=null
|
||||||
$receiver: GET_OBJECT 'FiveTimes' type=FiveTimes
|
$receiver: GET_OBJECT 'FiveTimes' type=FiveTimes
|
||||||
@@ -99,7 +99,7 @@ FILE /forWithImplicitReceivers.kt
|
|||||||
$this: GET_VAR 'this@test: IReceiver' type=IReceiver origin=null
|
$this: GET_VAR 'this@test: IReceiver' type=IReceiver origin=null
|
||||||
$receiver: GET_VAR 'tmp0_iterator: IntCell' type=IntCell origin=null
|
$receiver: GET_VAR 'tmp0_iterator: IntCell' type=IntCell origin=null
|
||||||
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE
|
||||||
VAR val i: kotlin.Int
|
VAR FOR_LOOP_VARIABLE val i: kotlin.Int
|
||||||
CALL 'next() on IntCell: Int' type=kotlin.Int origin=FOR_LOOP_NEXT
|
CALL 'next() on IntCell: Int' type=kotlin.Int origin=FOR_LOOP_NEXT
|
||||||
$this: GET_VAR 'this@test: IReceiver' type=IReceiver origin=null
|
$this: GET_VAR 'this@test: IReceiver' type=IReceiver origin=null
|
||||||
$receiver: GET_VAR 'tmp0_iterator: IntCell' type=IntCell origin=null
|
$receiver: GET_VAR 'tmp0_iterator: IntCell' type=IntCell origin=null
|
||||||
|
|||||||
Reference in New Issue
Block a user