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> {
|
||||
val result = arrayOfNulls<T>(size)
|
||||
for (i in 0..size - 1) {
|
||||
for (i in result.indices) {
|
||||
result[i] = init(i)
|
||||
}
|
||||
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 {
|
||||
val result = DoubleArray(size)
|
||||
for (i in 0..size - 1) {
|
||||
for (i in result.indices) {
|
||||
result[i] = init(i)
|
||||
}
|
||||
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 {
|
||||
val result = FloatArray(size)
|
||||
for (i in 0..size - 1) {
|
||||
for (i in result.indices) {
|
||||
result[i] = init(i)
|
||||
}
|
||||
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 {
|
||||
val result = LongArray(size)
|
||||
for (i in 0..size - 1) {
|
||||
for (i in result.indices) {
|
||||
result[i] = init(i)
|
||||
}
|
||||
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 {
|
||||
val result = IntArray(size)
|
||||
for (i in 0..size - 1) {
|
||||
for (i in result.indices) {
|
||||
result[i] = init(i)
|
||||
}
|
||||
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 {
|
||||
val result = CharArray(size)
|
||||
for (i in 0..size - 1) {
|
||||
for (i in result.indices) {
|
||||
result[i] = init(i)
|
||||
}
|
||||
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 {
|
||||
val result = ShortArray(size)
|
||||
for (i in 0..size - 1) {
|
||||
for (i in result.indices) {
|
||||
result[i] = init(i)
|
||||
}
|
||||
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 {
|
||||
val result = ByteArray(size)
|
||||
for (i in 0..size - 1) {
|
||||
for (i in result.indices) {
|
||||
result[i] = init(i)
|
||||
}
|
||||
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 {
|
||||
val result = BooleanArray(size)
|
||||
for (i in 0..size - 1) {
|
||||
for (i in result.indices) {
|
||||
result[i] = init(i)
|
||||
}
|
||||
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);
|
||||
}
|
||||
|
||||
@TestMetadata("intrinsicArrayConstructorsUseCounterLoop.kt")
|
||||
public void testIntrinsicArrayConstructorsUseCounterLoop() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/forLoop/intrinsicArrayConstructorsUseCounterLoop.kt");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("loopVarInterval.kt")
|
||||
public void testLoopVarInterval() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/bytecodeText/forLoop/loopVarInterval.kt");
|
||||
|
||||
Reference in New Issue
Block a user