From a687dea89804661c0de62c4e113901cb3291bd5e Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Wed, 12 Jul 2017 17:34:39 +0300 Subject: [PATCH] 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 } --- .../generators/LoopExpressionGenerator.kt | 6 ++--- .../org/jetbrains/kotlin/ir/builders/Scope.kt | 9 +++++-- .../ir/declarations/IrDeclarationOrigin.kt | 3 +++ compiler/testData/ir/irCfg/loop/factorial.txt | 4 ++-- compiler/testData/ir/irCfg/loop/isPerfect.txt | 4 ++-- .../expressions/breakContinueInLoopHeader.txt | 8 +++---- .../testData/ir/irText/expressions/for.txt | 12 +++++----- .../expressions/forWithBreakContinue.txt | 24 +++++++++---------- .../expressions/forWithImplicitReceivers.txt | 4 ++-- 9 files changed, 41 insertions(+), 33 deletions(-) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/LoopExpressionGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/LoopExpressionGenerator.kt index 49c54b4d41d..4514180fe5a 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/LoopExpressionGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/LoopExpressionGenerator.kt @@ -155,7 +155,7 @@ class LoopExpressionGenerator(statementGenerator: StatementGenerator) : Statemen val iteratorCall = statementGenerator.pregenerateCall(iteratorResolvedCall) 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) irForBlock.statements.add(irIterator) @@ -178,12 +178,12 @@ class LoopExpressionGenerator(statementGenerator: StatementGenerator) : Statemen val irLoopParameter = if (ktLoopParameter != null && ktLoopDestructuringDeclaration == null) context.symbolTable.declareVariable( - ktLoopParameter.startOffset, ktLoopParameter.endOffset, IrDeclarationOrigin.DEFINED, + ktLoopParameter.startOffset, ktLoopParameter.endOffset, IrDeclarationOrigin.FOR_LOOP_VARIABLE, getOrFail(BindingContext.VALUE_PARAMETER, ktLoopParameter), irNextCall ) else - scope.createTemporaryVariable(irNextCall, "loop_parameter") + scope.createTemporaryVariable(irNextCall, "loop_parameter", origin = IrDeclarationOrigin.FOR_LOOP_IMPLICIT_VARIABLE) irInnerBody.statements.add(irLoopParameter) if (ktLoopDestructuringDeclaration != null) { diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/Scope.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/Scope.kt index 2a5ee5f27cc..fd569d6cb7d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/Scope.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/builders/Scope.kt @@ -50,9 +50,14 @@ class Scope(val scopeOwnerSymbol: IrSymbol) { 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( - irExpression.startOffset, irExpression.endOffset, IrDeclarationOrigin.IR_TEMPORARY_VARIABLE, + irExpression.startOffset, irExpression.endOffset, origin, createDescriptorForTemporaryVariable(irExpression.type, nameHint, isMutable), irExpression ) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt index e21d2152b0c..11ca617150d 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt @@ -19,6 +19,9 @@ package org.jetbrains.kotlin.ir.declarations interface IrDeclarationOrigin { object DEFINED : IrDeclarationOriginImpl("DEFINED") 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 DEFAULT_PROPERTY_ACCESSOR : IrDeclarationOriginImpl("DEFAULT_PROPERTY_ACCESSOR") object DELEGATE : IrDeclarationOriginImpl("DELEGATE") diff --git a/compiler/testData/ir/irCfg/loop/factorial.txt b/compiler/testData/ir/irCfg/loop/factorial.txt index 56606416b17..082de1357cb 100644 --- a/compiler/testData/ir/irCfg/loop/factorial.txt +++ b/compiler/testData/ir/irCfg/loop/factorial.txt @@ -9,7 +9,7 @@ CONTENT 5 GET_VAR 'value-parameter i: Int' type=kotlin.Int origin=null 6 CALL 'rangeTo(Int): IntRange' type=kotlin.ranges.IntRange origin=RANGE 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 OUTGOING -> BB 1 While entry: WHILE label=null origin=FOR_LOOP_INNER_WHILE @@ -26,7 +26,7 @@ INCOMING <- BB 1 CONTENT 1 GET_VAR 'tmp0_iterator: IntIterator' type=kotlin.collections.IntIterator origin=null 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 OUTGOING -> BB 1 While entry: WHILE label=null origin=FOR_LOOP_INNER_WHILE diff --git a/compiler/testData/ir/irCfg/loop/isPerfect.txt b/compiler/testData/ir/irCfg/loop/isPerfect.txt index 8514e545c85..821efeba597 100644 --- a/compiler/testData/ir/irCfg/loop/isPerfect.txt +++ b/compiler/testData/ir/irCfg/loop/isPerfect.txt @@ -11,7 +11,7 @@ CONTENT 7 CALL 'div(Int): Int' type=kotlin.Int origin=DIV 8 CALL 'rangeTo(Int): IntRange' type=kotlin.ranges.IntRange origin=RANGE 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 OUTGOING -> BB 1 While entry: WHILE label=null origin=FOR_LOOP_INNER_WHILE @@ -28,7 +28,7 @@ INCOMING <- BB 1 CONTENT 1 GET_VAR 'tmp0_iterator: IntIterator' type=kotlin.collections.IntIterator origin=null 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 5 GET_VAR 'value-parameter n: Int' type=kotlin.Int origin=null 6 GET_VAR 'm: Int' type=kotlin.Int origin=null diff --git a/compiler/testData/ir/irText/expressions/breakContinueInLoopHeader.txt b/compiler/testData/ir/irText/expressions/breakContinueInLoopHeader.txt index 58e51bc5094..acb9449b8b0 100644 --- a/compiler/testData/ir/irText/expressions/breakContinueInLoopHeader.txt +++ b/compiler/testData/ir/irText/expressions/breakContinueInLoopHeader.txt @@ -44,7 +44,7 @@ FILE /breakContinueInLoopHeader.kt condition: CONST Boolean type=kotlin.Boolean value='true' body: BLOCK type=kotlin.Unit origin=null BLOCK type=kotlin.Unit origin=FOR_LOOP - VAR IR_TEMPORARY_VARIABLE val tmp1_iterator: kotlin.collections.Iterator + VAR FOR_LOOP_ITERATOR val tmp1_iterator: kotlin.collections.Iterator CALL 'iterator(): Iterator' type=kotlin.collections.Iterator origin=FOR_LOOP_ITERATOR $this: BLOCK type=kotlin.collections.List origin=ELVIS VAR IR_TEMPORARY_VARIABLE val tmp0_elvis_lhs: kotlin.collections.List? @@ -62,7 +62,7 @@ FILE /breakContinueInLoopHeader.kt condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT $this: GET_VAR 'tmp1_iterator: Iterator' type=kotlin.collections.Iterator origin=null 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 $this: GET_VAR 'tmp1_iterator: Iterator' type=kotlin.collections.Iterator origin=null FUN public fun test4(ss: kotlin.collections.List?): kotlin.Unit @@ -72,7 +72,7 @@ FILE /breakContinueInLoopHeader.kt condition: CONST Boolean type=kotlin.Boolean value='true' body: BLOCK type=kotlin.Unit origin=null BLOCK type=kotlin.Unit origin=FOR_LOOP - VAR IR_TEMPORARY_VARIABLE val tmp1_iterator: kotlin.collections.Iterator + VAR FOR_LOOP_ITERATOR val tmp1_iterator: kotlin.collections.Iterator CALL 'iterator(): Iterator' type=kotlin.collections.Iterator origin=FOR_LOOP_ITERATOR $this: BLOCK type=kotlin.collections.List origin=ELVIS VAR IR_TEMPORARY_VARIABLE val tmp0_elvis_lhs: kotlin.collections.List? @@ -90,7 +90,7 @@ FILE /breakContinueInLoopHeader.kt condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT $this: GET_VAR 'tmp1_iterator: Iterator' type=kotlin.collections.Iterator origin=null 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 $this: GET_VAR 'tmp1_iterator: Iterator' type=kotlin.collections.Iterator origin=null FUN public fun test5(): kotlin.Unit diff --git a/compiler/testData/ir/irText/expressions/for.txt b/compiler/testData/ir/irText/expressions/for.txt index 3128e5f7b8c..6120115586e 100644 --- a/compiler/testData/ir/irText/expressions/for.txt +++ b/compiler/testData/ir/irText/expressions/for.txt @@ -3,28 +3,28 @@ FILE /for.kt VALUE_PARAMETER value-parameter ss: kotlin.collections.List BLOCK_BODY BLOCK type=kotlin.Unit origin=FOR_LOOP - VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.Iterator + VAR FOR_LOOP_ITERATOR val tmp0_iterator: kotlin.collections.Iterator CALL 'iterator(): Iterator' type=kotlin.collections.Iterator origin=FOR_LOOP_ITERATOR $this: GET_VAR 'value-parameter ss: List' type=kotlin.collections.List origin=null WHILE label=null origin=FOR_LOOP_INNER_WHILE condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT $this: GET_VAR 'tmp0_iterator: Iterator' type=kotlin.collections.Iterator origin=null 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 $this: GET_VAR 'tmp0_iterator: Iterator' type=kotlin.collections.Iterator origin=null FUN public fun testIterable(ss: kotlin.collections.List): kotlin.Unit VALUE_PARAMETER value-parameter ss: kotlin.collections.List BLOCK_BODY BLOCK type=kotlin.Unit origin=FOR_LOOP - VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.Iterator + VAR FOR_LOOP_ITERATOR val tmp0_iterator: kotlin.collections.Iterator CALL 'iterator(): Iterator' type=kotlin.collections.Iterator origin=FOR_LOOP_ITERATOR $this: GET_VAR 'value-parameter ss: List' type=kotlin.collections.List origin=null WHILE label=null origin=FOR_LOOP_INNER_WHILE condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT $this: GET_VAR 'tmp0_iterator: Iterator' type=kotlin.collections.Iterator origin=null 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 $this: GET_VAR 'tmp0_iterator: Iterator' type=kotlin.collections.Iterator origin=null BLOCK type=kotlin.Unit origin=null @@ -34,14 +34,14 @@ FILE /for.kt VALUE_PARAMETER value-parameter pp: kotlin.collections.List> BLOCK_BODY BLOCK type=kotlin.Unit origin=FOR_LOOP - VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.Iterator> + VAR FOR_LOOP_ITERATOR val tmp0_iterator: kotlin.collections.Iterator> CALL 'iterator(): Iterator>' type=kotlin.collections.Iterator> origin=FOR_LOOP_ITERATOR $this: GET_VAR 'value-parameter pp: List>' type=kotlin.collections.List> origin=null WHILE label=null origin=FOR_LOOP_INNER_WHILE condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT $this: GET_VAR 'tmp0_iterator: Iterator>' type=kotlin.collections.Iterator> origin=null body: BLOCK type=kotlin.Unit origin=FOR_LOOP_INNER_WHILE - VAR IR_TEMPORARY_VARIABLE val tmp1_loop_parameter: kotlin.Pair + VAR FOR_LOOP_IMPLICIT_VARIABLE val tmp1_loop_parameter: kotlin.Pair CALL 'next(): Pair' type=kotlin.Pair origin=FOR_LOOP_NEXT $this: GET_VAR 'tmp0_iterator: Iterator>' type=kotlin.collections.Iterator> origin=null VAR val i: kotlin.Int diff --git a/compiler/testData/ir/irText/expressions/forWithBreakContinue.txt b/compiler/testData/ir/irText/expressions/forWithBreakContinue.txt index fb0a2f6e861..c28c03210c1 100644 --- a/compiler/testData/ir/irText/expressions/forWithBreakContinue.txt +++ b/compiler/testData/ir/irText/expressions/forWithBreakContinue.txt @@ -3,14 +3,14 @@ FILE /forWithBreakContinue.kt VALUE_PARAMETER value-parameter ss: kotlin.collections.List BLOCK_BODY BLOCK type=kotlin.Unit origin=FOR_LOOP - VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.Iterator + VAR FOR_LOOP_ITERATOR val tmp0_iterator: kotlin.collections.Iterator CALL 'iterator(): Iterator' type=kotlin.collections.Iterator origin=FOR_LOOP_ITERATOR $this: GET_VAR 'value-parameter ss: List' type=kotlin.collections.List origin=null WHILE label=null origin=FOR_LOOP_INNER_WHILE condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT $this: GET_VAR 'tmp0_iterator: Iterator' type=kotlin.collections.Iterator origin=null 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 $this: GET_VAR 'tmp0_iterator: Iterator' type=kotlin.collections.Iterator origin=null BLOCK type=kotlin.Nothing origin=null @@ -19,26 +19,26 @@ FILE /forWithBreakContinue.kt VALUE_PARAMETER value-parameter ss: kotlin.collections.List BLOCK_BODY BLOCK type=kotlin.Unit origin=FOR_LOOP - VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.Iterator + VAR FOR_LOOP_ITERATOR val tmp0_iterator: kotlin.collections.Iterator CALL 'iterator(): Iterator' type=kotlin.collections.Iterator origin=FOR_LOOP_ITERATOR $this: GET_VAR 'value-parameter ss: List' type=kotlin.collections.List origin=null WHILE label=OUTER origin=FOR_LOOP_INNER_WHILE condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT $this: GET_VAR 'tmp0_iterator: Iterator' type=kotlin.collections.Iterator origin=null 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 $this: GET_VAR 'tmp0_iterator: Iterator' type=kotlin.collections.Iterator origin=null BLOCK type=kotlin.Nothing origin=null BLOCK type=kotlin.Unit origin=FOR_LOOP - VAR IR_TEMPORARY_VARIABLE val tmp1_iterator: kotlin.collections.Iterator + VAR FOR_LOOP_ITERATOR val tmp1_iterator: kotlin.collections.Iterator CALL 'iterator(): Iterator' type=kotlin.collections.Iterator origin=FOR_LOOP_ITERATOR $this: GET_VAR 'value-parameter ss: List' type=kotlin.collections.List origin=null WHILE label=INNER origin=FOR_LOOP_INNER_WHILE condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT $this: GET_VAR 'tmp1_iterator: Iterator' type=kotlin.collections.Iterator origin=null 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 $this: GET_VAR 'tmp1_iterator: Iterator' type=kotlin.collections.Iterator origin=null BLOCK type=kotlin.Nothing origin=null @@ -50,14 +50,14 @@ FILE /forWithBreakContinue.kt VALUE_PARAMETER value-parameter ss: kotlin.collections.List BLOCK_BODY BLOCK type=kotlin.Unit origin=FOR_LOOP - VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.Iterator + VAR FOR_LOOP_ITERATOR val tmp0_iterator: kotlin.collections.Iterator CALL 'iterator(): Iterator' type=kotlin.collections.Iterator origin=FOR_LOOP_ITERATOR $this: GET_VAR 'value-parameter ss: List' type=kotlin.collections.List origin=null WHILE label=null origin=FOR_LOOP_INNER_WHILE condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT $this: GET_VAR 'tmp0_iterator: Iterator' type=kotlin.collections.Iterator origin=null 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 $this: GET_VAR 'tmp0_iterator: Iterator' type=kotlin.collections.Iterator origin=null BLOCK type=kotlin.Nothing origin=null @@ -66,26 +66,26 @@ FILE /forWithBreakContinue.kt VALUE_PARAMETER value-parameter ss: kotlin.collections.List BLOCK_BODY BLOCK type=kotlin.Unit origin=FOR_LOOP - VAR IR_TEMPORARY_VARIABLE val tmp0_iterator: kotlin.collections.Iterator + VAR FOR_LOOP_ITERATOR val tmp0_iterator: kotlin.collections.Iterator CALL 'iterator(): Iterator' type=kotlin.collections.Iterator origin=FOR_LOOP_ITERATOR $this: GET_VAR 'value-parameter ss: List' type=kotlin.collections.List origin=null WHILE label=OUTER origin=FOR_LOOP_INNER_WHILE condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT $this: GET_VAR 'tmp0_iterator: Iterator' type=kotlin.collections.Iterator origin=null 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 $this: GET_VAR 'tmp0_iterator: Iterator' type=kotlin.collections.Iterator origin=null BLOCK type=kotlin.Nothing origin=null BLOCK type=kotlin.Unit origin=FOR_LOOP - VAR IR_TEMPORARY_VARIABLE val tmp1_iterator: kotlin.collections.Iterator + VAR FOR_LOOP_ITERATOR val tmp1_iterator: kotlin.collections.Iterator CALL 'iterator(): Iterator' type=kotlin.collections.Iterator origin=FOR_LOOP_ITERATOR $this: GET_VAR 'value-parameter ss: List' type=kotlin.collections.List origin=null WHILE label=INNER origin=FOR_LOOP_INNER_WHILE condition: CALL 'hasNext(): Boolean' type=kotlin.Boolean origin=FOR_LOOP_HAS_NEXT $this: GET_VAR 'tmp1_iterator: Iterator' type=kotlin.collections.Iterator origin=null 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 $this: GET_VAR 'tmp1_iterator: Iterator' type=kotlin.collections.Iterator origin=null BLOCK type=kotlin.Nothing origin=null diff --git a/compiler/testData/ir/irText/expressions/forWithImplicitReceivers.txt b/compiler/testData/ir/irText/expressions/forWithImplicitReceivers.txt index 89d14830285..7dccdcc6637 100644 --- a/compiler/testData/ir/irText/expressions/forWithImplicitReceivers.txt +++ b/compiler/testData/ir/irText/expressions/forWithImplicitReceivers.txt @@ -90,7 +90,7 @@ FILE /forWithImplicitReceivers.kt $receiver: VALUE_PARAMETER this@test: IReceiver BLOCK_BODY 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 $this: GET_VAR 'this@test: IReceiver' type=IReceiver origin=null $receiver: GET_OBJECT 'FiveTimes' type=FiveTimes @@ -99,7 +99,7 @@ FILE /forWithImplicitReceivers.kt $this: GET_VAR 'this@test: IReceiver' type=IReceiver origin=null $receiver: GET_VAR 'tmp0_iterator: IntCell' type=IntCell origin=null 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 $this: GET_VAR 'this@test: IReceiver' type=IReceiver origin=null $receiver: GET_VAR 'tmp0_iterator: IntCell' type=IntCell origin=null