From 8b85bae0207cf25f74968f918e6898da0e79494e Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Fri, 2 Apr 2021 20:14:36 +0300 Subject: [PATCH] Stabilize Char-to-Int conversions KT-45874 --- .../src/main/kotlin/kotlin/CharCode.kt | 7 ++--- libraries/stdlib/api/js-v1/kotlin.kt | 12 ++++---- libraries/stdlib/api/js-v1/kotlin.text.kt | 24 +++++++-------- libraries/stdlib/api/js/kotlin.kt | 12 ++++---- libraries/stdlib/api/js/kotlin.text.kt | 24 +++++++-------- libraries/stdlib/js-ir/builtins/Char.kt | 7 ++--- .../stdlib/js-v1/src/kotlin/charCode_js-v1.kt | 4 +-- .../stdlib/jvm/src/kotlin/CharCodeJVM.kt | 4 +-- libraries/stdlib/src/kotlin/CharCode.kt | 12 ++++---- libraries/stdlib/src/kotlin/text/Char.kt | 29 ++++++++++--------- libraries/stdlib/wasm/src/kotlin/CharCode.kt | 6 ++-- 11 files changed, 70 insertions(+), 71 deletions(-) diff --git a/kotlin-native/runtime/src/main/kotlin/kotlin/CharCode.kt b/kotlin-native/runtime/src/main/kotlin/kotlin/CharCode.kt index fbd42636080..35305235e69 100644 --- a/kotlin-native/runtime/src/main/kotlin/kotlin/CharCode.kt +++ b/kotlin-native/runtime/src/main/kotlin/kotlin/CharCode.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -10,9 +10,8 @@ package kotlin * * @sample samples.text.Chars.charFromCode */ -@OptIn(ExperimentalUnsignedTypes::class) -@ExperimentalStdlibApi -@SinceKotlin("1.4") +@SinceKotlin("1.5") +@WasExperimental(ExperimentalStdlibApi::class) @kotlin.internal.InlineOnly public actual inline fun Char(code: UShort): Char { return code.toInt().toChar() diff --git a/libraries/stdlib/api/js-v1/kotlin.kt b/libraries/stdlib/api/js-v1/kotlin.kt index 967a2d42d59..3585715d46b 100644 --- a/libraries/stdlib/api/js-v1/kotlin.kt +++ b/libraries/stdlib/api/js-v1/kotlin.kt @@ -1,5 +1,5 @@ -@kotlin.ExperimentalStdlibApi -@kotlin.SinceKotlin(version = "1.4") +@kotlin.SinceKotlin(version = "1.5") +@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) @kotlin.internal.InlineOnly public val kotlin.Char.code: kotlin.Int { get; } @@ -10,13 +10,13 @@ public val kotlin.reflect.KProperty0<*>.isInitialized: kotlin.Boolean { get; } @kotlin.SinceKotlin(version = "1.4") public val kotlin.Throwable.suppressedExceptions: kotlin.collections.List { get; } -@kotlin.ExperimentalStdlibApi -@kotlin.SinceKotlin(version = "1.4") +@kotlin.SinceKotlin(version = "1.5") +@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) @kotlin.internal.InlineOnly public inline fun Char(code: kotlin.Int): kotlin.Char -/*∆*/ @kotlin.ExperimentalStdlibApi -/*∆*/ @kotlin.SinceKotlin(version = "1.4") +/*∆*/ @kotlin.SinceKotlin(version = "1.5") +/*∆*/ @kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) @kotlin.internal.InlineOnly /*∆*/ public inline fun Char(code: kotlin.UShort): kotlin.Char /*∆*/ diff --git a/libraries/stdlib/api/js-v1/kotlin.text.kt b/libraries/stdlib/api/js-v1/kotlin.text.kt index a9a05ab736e..f8e06a72728 100644 --- a/libraries/stdlib/api/js-v1/kotlin.text.kt +++ b/libraries/stdlib/api/js-v1/kotlin.text.kt @@ -192,28 +192,28 @@ public inline fun kotlin.text.StringBuilder.deleteAt(index: kotlin.Int): kotlin. @kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) public inline fun kotlin.text.StringBuilder.deleteRange(startIndex: kotlin.Int, endIndex: kotlin.Int): kotlin.text.StringBuilder -@kotlin.ExperimentalStdlibApi -@kotlin.SinceKotlin(version = "1.4") +@kotlin.SinceKotlin(version = "1.5") +@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) public fun kotlin.Int.digitToChar(): kotlin.Char -@kotlin.ExperimentalStdlibApi -@kotlin.SinceKotlin(version = "1.4") +@kotlin.SinceKotlin(version = "1.5") +@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) public fun kotlin.Int.digitToChar(radix: kotlin.Int): kotlin.Char -@kotlin.ExperimentalStdlibApi -@kotlin.SinceKotlin(version = "1.4") +@kotlin.SinceKotlin(version = "1.5") +@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) public fun kotlin.Char.digitToInt(): kotlin.Int -@kotlin.ExperimentalStdlibApi -@kotlin.SinceKotlin(version = "1.4") +@kotlin.SinceKotlin(version = "1.5") +@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) public fun kotlin.Char.digitToInt(radix: kotlin.Int): kotlin.Int -@kotlin.ExperimentalStdlibApi -@kotlin.SinceKotlin(version = "1.4") +@kotlin.SinceKotlin(version = "1.5") +@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) public fun kotlin.Char.digitToIntOrNull(): kotlin.Int? -@kotlin.ExperimentalStdlibApi -@kotlin.SinceKotlin(version = "1.4") +@kotlin.SinceKotlin(version = "1.5") +@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) public fun kotlin.Char.digitToIntOrNull(radix: kotlin.Int): kotlin.Int? public fun kotlin.CharSequence.drop(n: kotlin.Int): kotlin.CharSequence diff --git a/libraries/stdlib/api/js/kotlin.kt b/libraries/stdlib/api/js/kotlin.kt index 1877edf83be..97e2fbe1b8d 100644 --- a/libraries/stdlib/api/js/kotlin.kt +++ b/libraries/stdlib/api/js/kotlin.kt @@ -1,5 +1,5 @@ -@kotlin.ExperimentalStdlibApi -@kotlin.SinceKotlin(version = "1.4") +@kotlin.SinceKotlin(version = "1.5") +@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) @kotlin.internal.InlineOnly public val kotlin.Char.code: kotlin.Int { get; } @@ -10,8 +10,8 @@ public val kotlin.reflect.KProperty0<*>.isInitialized: kotlin.Boolean { get; } @kotlin.SinceKotlin(version = "1.4") public val kotlin.Throwable.suppressedExceptions: kotlin.collections.List { get; } -@kotlin.ExperimentalStdlibApi -@kotlin.SinceKotlin(version = "1.4") +@kotlin.SinceKotlin(version = "1.5") +@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) @kotlin.internal.InlineOnly public inline fun Char(code: kotlin.Int): kotlin.Char @@ -1033,8 +1033,8 @@ public final class ByteArray { } public final class Char : kotlin.Comparable { -/*∆*/ @kotlin.ExperimentalStdlibApi -/*∆*/ @kotlin.SinceKotlin(version = "1.4") +/*∆*/ @kotlin.SinceKotlin(version = "1.5") +/*∆*/ @kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) /*∆*/ public constructor Char(code: kotlin.UShort) /*∆*/ public open override operator fun compareTo(other: kotlin.Char): kotlin.Int diff --git a/libraries/stdlib/api/js/kotlin.text.kt b/libraries/stdlib/api/js/kotlin.text.kt index a9a05ab736e..f8e06a72728 100644 --- a/libraries/stdlib/api/js/kotlin.text.kt +++ b/libraries/stdlib/api/js/kotlin.text.kt @@ -192,28 +192,28 @@ public inline fun kotlin.text.StringBuilder.deleteAt(index: kotlin.Int): kotlin. @kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) public inline fun kotlin.text.StringBuilder.deleteRange(startIndex: kotlin.Int, endIndex: kotlin.Int): kotlin.text.StringBuilder -@kotlin.ExperimentalStdlibApi -@kotlin.SinceKotlin(version = "1.4") +@kotlin.SinceKotlin(version = "1.5") +@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) public fun kotlin.Int.digitToChar(): kotlin.Char -@kotlin.ExperimentalStdlibApi -@kotlin.SinceKotlin(version = "1.4") +@kotlin.SinceKotlin(version = "1.5") +@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) public fun kotlin.Int.digitToChar(radix: kotlin.Int): kotlin.Char -@kotlin.ExperimentalStdlibApi -@kotlin.SinceKotlin(version = "1.4") +@kotlin.SinceKotlin(version = "1.5") +@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) public fun kotlin.Char.digitToInt(): kotlin.Int -@kotlin.ExperimentalStdlibApi -@kotlin.SinceKotlin(version = "1.4") +@kotlin.SinceKotlin(version = "1.5") +@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) public fun kotlin.Char.digitToInt(radix: kotlin.Int): kotlin.Int -@kotlin.ExperimentalStdlibApi -@kotlin.SinceKotlin(version = "1.4") +@kotlin.SinceKotlin(version = "1.5") +@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) public fun kotlin.Char.digitToIntOrNull(): kotlin.Int? -@kotlin.ExperimentalStdlibApi -@kotlin.SinceKotlin(version = "1.4") +@kotlin.SinceKotlin(version = "1.5") +@kotlin.WasExperimental(markerClass = {kotlin.ExperimentalStdlibApi::class}) public fun kotlin.Char.digitToIntOrNull(radix: kotlin.Int): kotlin.Int? public fun kotlin.CharSequence.drop(n: kotlin.Int): kotlin.CharSequence diff --git a/libraries/stdlib/js-ir/builtins/Char.kt b/libraries/stdlib/js-ir/builtins/Char.kt index 30658aba960..86db9810eba 100644 --- a/libraries/stdlib/js-ir/builtins/Char.kt +++ b/libraries/stdlib/js-ir/builtins/Char.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -12,9 +12,8 @@ package kotlin // TODO: KT-35100 //public inline class Char internal constructor (val value: Int) : Comparable { public class Char -@OptIn(ExperimentalUnsignedTypes::class) -@ExperimentalStdlibApi -@SinceKotlin("1.4") +@SinceKotlin("1.5") +@WasExperimental(ExperimentalStdlibApi::class) constructor(code: UShort) : Comparable { private val value: Int = code.toInt() diff --git a/libraries/stdlib/js-v1/src/kotlin/charCode_js-v1.kt b/libraries/stdlib/js-v1/src/kotlin/charCode_js-v1.kt index 911f7507a53..35305235e69 100644 --- a/libraries/stdlib/js-v1/src/kotlin/charCode_js-v1.kt +++ b/libraries/stdlib/js-v1/src/kotlin/charCode_js-v1.kt @@ -10,8 +10,8 @@ package kotlin * * @sample samples.text.Chars.charFromCode */ -@ExperimentalStdlibApi -@SinceKotlin("1.4") +@SinceKotlin("1.5") +@WasExperimental(ExperimentalStdlibApi::class) @kotlin.internal.InlineOnly public actual inline fun Char(code: UShort): Char { return code.toInt().toChar() diff --git a/libraries/stdlib/jvm/src/kotlin/CharCodeJVM.kt b/libraries/stdlib/jvm/src/kotlin/CharCodeJVM.kt index 911f7507a53..35305235e69 100644 --- a/libraries/stdlib/jvm/src/kotlin/CharCodeJVM.kt +++ b/libraries/stdlib/jvm/src/kotlin/CharCodeJVM.kt @@ -10,8 +10,8 @@ package kotlin * * @sample samples.text.Chars.charFromCode */ -@ExperimentalStdlibApi -@SinceKotlin("1.4") +@SinceKotlin("1.5") +@WasExperimental(ExperimentalStdlibApi::class) @kotlin.internal.InlineOnly public actual inline fun Char(code: UShort): Char { return code.toInt().toChar() diff --git a/libraries/stdlib/src/kotlin/CharCode.kt b/libraries/stdlib/src/kotlin/CharCode.kt index 7f0343b7982..3bb38509218 100644 --- a/libraries/stdlib/src/kotlin/CharCode.kt +++ b/libraries/stdlib/src/kotlin/CharCode.kt @@ -15,8 +15,8 @@ package kotlin * * @sample samples.text.Chars.charFromCode */ -@ExperimentalStdlibApi -@SinceKotlin("1.4") +@SinceKotlin("1.5") +@WasExperimental(ExperimentalStdlibApi::class) @kotlin.internal.InlineOnly public inline fun Char(code: Int): Char { if (code < Char.MIN_VALUE.code || code > Char.MAX_VALUE.code) { @@ -30,8 +30,8 @@ public inline fun Char(code: Int): Char { * * @sample samples.text.Chars.charFromCode */ -@ExperimentalStdlibApi -@SinceKotlin("1.4") +@SinceKotlin("1.5") +@WasExperimental(ExperimentalStdlibApi::class) @Suppress("NO_ACTUAL_FOR_EXPECT") public expect fun Char(code: UShort): Char @@ -42,7 +42,7 @@ public expect fun Char(code: UShort): Char * * @sample samples.text.Chars.code */ -@ExperimentalStdlibApi -@SinceKotlin("1.4") +@SinceKotlin("1.5") +@WasExperimental(ExperimentalStdlibApi::class) @kotlin.internal.InlineOnly public inline val Char.code: Int get() = this.toInt() diff --git a/libraries/stdlib/src/kotlin/text/Char.kt b/libraries/stdlib/src/kotlin/text/Char.kt index 24e6c6ff494..806a61204fa 100644 --- a/libraries/stdlib/src/kotlin/text/Char.kt +++ b/libraries/stdlib/src/kotlin/text/Char.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -17,9 +17,10 @@ package kotlin.text * * @sample samples.text.Chars.digitToInt */ -@ExperimentalStdlibApi -@SinceKotlin("1.4") +@SinceKotlin("1.5") +@WasExperimental(ExperimentalStdlibApi::class) public fun Char.digitToInt(): Int { + // TODO: needs to support all digits in JVM if (this in '0'..'9') { return this - '0' } @@ -37,8 +38,8 @@ public fun Char.digitToInt(): Int { * * @sample samples.text.Chars.digitToInt */ -@ExperimentalStdlibApi -@SinceKotlin("1.4") +@SinceKotlin("1.5") +@WasExperimental(ExperimentalStdlibApi::class) public fun Char.digitToInt(radix: Int): Int { return digitToIntOrNull(radix) ?: throw IllegalArgumentException("Char $this is not a digit in the given radix=$radix") } @@ -52,9 +53,10 @@ public fun Char.digitToInt(radix: Int): Int { * * @sample samples.text.Chars.digitToIntOrNull */ -@ExperimentalStdlibApi -@SinceKotlin("1.4") +@SinceKotlin("1.5") +@WasExperimental(ExperimentalStdlibApi::class) public fun Char.digitToIntOrNull(): Int? { + // TODO: needs to support all digits in JVM if (this in '0'..'9') { return this - '0' } @@ -72,9 +74,10 @@ public fun Char.digitToIntOrNull(): Int? { * * @sample samples.text.Chars.digitToIntOrNull */ -@ExperimentalStdlibApi -@SinceKotlin("1.4") +@SinceKotlin("1.5") +@WasExperimental(ExperimentalStdlibApi::class) public fun Char.digitToIntOrNull(radix: Int): Int? { + // TODO: needs to support all digits in JVM if (radix !in 2..36) { throw IllegalArgumentException("Invalid radix: $radix. Valid radix values are in range 2..36") } @@ -95,8 +98,8 @@ public fun Char.digitToIntOrNull(radix: Int): Int? { * * @sample samples.text.Chars.digitToChar */ -@ExperimentalStdlibApi -@SinceKotlin("1.4") +@SinceKotlin("1.5") +@WasExperimental(ExperimentalStdlibApi::class) public fun Int.digitToChar(): Char { if (this in 0..9) { return '0' + this @@ -113,8 +116,8 @@ public fun Int.digitToChar(): Char { * * @sample samples.text.Chars.digitToChar */ -@ExperimentalStdlibApi -@SinceKotlin("1.4") +@SinceKotlin("1.5") +@WasExperimental(ExperimentalStdlibApi::class) public fun Int.digitToChar(radix: Int): Char { if (radix !in 2..36) { throw IllegalArgumentException("Invalid radix: $radix. Valid radix values are in range 2..36") diff --git a/libraries/stdlib/wasm/src/kotlin/CharCode.kt b/libraries/stdlib/wasm/src/kotlin/CharCode.kt index 4ab00680387..2e22d5f6322 100644 --- a/libraries/stdlib/wasm/src/kotlin/CharCode.kt +++ b/libraries/stdlib/wasm/src/kotlin/CharCode.kt @@ -1,5 +1,5 @@ /* - * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. */ @@ -10,7 +10,5 @@ package kotlin * * @sample samples.text.Chars.charFromCode */ -@OptIn(ExperimentalUnsignedTypes::class) -@ExperimentalStdlibApi -@SinceKotlin("1.4") +@SinceKotlin("1.5") public actual fun Char(code: UShort): Char = TODO("Wasm stdlib: CharCode")