Use counter loop in intrinsic array constructors
#KT-19149 Fixed Target versions 1.1.5
This commit is contained in:
+9
-9
@@ -40,7 +40,7 @@ private inline fun <reified T> arrayOf(vararg elements: T): Array<T> = elements
|
|||||||
|
|
||||||
private inline fun <reified T> Array(size: Int, init: (Int) -> T): Array<T> {
|
private inline fun <reified T> Array(size: Int, init: (Int) -> T): Array<T> {
|
||||||
val result = arrayOfNulls<T>(size)
|
val result = arrayOfNulls<T>(size)
|
||||||
for (i in 0..size - 1) {
|
for (i in result.indices) {
|
||||||
result[i] = init(i)
|
result[i] = init(i)
|
||||||
}
|
}
|
||||||
return result as Array<T>
|
return result as Array<T>
|
||||||
@@ -48,7 +48,7 @@ private inline fun <reified T> Array(size: Int, init: (Int) -> T): Array<T> {
|
|||||||
|
|
||||||
private inline fun DoubleArray(size: Int, init: (Int) -> Double): DoubleArray {
|
private inline fun DoubleArray(size: Int, init: (Int) -> Double): DoubleArray {
|
||||||
val result = DoubleArray(size)
|
val result = DoubleArray(size)
|
||||||
for (i in 0..size - 1) {
|
for (i in result.indices) {
|
||||||
result[i] = init(i)
|
result[i] = init(i)
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
@@ -56,7 +56,7 @@ private inline fun DoubleArray(size: Int, init: (Int) -> Double): DoubleArray {
|
|||||||
|
|
||||||
private inline fun FloatArray(size: Int, init: (Int) -> Float): FloatArray {
|
private inline fun FloatArray(size: Int, init: (Int) -> Float): FloatArray {
|
||||||
val result = FloatArray(size)
|
val result = FloatArray(size)
|
||||||
for (i in 0..size - 1) {
|
for (i in result.indices) {
|
||||||
result[i] = init(i)
|
result[i] = init(i)
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
@@ -64,7 +64,7 @@ private inline fun FloatArray(size: Int, init: (Int) -> Float): FloatArray {
|
|||||||
|
|
||||||
private inline fun LongArray(size: Int, init: (Int) -> Long): LongArray {
|
private inline fun LongArray(size: Int, init: (Int) -> Long): LongArray {
|
||||||
val result = LongArray(size)
|
val result = LongArray(size)
|
||||||
for (i in 0..size - 1) {
|
for (i in result.indices) {
|
||||||
result[i] = init(i)
|
result[i] = init(i)
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
@@ -72,7 +72,7 @@ private inline fun LongArray(size: Int, init: (Int) -> Long): LongArray {
|
|||||||
|
|
||||||
private inline fun IntArray(size: Int, init: (Int) -> Int): IntArray {
|
private inline fun IntArray(size: Int, init: (Int) -> Int): IntArray {
|
||||||
val result = IntArray(size)
|
val result = IntArray(size)
|
||||||
for (i in 0..size - 1) {
|
for (i in result.indices) {
|
||||||
result[i] = init(i)
|
result[i] = init(i)
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
@@ -80,7 +80,7 @@ private inline fun IntArray(size: Int, init: (Int) -> Int): IntArray {
|
|||||||
|
|
||||||
private inline fun CharArray(size: Int, init: (Int) -> Char): CharArray {
|
private inline fun CharArray(size: Int, init: (Int) -> Char): CharArray {
|
||||||
val result = CharArray(size)
|
val result = CharArray(size)
|
||||||
for (i in 0..size - 1) {
|
for (i in result.indices) {
|
||||||
result[i] = init(i)
|
result[i] = init(i)
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
@@ -88,7 +88,7 @@ private inline fun CharArray(size: Int, init: (Int) -> Char): CharArray {
|
|||||||
|
|
||||||
private inline fun ShortArray(size: Int, init: (Int) -> Short): ShortArray {
|
private inline fun ShortArray(size: Int, init: (Int) -> Short): ShortArray {
|
||||||
val result = ShortArray(size)
|
val result = ShortArray(size)
|
||||||
for (i in 0..size - 1) {
|
for (i in result.indices) {
|
||||||
result[i] = init(i)
|
result[i] = init(i)
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
@@ -96,7 +96,7 @@ private inline fun ShortArray(size: Int, init: (Int) -> Short): ShortArray {
|
|||||||
|
|
||||||
private inline fun ByteArray(size: Int, init: (Int) -> Byte): ByteArray {
|
private inline fun ByteArray(size: Int, init: (Int) -> Byte): ByteArray {
|
||||||
val result = ByteArray(size)
|
val result = ByteArray(size)
|
||||||
for (i in 0..size - 1) {
|
for (i in result.indices) {
|
||||||
result[i] = init(i)
|
result[i] = init(i)
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
@@ -104,7 +104,7 @@ private inline fun ByteArray(size: Int, init: (Int) -> Byte): ByteArray {
|
|||||||
|
|
||||||
private inline fun BooleanArray(size: Int, init: (Int) -> Boolean): BooleanArray {
|
private inline fun BooleanArray(size: Int, init: (Int) -> Boolean): BooleanArray {
|
||||||
val result = BooleanArray(size)
|
val result = BooleanArray(size)
|
||||||
for (i in 0..size - 1) {
|
for (i in result.indices) {
|
||||||
result[i] = init(i)
|
result[i] = init(i)
|
||||||
}
|
}
|
||||||
return result
|
return result
|
||||||
|
|||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
fun Int.toTrue() = true
|
||||||
|
|
||||||
|
fun testBooleanArray(n: Int) =
|
||||||
|
BooleanArray(n) { it.toTrue() }
|
||||||
|
|
||||||
|
fun testByteArray(n: Int) =
|
||||||
|
ByteArray(n) { it.toByte() }
|
||||||
|
|
||||||
|
fun testShortArray(n: Int) =
|
||||||
|
ShortArray(n) { it.toShort() }
|
||||||
|
|
||||||
|
fun testIntArray(n: Int) =
|
||||||
|
IntArray(n) { it }
|
||||||
|
|
||||||
|
fun testLongArray(n: Int) =
|
||||||
|
LongArray(n) { it.toLong() }
|
||||||
|
|
||||||
|
fun testFloatArray(n: Int) =
|
||||||
|
FloatArray(n) { it.toFloat() }
|
||||||
|
|
||||||
|
fun testDoubleArray(n: Int) =
|
||||||
|
DoubleArray(n) { it.toDouble() }
|
||||||
|
|
||||||
|
fun testObjectArray(n: Int) =
|
||||||
|
Array(n) { it as Any }
|
||||||
|
|
||||||
|
// 0 IF_ICMPGT
|
||||||
|
// 0 IF_CMPEQ
|
||||||
|
// 8 IF_ICMPGE
|
||||||
@@ -1256,6 +1256,12 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("intrinsicArrayConstructorsUseCounterLoop.kt")
|
||||||
|
public void testIntrinsicArrayConstructorsUseCounterLoop() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/forLoop/intrinsicArrayConstructorsUseCounterLoop.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("loopVarInterval.kt")
|
@TestMetadata("loopVarInterval.kt")
|
||||||
public void testLoopVarInterval() throws Exception {
|
public void testLoopVarInterval() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/forLoop/loopVarInterval.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/forLoop/loopVarInterval.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user