From 202cd811341c798bf26d01048fcbfbcc61b1ce6d Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Thu, 8 Dec 2016 04:46:18 +0300 Subject: [PATCH] Unify Array.copyOf and copyOfRange function templates between JVM and JS. --- .../src/core/generated/_ArraysJs.kt | 414 ++++++++-------- libraries/stdlib/src/generated/_Arrays.kt | 459 +++++++++--------- .../src/templates/SpecialJS.kt | 51 -- .../src/templates/SpecialJVM.kt | 119 +++-- .../src/templates/engine/Engine.kt | 5 + 5 files changed, 510 insertions(+), 538 deletions(-) diff --git a/js/js.libraries/src/core/generated/_ArraysJs.kt b/js/js.libraries/src/core/generated/_ArraysJs.kt index 2c9b86f3cd9..59b476578ff 100644 --- a/js/js.libraries/src/core/generated/_ArraysJs.kt +++ b/js/js.libraries/src/core/generated/_ArraysJs.kt @@ -12850,6 +12850,213 @@ public inline fun CharArray.asList(): List { return this.unsafeCast>().asList() } +/** + * Returns new array which is a copy of the original array. + */ +@Suppress("NOTHING_TO_INLINE") +public inline fun Array.copyOf(): Array { + return this.asDynamic().slice() +} + +/** + * Returns new array which is a copy of the original array. + */ +@Suppress("NOTHING_TO_INLINE") +public inline fun ByteArray.copyOf(): ByteArray { + return this.asDynamic().slice() +} + +/** + * Returns new array which is a copy of the original array. + */ +@Suppress("NOTHING_TO_INLINE") +public inline fun ShortArray.copyOf(): ShortArray { + return this.asDynamic().slice() +} + +/** + * Returns new array which is a copy of the original array. + */ +@Suppress("NOTHING_TO_INLINE") +public inline fun IntArray.copyOf(): IntArray { + return this.asDynamic().slice() +} + +/** + * Returns new array which is a copy of the original array. + */ +@Suppress("NOTHING_TO_INLINE") +public inline fun LongArray.copyOf(): LongArray { + return this.asDynamic().slice() +} + +/** + * Returns new array which is a copy of the original array. + */ +@Suppress("NOTHING_TO_INLINE") +public inline fun FloatArray.copyOf(): FloatArray { + return this.asDynamic().slice() +} + +/** + * Returns new array which is a copy of the original array. + */ +@Suppress("NOTHING_TO_INLINE") +public inline fun DoubleArray.copyOf(): DoubleArray { + return this.asDynamic().slice() +} + +/** + * Returns new array which is a copy of the original array. + */ +@Suppress("NOTHING_TO_INLINE") +public inline fun BooleanArray.copyOf(): BooleanArray { + return this.asDynamic().slice() +} + +/** + * Returns new array which is a copy of the original array. + */ +@Suppress("NOTHING_TO_INLINE") +public inline fun CharArray.copyOf(): CharArray { + return this.asDynamic().slice() +} + +/** + * Returns new array which is a copy of the original array, resized to the given [newSize]. + */ +public fun ByteArray.copyOf(newSize: Int): ByteArray { + return arrayCopyResize(this, newSize, 0) +} + +/** + * Returns new array which is a copy of the original array, resized to the given [newSize]. + */ +public fun ShortArray.copyOf(newSize: Int): ShortArray { + return arrayCopyResize(this, newSize, 0) +} + +/** + * Returns new array which is a copy of the original array, resized to the given [newSize]. + */ +public fun IntArray.copyOf(newSize: Int): IntArray { + return arrayCopyResize(this, newSize, 0) +} + +/** + * Returns new array which is a copy of the original array, resized to the given [newSize]. + */ +public fun LongArray.copyOf(newSize: Int): LongArray { + return arrayCopyResize(this, newSize, 0L) +} + +/** + * Returns new array which is a copy of the original array, resized to the given [newSize]. + */ +public fun FloatArray.copyOf(newSize: Int): FloatArray { + return arrayCopyResize(this, newSize, 0.0f) +} + +/** + * Returns new array which is a copy of the original array, resized to the given [newSize]. + */ +public fun DoubleArray.copyOf(newSize: Int): DoubleArray { + return arrayCopyResize(this, newSize, 0.0) +} + +/** + * Returns new array which is a copy of the original array, resized to the given [newSize]. + */ +public fun BooleanArray.copyOf(newSize: Int): BooleanArray { + return arrayCopyResize(this, newSize, false) +} + +/** + * Returns new array which is a copy of the original array, resized to the given [newSize]. + */ +public fun CharArray.copyOf(newSize: Int): CharArray { + return arrayCopyResize(this, newSize, '\u0000') +} + +/** + * Returns new array which is a copy of the original array, resized to the given [newSize]. + */ +public fun Array.copyOf(newSize: Int): Array { + return arrayCopyResize(this, newSize, null) +} + +/** + * Returns new array which is a copy of range of original array. + */ +@Suppress("NOTHING_TO_INLINE") +public inline fun Array.copyOfRange(fromIndex: Int, toIndex: Int): Array { + return this.asDynamic().slice(fromIndex, toIndex) +} + +/** + * Returns new array which is a copy of range of original array. + */ +@Suppress("NOTHING_TO_INLINE") +public inline fun ByteArray.copyOfRange(fromIndex: Int, toIndex: Int): ByteArray { + return this.asDynamic().slice(fromIndex, toIndex) +} + +/** + * Returns new array which is a copy of range of original array. + */ +@Suppress("NOTHING_TO_INLINE") +public inline fun ShortArray.copyOfRange(fromIndex: Int, toIndex: Int): ShortArray { + return this.asDynamic().slice(fromIndex, toIndex) +} + +/** + * Returns new array which is a copy of range of original array. + */ +@Suppress("NOTHING_TO_INLINE") +public inline fun IntArray.copyOfRange(fromIndex: Int, toIndex: Int): IntArray { + return this.asDynamic().slice(fromIndex, toIndex) +} + +/** + * Returns new array which is a copy of range of original array. + */ +@Suppress("NOTHING_TO_INLINE") +public inline fun LongArray.copyOfRange(fromIndex: Int, toIndex: Int): LongArray { + return this.asDynamic().slice(fromIndex, toIndex) +} + +/** + * Returns new array which is a copy of range of original array. + */ +@Suppress("NOTHING_TO_INLINE") +public inline fun FloatArray.copyOfRange(fromIndex: Int, toIndex: Int): FloatArray { + return this.asDynamic().slice(fromIndex, toIndex) +} + +/** + * Returns new array which is a copy of range of original array. + */ +@Suppress("NOTHING_TO_INLINE") +public inline fun DoubleArray.copyOfRange(fromIndex: Int, toIndex: Int): DoubleArray { + return this.asDynamic().slice(fromIndex, toIndex) +} + +/** + * Returns new array which is a copy of range of original array. + */ +@Suppress("NOTHING_TO_INLINE") +public inline fun BooleanArray.copyOfRange(fromIndex: Int, toIndex: Int): BooleanArray { + return this.asDynamic().slice(fromIndex, toIndex) +} + +/** + * Returns new array which is a copy of range of original array. + */ +@Suppress("NOTHING_TO_INLINE") +public inline fun CharArray.copyOfRange(fromIndex: Int, toIndex: Int): CharArray { + return this.asDynamic().slice(fromIndex, toIndex) +} + /** * Sorts the array in-place. */ @@ -12978,213 +13185,6 @@ public fun CharArray.toTypedArray(): Array { return copyOf().unsafeCast>() } -/** - * Returns new array which is a copy of the original array. - */ -@Suppress("NOTHING_TO_INLINE") -public inline fun Array.copyOf(): Array { - return this.asDynamic().slice() -} - -/** - * Returns new array which is a copy of the original array. - */ -@Suppress("NOTHING_TO_INLINE") -public inline fun ByteArray.copyOf(): ByteArray { - return this.asDynamic().slice() -} - -/** - * Returns new array which is a copy of the original array. - */ -@Suppress("NOTHING_TO_INLINE") -public inline fun ShortArray.copyOf(): ShortArray { - return this.asDynamic().slice() -} - -/** - * Returns new array which is a copy of the original array. - */ -@Suppress("NOTHING_TO_INLINE") -public inline fun IntArray.copyOf(): IntArray { - return this.asDynamic().slice() -} - -/** - * Returns new array which is a copy of the original array. - */ -@Suppress("NOTHING_TO_INLINE") -public inline fun LongArray.copyOf(): LongArray { - return this.asDynamic().slice() -} - -/** - * Returns new array which is a copy of the original array. - */ -@Suppress("NOTHING_TO_INLINE") -public inline fun FloatArray.copyOf(): FloatArray { - return this.asDynamic().slice() -} - -/** - * Returns new array which is a copy of the original array. - */ -@Suppress("NOTHING_TO_INLINE") -public inline fun DoubleArray.copyOf(): DoubleArray { - return this.asDynamic().slice() -} - -/** - * Returns new array which is a copy of the original array. - */ -@Suppress("NOTHING_TO_INLINE") -public inline fun BooleanArray.copyOf(): BooleanArray { - return this.asDynamic().slice() -} - -/** - * Returns new array which is a copy of the original array. - */ -@Suppress("NOTHING_TO_INLINE") -public inline fun CharArray.copyOf(): CharArray { - return this.asDynamic().slice() -} - -/** - * Returns new array which is a copy of the original array. - */ -public fun ByteArray.copyOf(newSize: Int): ByteArray { - return arrayCopyResize(this, newSize, 0) -} - -/** - * Returns new array which is a copy of the original array. - */ -public fun ShortArray.copyOf(newSize: Int): ShortArray { - return arrayCopyResize(this, newSize, 0) -} - -/** - * Returns new array which is a copy of the original array. - */ -public fun IntArray.copyOf(newSize: Int): IntArray { - return arrayCopyResize(this, newSize, 0) -} - -/** - * Returns new array which is a copy of the original array. - */ -public fun LongArray.copyOf(newSize: Int): LongArray { - return arrayCopyResize(this, newSize, 0L) -} - -/** - * Returns new array which is a copy of the original array. - */ -public fun FloatArray.copyOf(newSize: Int): FloatArray { - return arrayCopyResize(this, newSize, 0.0f) -} - -/** - * Returns new array which is a copy of the original array. - */ -public fun DoubleArray.copyOf(newSize: Int): DoubleArray { - return arrayCopyResize(this, newSize, 0.0) -} - -/** - * Returns new array which is a copy of the original array. - */ -public fun BooleanArray.copyOf(newSize: Int): BooleanArray { - return arrayCopyResize(this, newSize, false) -} - -/** - * Returns new array which is a copy of the original array. - */ -public fun CharArray.copyOf(newSize: Int): CharArray { - return arrayCopyResize(this, newSize, '\u0000') -} - -/** - * Returns new array which is a copy of the original array. - */ -public fun Array.copyOf(newSize: Int): Array { - return arrayCopyResize(this, newSize, null) -} - -/** - * Returns new array which is a copy of range of original array. - */ -@Suppress("NOTHING_TO_INLINE") -public inline fun Array.copyOfRange(fromIndex: Int, toIndex: Int): Array { - return this.asDynamic().slice(fromIndex, toIndex) -} - -/** - * Returns new array which is a copy of range of original array. - */ -@Suppress("NOTHING_TO_INLINE") -public inline fun ByteArray.copyOfRange(fromIndex: Int, toIndex: Int): ByteArray { - return this.asDynamic().slice(fromIndex, toIndex) -} - -/** - * Returns new array which is a copy of range of original array. - */ -@Suppress("NOTHING_TO_INLINE") -public inline fun ShortArray.copyOfRange(fromIndex: Int, toIndex: Int): ShortArray { - return this.asDynamic().slice(fromIndex, toIndex) -} - -/** - * Returns new array which is a copy of range of original array. - */ -@Suppress("NOTHING_TO_INLINE") -public inline fun IntArray.copyOfRange(fromIndex: Int, toIndex: Int): IntArray { - return this.asDynamic().slice(fromIndex, toIndex) -} - -/** - * Returns new array which is a copy of range of original array. - */ -@Suppress("NOTHING_TO_INLINE") -public inline fun LongArray.copyOfRange(fromIndex: Int, toIndex: Int): LongArray { - return this.asDynamic().slice(fromIndex, toIndex) -} - -/** - * Returns new array which is a copy of range of original array. - */ -@Suppress("NOTHING_TO_INLINE") -public inline fun FloatArray.copyOfRange(fromIndex: Int, toIndex: Int): FloatArray { - return this.asDynamic().slice(fromIndex, toIndex) -} - -/** - * Returns new array which is a copy of range of original array. - */ -@Suppress("NOTHING_TO_INLINE") -public inline fun DoubleArray.copyOfRange(fromIndex: Int, toIndex: Int): DoubleArray { - return this.asDynamic().slice(fromIndex, toIndex) -} - -/** - * Returns new array which is a copy of range of original array. - */ -@Suppress("NOTHING_TO_INLINE") -public inline fun BooleanArray.copyOfRange(fromIndex: Int, toIndex: Int): BooleanArray { - return this.asDynamic().slice(fromIndex, toIndex) -} - -/** - * Returns new array which is a copy of range of original array. - */ -@Suppress("NOTHING_TO_INLINE") -public inline fun CharArray.copyOfRange(fromIndex: Int, toIndex: Int): CharArray { - return this.asDynamic().slice(fromIndex, toIndex) -} - /** * Returns an array containing all elements of the original array and then the given [element]. */ diff --git a/libraries/stdlib/src/generated/_Arrays.kt b/libraries/stdlib/src/generated/_Arrays.kt index bf523b4a7ef..d0c9d80da7d 100644 --- a/libraries/stdlib/src/generated/_Arrays.kt +++ b/libraries/stdlib/src/generated/_Arrays.kt @@ -12989,6 +12989,222 @@ public fun CharArray.asList(): List { } } +/** + * Returns new array which is a copy of the original array. + */ +@kotlin.internal.InlineOnly +public inline fun Array.copyOf(): Array { + return java.util.Arrays.copyOf(this, size) +} + +/** + * Returns new array which is a copy of the original array. + */ +@kotlin.internal.InlineOnly +public inline fun ByteArray.copyOf(): ByteArray { + return java.util.Arrays.copyOf(this, size) +} + +/** + * Returns new array which is a copy of the original array. + */ +@kotlin.internal.InlineOnly +public inline fun ShortArray.copyOf(): ShortArray { + return java.util.Arrays.copyOf(this, size) +} + +/** + * Returns new array which is a copy of the original array. + */ +@kotlin.internal.InlineOnly +public inline fun IntArray.copyOf(): IntArray { + return java.util.Arrays.copyOf(this, size) +} + +/** + * Returns new array which is a copy of the original array. + */ +@kotlin.internal.InlineOnly +public inline fun LongArray.copyOf(): LongArray { + return java.util.Arrays.copyOf(this, size) +} + +/** + * Returns new array which is a copy of the original array. + */ +@kotlin.internal.InlineOnly +public inline fun FloatArray.copyOf(): FloatArray { + return java.util.Arrays.copyOf(this, size) +} + +/** + * Returns new array which is a copy of the original array. + */ +@kotlin.internal.InlineOnly +public inline fun DoubleArray.copyOf(): DoubleArray { + return java.util.Arrays.copyOf(this, size) +} + +/** + * Returns new array which is a copy of the original array. + */ +@kotlin.internal.InlineOnly +public inline fun BooleanArray.copyOf(): BooleanArray { + return java.util.Arrays.copyOf(this, size) +} + +/** + * Returns new array which is a copy of the original array. + */ +@kotlin.internal.InlineOnly +public inline fun CharArray.copyOf(): CharArray { + return java.util.Arrays.copyOf(this, size) +} + +/** + * Returns new array which is a copy of the original array, resized to the given [newSize]. + */ +@kotlin.internal.InlineOnly +public inline fun ByteArray.copyOf(newSize: Int): ByteArray { + return java.util.Arrays.copyOf(this, newSize) +} + +/** + * Returns new array which is a copy of the original array, resized to the given [newSize]. + */ +@kotlin.internal.InlineOnly +public inline fun ShortArray.copyOf(newSize: Int): ShortArray { + return java.util.Arrays.copyOf(this, newSize) +} + +/** + * Returns new array which is a copy of the original array, resized to the given [newSize]. + */ +@kotlin.internal.InlineOnly +public inline fun IntArray.copyOf(newSize: Int): IntArray { + return java.util.Arrays.copyOf(this, newSize) +} + +/** + * Returns new array which is a copy of the original array, resized to the given [newSize]. + */ +@kotlin.internal.InlineOnly +public inline fun LongArray.copyOf(newSize: Int): LongArray { + return java.util.Arrays.copyOf(this, newSize) +} + +/** + * Returns new array which is a copy of the original array, resized to the given [newSize]. + */ +@kotlin.internal.InlineOnly +public inline fun FloatArray.copyOf(newSize: Int): FloatArray { + return java.util.Arrays.copyOf(this, newSize) +} + +/** + * Returns new array which is a copy of the original array, resized to the given [newSize]. + */ +@kotlin.internal.InlineOnly +public inline fun DoubleArray.copyOf(newSize: Int): DoubleArray { + return java.util.Arrays.copyOf(this, newSize) +} + +/** + * Returns new array which is a copy of the original array, resized to the given [newSize]. + */ +@kotlin.internal.InlineOnly +public inline fun BooleanArray.copyOf(newSize: Int): BooleanArray { + return java.util.Arrays.copyOf(this, newSize) +} + +/** + * Returns new array which is a copy of the original array, resized to the given [newSize]. + */ +@kotlin.internal.InlineOnly +public inline fun CharArray.copyOf(newSize: Int): CharArray { + return java.util.Arrays.copyOf(this, newSize) +} + +/** + * Returns new array which is a copy of the original array, resized to the given [newSize]. + */ +@kotlin.internal.InlineOnly +public inline fun Array.copyOf(newSize: Int): Array { + return java.util.Arrays.copyOf(this, newSize) +} + +/** + * Returns new array which is a copy of range of original array. + */ +@kotlin.internal.InlineOnly +public inline fun Array.copyOfRange(fromIndex: Int, toIndex: Int): Array { + return java.util.Arrays.copyOfRange(this, fromIndex, toIndex) +} + +/** + * Returns new array which is a copy of range of original array. + */ +@kotlin.internal.InlineOnly +public inline fun ByteArray.copyOfRange(fromIndex: Int, toIndex: Int): ByteArray { + return java.util.Arrays.copyOfRange(this, fromIndex, toIndex) +} + +/** + * Returns new array which is a copy of range of original array. + */ +@kotlin.internal.InlineOnly +public inline fun ShortArray.copyOfRange(fromIndex: Int, toIndex: Int): ShortArray { + return java.util.Arrays.copyOfRange(this, fromIndex, toIndex) +} + +/** + * Returns new array which is a copy of range of original array. + */ +@kotlin.internal.InlineOnly +public inline fun IntArray.copyOfRange(fromIndex: Int, toIndex: Int): IntArray { + return java.util.Arrays.copyOfRange(this, fromIndex, toIndex) +} + +/** + * Returns new array which is a copy of range of original array. + */ +@kotlin.internal.InlineOnly +public inline fun LongArray.copyOfRange(fromIndex: Int, toIndex: Int): LongArray { + return java.util.Arrays.copyOfRange(this, fromIndex, toIndex) +} + +/** + * Returns new array which is a copy of range of original array. + */ +@kotlin.internal.InlineOnly +public inline fun FloatArray.copyOfRange(fromIndex: Int, toIndex: Int): FloatArray { + return java.util.Arrays.copyOfRange(this, fromIndex, toIndex) +} + +/** + * Returns new array which is a copy of range of original array. + */ +@kotlin.internal.InlineOnly +public inline fun DoubleArray.copyOfRange(fromIndex: Int, toIndex: Int): DoubleArray { + return java.util.Arrays.copyOfRange(this, fromIndex, toIndex) +} + +/** + * Returns new array which is a copy of range of original array. + */ +@kotlin.internal.InlineOnly +public inline fun BooleanArray.copyOfRange(fromIndex: Int, toIndex: Int): BooleanArray { + return java.util.Arrays.copyOfRange(this, fromIndex, toIndex) +} + +/** + * Returns new array which is a copy of range of original array. + */ +@kotlin.internal.InlineOnly +public inline fun CharArray.copyOfRange(fromIndex: Int, toIndex: Int): CharArray { + return java.util.Arrays.copyOfRange(this, fromIndex, toIndex) +} + /** * Sorts the array in-place. */ @@ -13285,249 +13501,6 @@ public fun CharArray.binarySearch(element: Char, fromIndex: Int = 0, toIndex: In return java.util.Arrays.binarySearch(this, fromIndex, toIndex, element) } -/** - * Returns new array which is a copy of the original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun Array.copyOf(): Array { - return java.util.Arrays.copyOf(this, size) -} - -/** - * Returns new array which is a copy of the original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun ByteArray.copyOf(): ByteArray { - return java.util.Arrays.copyOf(this, size) -} - -/** - * Returns new array which is a copy of the original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun ShortArray.copyOf(): ShortArray { - return java.util.Arrays.copyOf(this, size) -} - -/** - * Returns new array which is a copy of the original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun IntArray.copyOf(): IntArray { - return java.util.Arrays.copyOf(this, size) -} - -/** - * Returns new array which is a copy of the original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun LongArray.copyOf(): LongArray { - return java.util.Arrays.copyOf(this, size) -} - -/** - * Returns new array which is a copy of the original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun FloatArray.copyOf(): FloatArray { - return java.util.Arrays.copyOf(this, size) -} - -/** - * Returns new array which is a copy of the original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun DoubleArray.copyOf(): DoubleArray { - return java.util.Arrays.copyOf(this, size) -} - -/** - * Returns new array which is a copy of the original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun BooleanArray.copyOf(): BooleanArray { - return java.util.Arrays.copyOf(this, size) -} - -/** - * Returns new array which is a copy of the original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun CharArray.copyOf(): CharArray { - return java.util.Arrays.copyOf(this, size) -} - -/** - * Returns new array which is a copy of the original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun Array.copyOf(newSize: Int): Array { - return java.util.Arrays.copyOf(this, newSize) -} - -/** - * Returns new array which is a copy of the original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun ByteArray.copyOf(newSize: Int): ByteArray { - return java.util.Arrays.copyOf(this, newSize) -} - -/** - * Returns new array which is a copy of the original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun ShortArray.copyOf(newSize: Int): ShortArray { - return java.util.Arrays.copyOf(this, newSize) -} - -/** - * Returns new array which is a copy of the original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun IntArray.copyOf(newSize: Int): IntArray { - return java.util.Arrays.copyOf(this, newSize) -} - -/** - * Returns new array which is a copy of the original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun LongArray.copyOf(newSize: Int): LongArray { - return java.util.Arrays.copyOf(this, newSize) -} - -/** - * Returns new array which is a copy of the original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun FloatArray.copyOf(newSize: Int): FloatArray { - return java.util.Arrays.copyOf(this, newSize) -} - -/** - * Returns new array which is a copy of the original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun DoubleArray.copyOf(newSize: Int): DoubleArray { - return java.util.Arrays.copyOf(this, newSize) -} - -/** - * Returns new array which is a copy of the original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun BooleanArray.copyOf(newSize: Int): BooleanArray { - return java.util.Arrays.copyOf(this, newSize) -} - -/** - * Returns new array which is a copy of the original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun CharArray.copyOf(newSize: Int): CharArray { - return java.util.Arrays.copyOf(this, newSize) -} - -/** - * Returns new array which is a copy of range of original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun Array.copyOfRange(fromIndex: Int, toIndex: Int): Array { - return java.util.Arrays.copyOfRange(this, fromIndex, toIndex) -} - -/** - * Returns new array which is a copy of range of original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun ByteArray.copyOfRange(fromIndex: Int, toIndex: Int): ByteArray { - return java.util.Arrays.copyOfRange(this, fromIndex, toIndex) -} - -/** - * Returns new array which is a copy of range of original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun ShortArray.copyOfRange(fromIndex: Int, toIndex: Int): ShortArray { - return java.util.Arrays.copyOfRange(this, fromIndex, toIndex) -} - -/** - * Returns new array which is a copy of range of original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun IntArray.copyOfRange(fromIndex: Int, toIndex: Int): IntArray { - return java.util.Arrays.copyOfRange(this, fromIndex, toIndex) -} - -/** - * Returns new array which is a copy of range of original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun LongArray.copyOfRange(fromIndex: Int, toIndex: Int): LongArray { - return java.util.Arrays.copyOfRange(this, fromIndex, toIndex) -} - -/** - * Returns new array which is a copy of range of original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun FloatArray.copyOfRange(fromIndex: Int, toIndex: Int): FloatArray { - return java.util.Arrays.copyOfRange(this, fromIndex, toIndex) -} - -/** - * Returns new array which is a copy of range of original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun DoubleArray.copyOfRange(fromIndex: Int, toIndex: Int): DoubleArray { - return java.util.Arrays.copyOfRange(this, fromIndex, toIndex) -} - -/** - * Returns new array which is a copy of range of original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun BooleanArray.copyOfRange(fromIndex: Int, toIndex: Int): BooleanArray { - return java.util.Arrays.copyOfRange(this, fromIndex, toIndex) -} - -/** - * Returns new array which is a copy of range of original array. - */ -@kotlin.jvm.JvmVersion -@kotlin.internal.InlineOnly -public inline fun CharArray.copyOfRange(fromIndex: Int, toIndex: Int): CharArray { - return java.util.Arrays.copyOfRange(this, fromIndex, toIndex) -} - /** * Fills original array with the provided value. */ diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/SpecialJS.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/SpecialJS.kt index d4b2d9cae3a..28789944097 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/SpecialJS.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/SpecialJS.kt @@ -21,57 +21,6 @@ import templates.Family.* fun specialJS(): List { val templates = arrayListOf() - templates add f("copyOfRange(fromIndex: Int, toIndex: Int)") { - // TODO: Arguments checking as in java? - only(ArraysOfObjects, ArraysOfPrimitives) - doc { "Returns new array which is a copy of range of original array." } - inline(true) - annotations("""@Suppress("NOTHING_TO_INLINE")""") - returns("SELF") - returns(ArraysOfObjects) { "Array" } - body { - "return this.asDynamic().slice(fromIndex, toIndex)" - } - } - - templates add f("copyOf()") { - only(ArraysOfObjects, ArraysOfPrimitives) - doc { "Returns new array which is a copy of the original array." } - inline(true) - annotations("""@Suppress("NOTHING_TO_INLINE")""") - returns("SELF") - returns(ArraysOfObjects) { "Array" } - body { - "return this.asDynamic().slice()" - } - } - - val allArrays = PrimitiveType.defaultPrimitives.map { ArraysOfPrimitives to it } + (ArraysOfObjects to null) - templates addAll allArrays.map { - val (family, primitive) = it - f("copyOf(newSize: Int)") { - only(family) - val defaultValue: String - if (primitive != null) { - returns("SELF") - only(primitive) - defaultValue = when (primitive) { - PrimitiveType.Boolean -> false.toString() - PrimitiveType.Char -> "'\\u0000'" - else -> "ZERO" - } - } else { - returns(ArraysOfObjects) { "Array" } - defaultValue = "null" - } - doc { "Returns new array which is a copy of the original array." } - body { - """ - return arrayCopyResize(this, newSize, $defaultValue) - """ - } - } - } templates add f("plusElement(element: T)") { diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/SpecialJVM.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/SpecialJVM.kt index ef303c1977e..4403cb1893b 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/SpecialJVM.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/SpecialJVM.kt @@ -80,42 +80,6 @@ fun specialJVM(): List { } } - - templates add f("copyOfRange(fromIndex: Int, toIndex: Int)") { - inline(Inline.Only) - - only(InvariantArraysOfObjects, ArraysOfPrimitives) - doc { "Returns new array which is a copy of range of original array." } - returns("SELF") - body { - "return java.util.Arrays.copyOfRange(this, fromIndex, toIndex)" - } - } - - templates add f("copyOf()") { - inline(Inline.Only) - - only(InvariantArraysOfObjects, ArraysOfPrimitives) - doc { "Returns new array which is a copy of the original array." } - returns("SELF") - body { - "return java.util.Arrays.copyOf(this, size)" - } - } - - // This overload can cause nulls if array size is expanding, hence different return overload - templates add f("copyOf(newSize: Int)") { - inline(Inline.Only) - - only(InvariantArraysOfObjects, ArraysOfPrimitives) - doc { "Returns new array which is a copy of the original array." } - returns("SELF") - returns(InvariantArraysOfObjects) { "Array" } - body { - "return java.util.Arrays.copyOf(this, newSize)" - } - } - templates add f("fill(element: T, fromIndex: Int = 0, toIndex: Int = size)") { only(InvariantArraysOfObjects, ArraysOfPrimitives) doc { "Fills original array with the provided value." } @@ -250,6 +214,83 @@ fun specialJVM(): List { } object CommonArrays { + // TODO: plus + fun f_copyOfRange() = f("copyOfRange(fromIndex: Int, toIndex: Int)") { + inline(Platform.JVM, Inline.Only) + inline(Platform.JS, Inline.Yes) + annotations(Platform.JS, """@Suppress("NOTHING_TO_INLINE")""") + + only(InvariantArraysOfObjects, ArraysOfPrimitives) + only(Platform.JS, ArraysOfObjects, ArraysOfPrimitives) + + doc { "Returns new array which is a copy of range of original array." } + returns("SELF") + returns(Platform.JS, ArraysOfObjects) { "Array" } + body(Platform.JVM) { + "return java.util.Arrays.copyOfRange(this, fromIndex, toIndex)" + } + body(Platform.JS) { + // TODO: Arguments checking as in java? + "return this.asDynamic().slice(fromIndex, toIndex)" + } + } + + fun f_copyOf() = f("copyOf()") { + inline(Platform.JVM, Inline.Only) + inline(Platform.JS, Inline.Yes) + annotations(Platform.JS, """@Suppress("NOTHING_TO_INLINE")""") + + only(InvariantArraysOfObjects, ArraysOfPrimitives) + only(Platform.JS, ArraysOfObjects, ArraysOfPrimitives) + + only(InvariantArraysOfObjects, ArraysOfPrimitives) + doc { "Returns new array which is a copy of the original array." } + returns("SELF") + returns(Platform.JS, ArraysOfObjects) { "Array" } + + body(Platform.JVM) { + "return java.util.Arrays.copyOf(this, size)" + } + body(Platform.JS) { + "return this.asDynamic().slice()" + } + } + + fun f_copyOfResized() = + (PrimitiveType.defaultPrimitives.map { ArraysOfPrimitives to it } + (InvariantArraysOfObjects to null)).map { + val (family, primitive) = it + f("copyOf(newSize: Int)") { + only(family) + if (family == InvariantArraysOfObjects) { + only(Platform.JS, ArraysOfObjects) + } + + inline(Platform.JVM, Inline.Only) + doc { "Returns new array which is a copy of the original array, resized to the given [newSize]." } + val defaultValue: String + if (primitive != null) { + only(primitive) + returns("SELF") + defaultValue = when (primitive) { + PrimitiveType.Boolean -> false.toString() + PrimitiveType.Char -> "'\\u0000'" + else -> "ZERO" + } + } else { + returns { "Array" } + defaultValue = "null" + } + body(Platform.JVM) { + "return java.util.Arrays.copyOf(this, newSize)" + } + body(Platform.JS) { + """ + return arrayCopyResize(this, newSize, $defaultValue) + """ + } + } + } + fun f_sortPrimitives() = (PrimitiveType.numericPrimitives + PrimitiveType.Char).map { primitive -> f("sort()") { @@ -372,5 +413,9 @@ object CommonArrays { } // TODO: use reflection later to get all functions of matching type - fun templates() = f_sortPrimitives() + listOf(f_sort(), f_sortWith(), f_asList(), f_toTypedArray()) + fun templates() = + listOf(f_copyOf(), f_copyOfRange()) + + f_copyOfResized() + + f_sortPrimitives() + + listOf(f_sort(), f_sortWith(), f_asList(), f_toTypedArray()) } \ No newline at end of file diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/engine/Engine.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/engine/Engine.kt index 543ec2cede1..3df904018ec 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/engine/Engine.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/engine/Engine.kt @@ -233,6 +233,11 @@ class GenericFunction(val signature: String, val keyword: String = "fun") { buildFamilies(families.toSet()) } + fun only(platform: Platform, vararg families: Family) { + require(families.isNotEmpty()) { "Need to specify families" } + buildFamilies(families.toSet(), platform) + } + fun only(vararg primitives: PrimitiveType) { only(primitives.asList()) }