diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/PrimitiveProgressionRangeValue.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/PrimitiveProgressionRangeValue.kt index f2019eda3dc..14688581c4d 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/PrimitiveProgressionRangeValue.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/PrimitiveProgressionRangeValue.kt @@ -20,12 +20,14 @@ import org.jetbrains.kotlin.codegen.ExpressionCodegen import org.jetbrains.kotlin.codegen.range.forLoop.ForInProgressionExpressionLoopGenerator import org.jetbrains.kotlin.codegen.range.inExpression.CallBasedInExpressionGenerator import org.jetbrains.kotlin.codegen.range.inExpression.InExpressionGenerator +import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtForExpression import org.jetbrains.kotlin.psi.KtSimpleNameExpression -class PrimitiveProgressionRangeValue : RangeValue { +class PrimitiveProgressionRangeValue(private val rangeExpression: KtExpression) : RangeValue { + override fun createForLoopGenerator(codegen: ExpressionCodegen, forExpression: KtForExpression) = - ForInProgressionExpressionLoopGenerator(codegen, forExpression) + ForInProgressionExpressionLoopGenerator(codegen, forExpression, rangeExpression) override fun createInExpressionGenerator(codegen: ExpressionCodegen, operatorReference: KtSimpleNameExpression): InExpressionGenerator = CallBasedInExpressionGenerator(codegen, operatorReference) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/PrimitiveRangeRangeValue.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/PrimitiveRangeRangeValue.kt index f8d93dfe8c4..b6c0e151d83 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/PrimitiveRangeRangeValue.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/PrimitiveRangeRangeValue.kt @@ -18,15 +18,21 @@ package org.jetbrains.kotlin.codegen.range import org.jetbrains.kotlin.codegen.ExpressionCodegen import org.jetbrains.kotlin.codegen.range.forLoop.ForInRangeInstanceLoopGenerator +import org.jetbrains.kotlin.codegen.range.forLoop.ForLoopGenerator import org.jetbrains.kotlin.codegen.range.inExpression.CallBasedInExpressionGenerator import org.jetbrains.kotlin.codegen.range.inExpression.InExpressionGenerator +import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtForExpression import org.jetbrains.kotlin.psi.KtSimpleNameExpression -class PrimitiveRangeRangeValue : RangeValue { +class PrimitiveRangeRangeValue(private val rangeExpression: KtExpression) : ReversableRangeValue { + override fun createForLoopGenerator(codegen: ExpressionCodegen, forExpression: KtForExpression) = - ForInRangeInstanceLoopGenerator(codegen, forExpression) + ForInRangeInstanceLoopGenerator(codegen, forExpression, rangeExpression, reversed = false) override fun createInExpressionGenerator(codegen: ExpressionCodegen, operatorReference: KtSimpleNameExpression): InExpressionGenerator = CallBasedInExpressionGenerator(codegen, operatorReference) + + override fun createForInReversedLoopGenerator(codegen: ExpressionCodegen, forExpression: KtForExpression): ForLoopGenerator = + ForInRangeInstanceLoopGenerator(codegen, forExpression, rangeExpression, reversed = true) } \ No newline at end of file diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/RangeValues.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/RangeValues.kt index a1607bf35c7..31c0f8f082d 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/RangeValues.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/RangeValues.kt @@ -59,9 +59,9 @@ fun ExpressionCodegen.createRangeValueForExpression(rangeExpression: KtExpressio } isPrimitiveRange(rangeType) -> - PrimitiveRangeRangeValue() + PrimitiveRangeRangeValue(rangeExpression) isPrimitiveProgression(rangeType) -> - PrimitiveProgressionRangeValue() + PrimitiveProgressionRangeValue(rangeExpression) isSubtypeOfString(rangeType, builtIns) -> CharSequenceRangeValue(true, AsmTypes.JAVA_STRING_TYPE) isSubtypeOfCharSequence(rangeType, builtIns) -> diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/AbstractForInRangeLoopGenerator.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/AbstractForInRangeLoopGenerator.kt index 3c766116a47..a69d70b05a2 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/AbstractForInRangeLoopGenerator.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/AbstractForInRangeLoopGenerator.kt @@ -24,15 +24,11 @@ import org.jetbrains.kotlin.codegen.AsmUtil.genIncrement import org.jetbrains.kotlin.codegen.ExpressionCodegen import org.jetbrains.kotlin.codegen.StackValue -abstract class AbstractForInRangeLoopGenerator : AbstractForInProgressionOrRangeLoopGenerator { - protected val step: Int - - constructor(codegen: ExpressionCodegen, forExpression: KtForExpression, step: Int) : super(codegen, forExpression) { - assert(step == 1 || step == -1) { "'step' should be either 1 or -1: " + step } - this.step = step - } - - constructor(codegen: ExpressionCodegen, forExpression: KtForExpression) : this(codegen, forExpression, 1) +abstract class AbstractForInRangeLoopGenerator( + codegen: ExpressionCodegen, + forExpression: KtForExpression, + protected val step: Int +) : AbstractForInProgressionOrRangeLoopGenerator(codegen, forExpression) { override fun beforeLoop() { super.beforeLoop() @@ -83,4 +79,8 @@ abstract class AbstractForInRangeLoopGenerator : AbstractForInProgressionOrRange loopParameter.store(StackValue.onStack(asmElementType), v) } } + + init { + assert(step == 1 || step == -1) { "'step' should be either 1 or -1: " + step } + } } diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ForInProgressionExpressionLoopGenerator.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ForInProgressionExpressionLoopGenerator.kt index 7d3417121f9..d043e9fd391 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ForInProgressionExpressionLoopGenerator.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ForInProgressionExpressionLoopGenerator.kt @@ -17,13 +17,16 @@ package org.jetbrains.kotlin.codegen.range.forLoop import org.jetbrains.kotlin.codegen.ExpressionCodegen +import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtForExpression -class ForInProgressionExpressionLoopGenerator(codegen: ExpressionCodegen, forExpression: KtForExpression) - : AbstractForInProgressionLoopGenerator(codegen, forExpression) -{ +class ForInProgressionExpressionLoopGenerator( + codegen: ExpressionCodegen, + forExpression: KtForExpression, + private val rangeExpression: KtExpression +) : AbstractForInProgressionLoopGenerator(codegen, forExpression) { override fun storeProgressionParametersToLocalVars() { - codegen.gen(forExpression.loopRange, asmLoopRangeType) + codegen.gen(rangeExpression, asmLoopRangeType) v.dup() v.dup() diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ForInRangeInstanceLoopGenerator.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ForInRangeInstanceLoopGenerator.kt index f62c6bcccf7..4efdfcfd18f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ForInRangeInstanceLoopGenerator.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/range/forLoop/ForInRangeInstanceLoopGenerator.kt @@ -17,21 +17,30 @@ package org.jetbrains.kotlin.codegen.range.forLoop import org.jetbrains.kotlin.codegen.ExpressionCodegen +import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.psi.KtForExpression class ForInRangeInstanceLoopGenerator( codegen: ExpressionCodegen, - forExpression: KtForExpression -) : AbstractForInRangeLoopGenerator(codegen, forExpression) { + forExpression: KtForExpression, + private val rangeExpression: KtExpression, + private val reversed: Boolean +) : AbstractForInRangeLoopGenerator(codegen, forExpression, if (reversed) -1 else 1) { override fun storeRangeStartAndEnd() { - val loopRangeType = codegen.bindingContext.getType(forExpression.loopRange!!)!! + val loopRangeType = codegen.bindingContext.getType(rangeExpression)!! val asmLoopRangeType = codegen.asmType(loopRangeType) - codegen.gen(forExpression.loopRange, asmLoopRangeType) + codegen.gen(rangeExpression, asmLoopRangeType) v.dup() // ranges inherit first and last from corresponding progressions - generateRangeOrProgressionProperty(asmLoopRangeType, "getFirst", asmElementType, loopParameterType, loopParameterVar) - generateRangeOrProgressionProperty(asmLoopRangeType, "getLast", asmElementType, asmElementType, endVar) + if (reversed) { + generateRangeOrProgressionProperty(asmLoopRangeType, "getLast", asmElementType, loopParameterType, loopParameterVar) + generateRangeOrProgressionProperty(asmLoopRangeType, "getFirst", asmElementType, asmElementType, endVar) + } + else { + generateRangeOrProgressionProperty(asmLoopRangeType, "getFirst", asmElementType, loopParameterType, loopParameterVar) + generateRangeOrProgressionProperty(asmLoopRangeType, "getLast", asmElementType, asmElementType, endVar) + } } } diff --git a/compiler/testData/codegen/box/ranges/forInReversed/ForInReversedReversedRange.kt b/compiler/testData/codegen/box/ranges/forInReversed/ForInReversedReversedRange.kt new file mode 100644 index 00000000000..5e510e8cf4f --- /dev/null +++ b/compiler/testData/codegen/box/ranges/forInReversed/ForInReversedReversedRange.kt @@ -0,0 +1,28 @@ +// WITH_RUNTIME +import kotlin.test.* + +fun intRange() = 1 .. 4 +fun longRange() = 1L .. 4L +fun charRange() = '1' .. '4' + +fun box(): String { + var sum = 0 + for (i in intRange().reversed().reversed()) { + sum = sum * 10 + i + } + assertEquals(1234, sum) + + var sumL = 0L + for (i in longRange().reversed().reversed()) { + sumL = sumL * 10 + i + } + assertEquals(1234L, sumL) + + var sumC = 0 + for (i in charRange().reversed().reversed()) { + sumC = sumC * 10 + i.toInt() - '0'.toInt() + } + assertEquals(1234, sumC) + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/ranges/forInReversed/forInReversedEmptyRange.kt b/compiler/testData/codegen/box/ranges/forInReversed/forInReversedEmptyRange.kt new file mode 100644 index 00000000000..9b4c6037406 --- /dev/null +++ b/compiler/testData/codegen/box/ranges/forInReversed/forInReversedEmptyRange.kt @@ -0,0 +1,22 @@ +// WITH_RUNTIME +import kotlin.test.* + +fun intRange() = 4 .. 1 +fun longRange() = 4L .. 1L +fun charRange() = '4' .. '1' + +fun box(): String { + for (i in intRange().reversed()) { + throw AssertionError("Loop should not be executed") + } + + for (i in longRange().reversed()) { + throw AssertionError("Loop should not be executed") + } + + for (i in charRange().reversed()) { + throw AssertionError("Loop should not be executed") + } + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/ranges/forInReversed/forInReversedRange.kt b/compiler/testData/codegen/box/ranges/forInReversed/forInReversedRange.kt new file mode 100644 index 00000000000..d30a9d1e57d --- /dev/null +++ b/compiler/testData/codegen/box/ranges/forInReversed/forInReversedRange.kt @@ -0,0 +1,28 @@ +// WITH_RUNTIME +import kotlin.test.* + +fun intRange() = 1 .. 4 +fun longRange() = 1L .. 4L +fun charRange() = '1' .. '4' + +fun box(): String { + var sum = 0 + for (i in intRange().reversed()) { + sum = sum * 10 + i + } + assertEquals(4321, sum) + + var sumL = 0L + for (i in longRange().reversed()) { + sumL = sumL * 10 + i + } + assertEquals(4321L, sumL) + + var sumC = 0 + for (i in charRange().reversed()) { + sumC = sumC * 10 + i.toInt() - '0'.toInt() + } + assertEquals(4321, sumC) + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/box/ranges/forInReversed/forInReversedReversedReversedRange.kt b/compiler/testData/codegen/box/ranges/forInReversed/forInReversedReversedReversedRange.kt new file mode 100644 index 00000000000..6e1e54d7e98 --- /dev/null +++ b/compiler/testData/codegen/box/ranges/forInReversed/forInReversedReversedReversedRange.kt @@ -0,0 +1,28 @@ +// WITH_RUNTIME +import kotlin.test.* + +fun intRange() = 1 .. 4 +fun longRange() = 1L .. 4L +fun charRange() = '1' .. '4' + +fun box(): String { + var sum = 0 + for (i in intRange().reversed().reversed().reversed()) { + sum = sum * 10 + i + } + assertEquals(4321, sum) + + var sumL = 0L + for (i in longRange().reversed().reversed().reversed()) { + sumL = sumL * 10 + i + } + assertEquals(4321L, sumL) + + var sumC = 0 + for (i in charRange().reversed().reversed().reversed()) { + sumC = sumC * 10 + i.toInt() - '0'.toInt() + } + assertEquals(4321, sumC) + + return "OK" +} \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/forLoop/forInReversed/ForInReversedReversedRange.kt b/compiler/testData/codegen/bytecodeText/forLoop/forInReversed/ForInReversedReversedRange.kt new file mode 100644 index 00000000000..b1a15e7eda4 --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/forLoop/forInReversed/ForInReversedReversedRange.kt @@ -0,0 +1,30 @@ +// WITH_RUNTIME +import kotlin.test.* + +fun intRange() = 1 .. 4 +fun longRange() = 1L .. 4L +fun charRange() = '1' .. '4' + +fun box(): String { + var sum = 0 + for (i in intRange().reversed().reversed()) { + sum = sum * 10 + i + } + assertEquals(1234, sum) + + var sumL = 0L + for (i in longRange().reversed().reversed()) { + sumL = sumL * 10 + i + } + assertEquals(1234L, sumL) + + var sumC = 0 + for (i in charRange().reversed().reversed()) { + sumC = sumC * 10 + i.toInt() - '0'.toInt() + } + assertEquals(1234, sumC) + + return "OK" +} + +// 0 reversed \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/forLoop/forInReversed/forInReversedRange.kt b/compiler/testData/codegen/bytecodeText/forLoop/forInReversed/forInReversedRange.kt new file mode 100644 index 00000000000..66a1e83caa3 --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/forLoop/forInReversed/forInReversedRange.kt @@ -0,0 +1,30 @@ +// WITH_RUNTIME +import kotlin.test.* + +fun intRange() = 1 .. 4 +fun longRange() = 1L .. 4L +fun charRange() = '1' .. '4' + +fun box(): String { + var sum = 0 + for (i in intRange().reversed()) { + sum = sum * 10 + i + } + assertEquals(4321, sum) + + var sumL = 0L + for (i in longRange().reversed()) { + sumL = sumL * 10 + i + } + assertEquals(4321L, sumL) + + var sumC = 0 + for (i in charRange().reversed()) { + sumC = sumC * 10 + i.toInt() - '0'.toInt() + } + assertEquals(4321, sumC) + + return "OK" +} + +// 0 reversed \ No newline at end of file diff --git a/compiler/testData/codegen/bytecodeText/forLoop/forInReversed/forInReversedReversedReversedRange.kt b/compiler/testData/codegen/bytecodeText/forLoop/forInReversed/forInReversedReversedReversedRange.kt new file mode 100644 index 00000000000..d6713087ec1 --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/forLoop/forInReversed/forInReversedReversedReversedRange.kt @@ -0,0 +1,30 @@ +// WITH_RUNTIME +import kotlin.test.* + +fun intRange() = 1 .. 4 +fun longRange() = 1L .. 4L +fun charRange() = '1' .. '4' + +fun box(): String { + var sum = 0 + for (i in intRange().reversed().reversed().reversed()) { + sum = sum * 10 + i + } + assertEquals(4321, sum) + + var sumL = 0L + for (i in longRange().reversed().reversed().reversed()) { + sumL = sumL * 10 + i + } + assertEquals(4321L, sumL) + + var sumC = 0 + for (i in charRange().reversed().reversed().reversed()) { + sumC = sumC * 10 + i.toInt() - '0'.toInt() + } + assertEquals(4321, sumC) + + return "OK" +} + +// 0 reversed \ No newline at end of file diff --git a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 2f474b9a5a4..0aba06eb35b 100644 --- a/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-ir-jvm/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -15241,6 +15241,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/ranges/forInReversed"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true); } + @TestMetadata("forInReversedEmptyRange.kt") + public void testForInReversedEmptyRange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedEmptyRange.kt"); + doTest(fileName); + } + @TestMetadata("forInReversedEmptyRangeLiteral.kt") public void testForInReversedEmptyRangeLiteral() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedEmptyRangeLiteral.kt"); @@ -15253,6 +15259,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes doTest(fileName); } + @TestMetadata("forInReversedRange.kt") + public void testForInReversedRange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRange.kt"); + doTest(fileName); + } + @TestMetadata("forInReversedRangeLiteral.kt") public void testForInReversedRangeLiteral() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRangeLiteral.kt"); @@ -15264,6 +15276,18 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRangeLiteralWithNonConstBounds.kt"); doTest(fileName); } + + @TestMetadata("ForInReversedReversedRange.kt") + public void testForInReversedReversedRange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/ForInReversedReversedRange.kt"); + doTest(fileName); + } + + @TestMetadata("forInReversedReversedReversedRange.kt") + public void testForInReversedReversedReversedRange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedReversedReversedRange.kt"); + doTest(fileName); + } } @TestMetadata("compiler/testData/codegen/box/ranges/forInUntil") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 6cee7934d51..56de95c8077 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -15241,6 +15241,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/ranges/forInReversed"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true); } + @TestMetadata("forInReversedEmptyRange.kt") + public void testForInReversedEmptyRange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedEmptyRange.kt"); + doTest(fileName); + } + @TestMetadata("forInReversedEmptyRangeLiteral.kt") public void testForInReversedEmptyRangeLiteral() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedEmptyRangeLiteral.kt"); @@ -15253,6 +15259,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { doTest(fileName); } + @TestMetadata("forInReversedRange.kt") + public void testForInReversedRange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRange.kt"); + doTest(fileName); + } + @TestMetadata("forInReversedRangeLiteral.kt") public void testForInReversedRangeLiteral() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRangeLiteral.kt"); @@ -15264,6 +15276,18 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRangeLiteralWithNonConstBounds.kt"); doTest(fileName); } + + @TestMetadata("ForInReversedReversedRange.kt") + public void testForInReversedReversedRange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/ForInReversedReversedRange.kt"); + doTest(fileName); + } + + @TestMetadata("forInReversedReversedReversedRange.kt") + public void testForInReversedReversedReversedRange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedReversedReversedRange.kt"); + doTest(fileName); + } } @TestMetadata("compiler/testData/codegen/box/ranges/forInUntil") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java index f84146a63cc..8931aa96042 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java @@ -1414,11 +1414,29 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { doTest(fileName); } + @TestMetadata("forInReversedRange.kt") + public void testForInReversedRange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/forLoop/forInReversed/forInReversedRange.kt"); + doTest(fileName); + } + @TestMetadata("forInReversedRangeLiteral.kt") public void testForInReversedRangeLiteral() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/forLoop/forInReversed/forInReversedRangeLiteral.kt"); doTest(fileName); } + + @TestMetadata("ForInReversedReversedRange.kt") + public void testForInReversedReversedRange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/forLoop/forInReversed/ForInReversedReversedRange.kt"); + doTest(fileName); + } + + @TestMetadata("forInReversedReversedReversedRange.kt") + public void testForInReversedReversedReversedRange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/forLoop/forInReversed/forInReversedReversedReversedRange.kt"); + doTest(fileName); + } } } diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 460e053a8b8..98dfc96f65b 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -15241,6 +15241,12 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/ranges/forInReversed"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JVM, true); } + @TestMetadata("forInReversedEmptyRange.kt") + public void testForInReversedEmptyRange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedEmptyRange.kt"); + doTest(fileName); + } + @TestMetadata("forInReversedEmptyRangeLiteral.kt") public void testForInReversedEmptyRangeLiteral() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedEmptyRangeLiteral.kt"); @@ -15253,6 +15259,12 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes doTest(fileName); } + @TestMetadata("forInReversedRange.kt") + public void testForInReversedRange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRange.kt"); + doTest(fileName); + } + @TestMetadata("forInReversedRangeLiteral.kt") public void testForInReversedRangeLiteral() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRangeLiteral.kt"); @@ -15264,6 +15276,18 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRangeLiteralWithNonConstBounds.kt"); doTest(fileName); } + + @TestMetadata("ForInReversedReversedRange.kt") + public void testForInReversedReversedRange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/ForInReversedReversedRange.kt"); + doTest(fileName); + } + + @TestMetadata("forInReversedReversedReversedRange.kt") + public void testForInReversedReversedReversedRange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedReversedReversedRange.kt"); + doTest(fileName); + } } @TestMetadata("compiler/testData/codegen/box/ranges/forInUntil") diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 4106939e596..048edbfa531 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -16657,6 +16657,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/codegen/box/ranges/forInReversed"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.JS, true); } + @TestMetadata("forInReversedEmptyRange.kt") + public void testForInReversedEmptyRange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedEmptyRange.kt"); + doTest(fileName); + } + @TestMetadata("forInReversedEmptyRangeLiteral.kt") public void testForInReversedEmptyRangeLiteral() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedEmptyRangeLiteral.kt"); @@ -16669,6 +16675,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { doTest(fileName); } + @TestMetadata("forInReversedRange.kt") + public void testForInReversedRange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRange.kt"); + doTest(fileName); + } + @TestMetadata("forInReversedRangeLiteral.kt") public void testForInReversedRangeLiteral() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRangeLiteral.kt"); @@ -16680,6 +16692,18 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRangeLiteralWithNonConstBounds.kt"); doTest(fileName); } + + @TestMetadata("ForInReversedReversedRange.kt") + public void testForInReversedReversedRange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/ForInReversedReversedRange.kt"); + doTest(fileName); + } + + @TestMetadata("forInReversedReversedReversedRange.kt") + public void testForInReversedReversedReversedRange() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedReversedReversedRange.kt"); + doTest(fileName); + } } @TestMetadata("compiler/testData/codegen/box/ranges/forInUntil")