From 86c1e0ded668d799cc57894975c6a1bffa9df5c1 Mon Sep 17 00:00:00 2001 From: Abduqodiri Qurbonzoda Date: Wed, 26 Jul 2023 10:17:45 +0000 Subject: [PATCH] Remove reified constraint from Array constructors #KT-57363 This is an attempt to bring consistency to array constructors reified requirement. Currently, JVM - reified type in all three: arrayOfNulls, arrayOf, emptyArray Native - reified in arrayOfNulls and arrayOf, but not in emptyArray JS & Wasm - reified in arrayOfNulls, but not in arrayOf and emptyArray Merge-request: KT-MR-11005 Merged-by: Abduqodiri Qurbonzoda --- kotlin-native/runtime/src/main/kotlin/kotlin/Arrays.kt | 5 ++--- libraries/stdlib/api/js/kotlin.kt | 2 +- libraries/stdlib/js-ir/builtins/Library.kt | 3 +-- libraries/stdlib/wasm/builtins/kotlin/Library.kt | 6 ++---- 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/kotlin-native/runtime/src/main/kotlin/kotlin/Arrays.kt b/kotlin-native/runtime/src/main/kotlin/kotlin/Arrays.kt index 8057d8fd3a5..fddcc5234ae 100644 --- a/kotlin-native/runtime/src/main/kotlin/kotlin/Arrays.kt +++ b/kotlin-native/runtime/src/main/kotlin/kotlin/Arrays.kt @@ -8,7 +8,6 @@ package kotlin -import kotlin.internal.PureReifiable import kotlin.native.internal.ExportTypeInfo import kotlin.native.internal.IntrinsicType import kotlin.native.internal.GCUnsafeCall @@ -588,7 +587,7 @@ private class BooleanIteratorImpl(val collection: BooleanArray) : BooleanIterato * * @throws RuntimeException if the specified [size] is negative. */ -public inline fun arrayOfNulls(size: Int): Array = +public inline fun arrayOfNulls(size: Int): Array = @Suppress("NON_PUBLIC_CALL_FROM_PUBLIC_INLINE") arrayOfUninitializedElements(size) @@ -597,7 +596,7 @@ public inline fun arrayOfNulls(size: Int): Array */ @TypedIntrinsic(IntrinsicType.IDENTITY) @PointsTo(0x00, 0x01) // ret -> elements -public external inline fun arrayOf(vararg elements: T): Array +public external inline fun arrayOf(vararg elements: T): Array @GCUnsafeCall("Kotlin_emptyArray") external public fun emptyArray(): Array diff --git a/libraries/stdlib/api/js/kotlin.kt b/libraries/stdlib/api/js/kotlin.kt index fc0580b7826..be18f3cc54b 100644 --- a/libraries/stdlib/api/js/kotlin.kt +++ b/libraries/stdlib/api/js/kotlin.kt @@ -45,7 +45,7 @@ public inline fun UShortArray(size: kotlin.Int, init: (kotlin.Int) -> kotlin.USh public inline fun arrayOf(vararg elements: T): kotlin.Array -public inline fun arrayOfNulls(size: kotlin.Int): kotlin.Array +public inline fun arrayOfNulls(size: kotlin.Int): kotlin.Array public inline fun booleanArrayOf(vararg elements: kotlin.Boolean): kotlin.BooleanArray diff --git a/libraries/stdlib/js-ir/builtins/Library.kt b/libraries/stdlib/js-ir/builtins/Library.kt index baac039f129..f99f0a94e78 100644 --- a/libraries/stdlib/js-ir/builtins/Library.kt +++ b/libraries/stdlib/js-ir/builtins/Library.kt @@ -7,7 +7,6 @@ package kotlin -import kotlin.internal.PureReifiable import kotlin.js.* /** @@ -27,7 +26,7 @@ public operator fun String?.plus(other: Any?): String = /** * Returns an array of objects of the given type with the given [size], initialized with null values. */ -public inline fun arrayOfNulls(size: Int): Array = fillArrayVal(Array(size), null) +public inline fun arrayOfNulls(size: Int): Array = fillArrayVal(Array(size), null) /** * Returns an array containing the specified elements. diff --git a/libraries/stdlib/wasm/builtins/kotlin/Library.kt b/libraries/stdlib/wasm/builtins/kotlin/Library.kt index 451c0052919..c85d2a73822 100644 --- a/libraries/stdlib/wasm/builtins/kotlin/Library.kt +++ b/libraries/stdlib/wasm/builtins/kotlin/Library.kt @@ -7,7 +7,6 @@ package kotlin -import kotlin.internal.PureReifiable import kotlin.wasm.internal.enumValueOfIntrinsic import kotlin.wasm.internal.enumValuesIntrinsic @@ -30,9 +29,8 @@ public operator fun String?.plus(other: Any?): String = (this ?: "null") + other * * @throws RuntimeException if the specified [size] is negative. */ -// TODO: Should T be reified? -@Suppress("REIFIED_TYPE_PARAMETER_NO_INLINE") -public fun <@PureReifiable reified T> arrayOfNulls(size: Int): Array = Array(size) +@Suppress("UNCHECKED_CAST") +public inline fun arrayOfNulls(size: Int): Array = Array(size) as Array /** * Returns an array containing the specified elements.