Intrinsics for 'reversed': support non-literal range expressions
#KT-21323 In Progress
This commit is contained in:
+4
-2
@@ -20,12 +20,14 @@ import org.jetbrains.kotlin.codegen.ExpressionCodegen
|
|||||||
import org.jetbrains.kotlin.codegen.range.forLoop.ForInProgressionExpressionLoopGenerator
|
import org.jetbrains.kotlin.codegen.range.forLoop.ForInProgressionExpressionLoopGenerator
|
||||||
import org.jetbrains.kotlin.codegen.range.inExpression.CallBasedInExpressionGenerator
|
import org.jetbrains.kotlin.codegen.range.inExpression.CallBasedInExpressionGenerator
|
||||||
import org.jetbrains.kotlin.codegen.range.inExpression.InExpressionGenerator
|
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.KtForExpression
|
||||||
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
|
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
|
||||||
|
|
||||||
class PrimitiveProgressionRangeValue : RangeValue {
|
class PrimitiveProgressionRangeValue(private val rangeExpression: KtExpression) : RangeValue {
|
||||||
|
|
||||||
override fun createForLoopGenerator(codegen: ExpressionCodegen, forExpression: KtForExpression) =
|
override fun createForLoopGenerator(codegen: ExpressionCodegen, forExpression: KtForExpression) =
|
||||||
ForInProgressionExpressionLoopGenerator(codegen, forExpression)
|
ForInProgressionExpressionLoopGenerator(codegen, forExpression, rangeExpression)
|
||||||
|
|
||||||
override fun createInExpressionGenerator(codegen: ExpressionCodegen, operatorReference: KtSimpleNameExpression): InExpressionGenerator =
|
override fun createInExpressionGenerator(codegen: ExpressionCodegen, operatorReference: KtSimpleNameExpression): InExpressionGenerator =
|
||||||
CallBasedInExpressionGenerator(codegen, operatorReference)
|
CallBasedInExpressionGenerator(codegen, operatorReference)
|
||||||
|
|||||||
@@ -18,15 +18,21 @@ package org.jetbrains.kotlin.codegen.range
|
|||||||
|
|
||||||
import org.jetbrains.kotlin.codegen.ExpressionCodegen
|
import org.jetbrains.kotlin.codegen.ExpressionCodegen
|
||||||
import org.jetbrains.kotlin.codegen.range.forLoop.ForInRangeInstanceLoopGenerator
|
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.CallBasedInExpressionGenerator
|
||||||
import org.jetbrains.kotlin.codegen.range.inExpression.InExpressionGenerator
|
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.KtForExpression
|
||||||
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
|
import org.jetbrains.kotlin.psi.KtSimpleNameExpression
|
||||||
|
|
||||||
class PrimitiveRangeRangeValue : RangeValue {
|
class PrimitiveRangeRangeValue(private val rangeExpression: KtExpression) : ReversableRangeValue {
|
||||||
|
|
||||||
override fun createForLoopGenerator(codegen: ExpressionCodegen, forExpression: KtForExpression) =
|
override fun createForLoopGenerator(codegen: ExpressionCodegen, forExpression: KtForExpression) =
|
||||||
ForInRangeInstanceLoopGenerator(codegen, forExpression)
|
ForInRangeInstanceLoopGenerator(codegen, forExpression, rangeExpression, reversed = false)
|
||||||
|
|
||||||
override fun createInExpressionGenerator(codegen: ExpressionCodegen, operatorReference: KtSimpleNameExpression): InExpressionGenerator =
|
override fun createInExpressionGenerator(codegen: ExpressionCodegen, operatorReference: KtSimpleNameExpression): InExpressionGenerator =
|
||||||
CallBasedInExpressionGenerator(codegen, operatorReference)
|
CallBasedInExpressionGenerator(codegen, operatorReference)
|
||||||
|
|
||||||
|
override fun createForInReversedLoopGenerator(codegen: ExpressionCodegen, forExpression: KtForExpression): ForLoopGenerator =
|
||||||
|
ForInRangeInstanceLoopGenerator(codegen, forExpression, rangeExpression, reversed = true)
|
||||||
}
|
}
|
||||||
@@ -59,9 +59,9 @@ fun ExpressionCodegen.createRangeValueForExpression(rangeExpression: KtExpressio
|
|||||||
}
|
}
|
||||||
|
|
||||||
isPrimitiveRange(rangeType) ->
|
isPrimitiveRange(rangeType) ->
|
||||||
PrimitiveRangeRangeValue()
|
PrimitiveRangeRangeValue(rangeExpression)
|
||||||
isPrimitiveProgression(rangeType) ->
|
isPrimitiveProgression(rangeType) ->
|
||||||
PrimitiveProgressionRangeValue()
|
PrimitiveProgressionRangeValue(rangeExpression)
|
||||||
isSubtypeOfString(rangeType, builtIns) ->
|
isSubtypeOfString(rangeType, builtIns) ->
|
||||||
CharSequenceRangeValue(true, AsmTypes.JAVA_STRING_TYPE)
|
CharSequenceRangeValue(true, AsmTypes.JAVA_STRING_TYPE)
|
||||||
isSubtypeOfCharSequence(rangeType, builtIns) ->
|
isSubtypeOfCharSequence(rangeType, builtIns) ->
|
||||||
|
|||||||
+9
-9
@@ -24,15 +24,11 @@ import org.jetbrains.kotlin.codegen.AsmUtil.genIncrement
|
|||||||
import org.jetbrains.kotlin.codegen.ExpressionCodegen
|
import org.jetbrains.kotlin.codegen.ExpressionCodegen
|
||||||
import org.jetbrains.kotlin.codegen.StackValue
|
import org.jetbrains.kotlin.codegen.StackValue
|
||||||
|
|
||||||
abstract class AbstractForInRangeLoopGenerator : AbstractForInProgressionOrRangeLoopGenerator {
|
abstract class AbstractForInRangeLoopGenerator(
|
||||||
protected val step: Int
|
codegen: ExpressionCodegen,
|
||||||
|
forExpression: KtForExpression,
|
||||||
constructor(codegen: ExpressionCodegen, forExpression: KtForExpression, step: Int) : super(codegen, forExpression) {
|
protected val step: Int
|
||||||
assert(step == 1 || step == -1) { "'step' should be either 1 or -1: " + step }
|
) : AbstractForInProgressionOrRangeLoopGenerator(codegen, forExpression) {
|
||||||
this.step = step
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(codegen: ExpressionCodegen, forExpression: KtForExpression) : this(codegen, forExpression, 1)
|
|
||||||
|
|
||||||
override fun beforeLoop() {
|
override fun beforeLoop() {
|
||||||
super.beforeLoop()
|
super.beforeLoop()
|
||||||
@@ -83,4 +79,8 @@ abstract class AbstractForInRangeLoopGenerator : AbstractForInProgressionOrRange
|
|||||||
loopParameter.store(StackValue.onStack(asmElementType), v)
|
loopParameter.store(StackValue.onStack(asmElementType), v)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
init {
|
||||||
|
assert(step == 1 || step == -1) { "'step' should be either 1 or -1: " + step }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+7
-4
@@ -17,13 +17,16 @@
|
|||||||
package org.jetbrains.kotlin.codegen.range.forLoop
|
package org.jetbrains.kotlin.codegen.range.forLoop
|
||||||
|
|
||||||
import org.jetbrains.kotlin.codegen.ExpressionCodegen
|
import org.jetbrains.kotlin.codegen.ExpressionCodegen
|
||||||
|
import org.jetbrains.kotlin.psi.KtExpression
|
||||||
import org.jetbrains.kotlin.psi.KtForExpression
|
import org.jetbrains.kotlin.psi.KtForExpression
|
||||||
|
|
||||||
class ForInProgressionExpressionLoopGenerator(codegen: ExpressionCodegen, forExpression: KtForExpression)
|
class ForInProgressionExpressionLoopGenerator(
|
||||||
: AbstractForInProgressionLoopGenerator(codegen, forExpression)
|
codegen: ExpressionCodegen,
|
||||||
{
|
forExpression: KtForExpression,
|
||||||
|
private val rangeExpression: KtExpression
|
||||||
|
) : AbstractForInProgressionLoopGenerator(codegen, forExpression) {
|
||||||
override fun storeProgressionParametersToLocalVars() {
|
override fun storeProgressionParametersToLocalVars() {
|
||||||
codegen.gen(forExpression.loopRange, asmLoopRangeType)
|
codegen.gen(rangeExpression, asmLoopRangeType)
|
||||||
v.dup()
|
v.dup()
|
||||||
v.dup()
|
v.dup()
|
||||||
|
|
||||||
|
|||||||
+15
-6
@@ -17,21 +17,30 @@
|
|||||||
package org.jetbrains.kotlin.codegen.range.forLoop
|
package org.jetbrains.kotlin.codegen.range.forLoop
|
||||||
|
|
||||||
import org.jetbrains.kotlin.codegen.ExpressionCodegen
|
import org.jetbrains.kotlin.codegen.ExpressionCodegen
|
||||||
|
import org.jetbrains.kotlin.psi.KtExpression
|
||||||
import org.jetbrains.kotlin.psi.KtForExpression
|
import org.jetbrains.kotlin.psi.KtForExpression
|
||||||
|
|
||||||
class ForInRangeInstanceLoopGenerator(
|
class ForInRangeInstanceLoopGenerator(
|
||||||
codegen: ExpressionCodegen,
|
codegen: ExpressionCodegen,
|
||||||
forExpression: KtForExpression
|
forExpression: KtForExpression,
|
||||||
) : AbstractForInRangeLoopGenerator(codegen, forExpression) {
|
private val rangeExpression: KtExpression,
|
||||||
|
private val reversed: Boolean
|
||||||
|
) : AbstractForInRangeLoopGenerator(codegen, forExpression, if (reversed) -1 else 1) {
|
||||||
|
|
||||||
override fun storeRangeStartAndEnd() {
|
override fun storeRangeStartAndEnd() {
|
||||||
val loopRangeType = codegen.bindingContext.getType(forExpression.loopRange!!)!!
|
val loopRangeType = codegen.bindingContext.getType(rangeExpression)!!
|
||||||
val asmLoopRangeType = codegen.asmType(loopRangeType)
|
val asmLoopRangeType = codegen.asmType(loopRangeType)
|
||||||
codegen.gen(forExpression.loopRange, asmLoopRangeType)
|
codegen.gen(rangeExpression, asmLoopRangeType)
|
||||||
v.dup()
|
v.dup()
|
||||||
|
|
||||||
// ranges inherit first and last from corresponding progressions
|
// ranges inherit first and last from corresponding progressions
|
||||||
generateRangeOrProgressionProperty(asmLoopRangeType, "getFirst", asmElementType, loopParameterType, loopParameterVar)
|
if (reversed) {
|
||||||
generateRangeOrProgressionProperty(asmLoopRangeType, "getLast", asmElementType, asmElementType, endVar)
|
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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+28
@@ -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"
|
||||||
|
}
|
||||||
+22
@@ -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"
|
||||||
|
}
|
||||||
@@ -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"
|
||||||
|
}
|
||||||
+28
@@ -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"
|
||||||
|
}
|
||||||
+30
@@ -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
|
||||||
+30
@@ -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
|
||||||
Vendored
+30
@@ -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
|
||||||
+24
@@ -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);
|
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")
|
@TestMetadata("forInReversedEmptyRangeLiteral.kt")
|
||||||
public void testForInReversedEmptyRangeLiteral() throws Exception {
|
public void testForInReversedEmptyRangeLiteral() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedEmptyRangeLiteral.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedEmptyRangeLiteral.kt");
|
||||||
@@ -15253,6 +15259,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("forInReversedRangeLiteral.kt")
|
||||||
public void testForInReversedRangeLiteral() throws Exception {
|
public void testForInReversedRangeLiteral() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRangeLiteral.kt");
|
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");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRangeLiteralWithNonConstBounds.kt");
|
||||||
doTest(fileName);
|
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")
|
@TestMetadata("compiler/testData/codegen/box/ranges/forInUntil")
|
||||||
|
|||||||
@@ -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);
|
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")
|
@TestMetadata("forInReversedEmptyRangeLiteral.kt")
|
||||||
public void testForInReversedEmptyRangeLiteral() throws Exception {
|
public void testForInReversedEmptyRangeLiteral() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedEmptyRangeLiteral.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedEmptyRangeLiteral.kt");
|
||||||
@@ -15253,6 +15259,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("forInReversedRangeLiteral.kt")
|
||||||
public void testForInReversedRangeLiteral() throws Exception {
|
public void testForInReversedRangeLiteral() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRangeLiteral.kt");
|
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");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRangeLiteralWithNonConstBounds.kt");
|
||||||
doTest(fileName);
|
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")
|
@TestMetadata("compiler/testData/codegen/box/ranges/forInUntil")
|
||||||
|
|||||||
@@ -1414,11 +1414,29 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest {
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("forInReversedRangeLiteral.kt")
|
||||||
public void testForInReversedRangeLiteral() throws Exception {
|
public void testForInReversedRangeLiteral() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/forLoop/forInReversed/forInReversedRangeLiteral.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/forLoop/forInReversed/forInReversedRangeLiteral.kt");
|
||||||
doTest(fileName);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
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")
|
@TestMetadata("forInReversedEmptyRangeLiteral.kt")
|
||||||
public void testForInReversedEmptyRangeLiteral() throws Exception {
|
public void testForInReversedEmptyRangeLiteral() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedEmptyRangeLiteral.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedEmptyRangeLiteral.kt");
|
||||||
@@ -15253,6 +15259,12 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("forInReversedRangeLiteral.kt")
|
||||||
public void testForInReversedRangeLiteral() throws Exception {
|
public void testForInReversedRangeLiteral() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRangeLiteral.kt");
|
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");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRangeLiteralWithNonConstBounds.kt");
|
||||||
doTest(fileName);
|
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")
|
@TestMetadata("compiler/testData/codegen/box/ranges/forInUntil")
|
||||||
|
|||||||
+24
@@ -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);
|
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")
|
@TestMetadata("forInReversedEmptyRangeLiteral.kt")
|
||||||
public void testForInReversedEmptyRangeLiteral() throws Exception {
|
public void testForInReversedEmptyRangeLiteral() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedEmptyRangeLiteral.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedEmptyRangeLiteral.kt");
|
||||||
@@ -16669,6 +16675,12 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
|
|||||||
doTest(fileName);
|
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")
|
@TestMetadata("forInReversedRangeLiteral.kt")
|
||||||
public void testForInReversedRangeLiteral() throws Exception {
|
public void testForInReversedRangeLiteral() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRangeLiteral.kt");
|
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");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/ranges/forInReversed/forInReversedRangeLiteralWithNonConstBounds.kt");
|
||||||
doTest(fileName);
|
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")
|
@TestMetadata("compiler/testData/codegen/box/ranges/forInUntil")
|
||||||
|
|||||||
Reference in New Issue
Block a user