From 0c50014e7a17895fc2026a05441a61ccdbc8df09 Mon Sep 17 00:00:00 2001 From: Ilya Gorbunov Date: Thu, 28 Jun 2018 00:44:05 +0300 Subject: [PATCH] Introduce SIZE_BYTES and SIZE_BITS constants for all integral types #KT-8247 Fixed --- .../builtin-classes/default/kotlin.txt | 20 ++++++++ .../testData/builtin-classes/java6/kotlin.txt | 20 ++++++++ .../testData/builtin-classes/java8/kotlin.txt | 20 ++++++++ .../builtin-classes/newMethods/kotlin.txt | 20 ++++++++ core/builtins/native/kotlin/Char.kt | 12 +++++ core/builtins/native/kotlin/Primitives.kt | 48 +++++++++++++++++++ generators/builtins/common.kt | 19 ++++---- generators/builtins/primitives.kt | 27 ++++++++--- generators/builtins/unsignedTypes.kt | 10 ++++ .../js/runtime/primitiveCompanionObjects.kt | 30 ++++++++++++ .../jvm/internal/PrimitiveCompanionObjects.kt | 10 ++++ libraries/stdlib/unsigned/src/kotlin/UByte.kt | 10 ++++ libraries/stdlib/unsigned/src/kotlin/UInt.kt | 10 ++++ libraries/stdlib/unsigned/src/kotlin/ULong.kt | 10 ++++ .../stdlib/unsigned/src/kotlin/UShort.kt | 10 ++++ .../reference-public-api/kotlin-runtime.txt | 10 ++++ .../kotlin-stdlib-runtime-merged.txt | 18 +++++++ 17 files changed, 288 insertions(+), 16 deletions(-) diff --git a/compiler/testData/builtin-classes/default/kotlin.txt b/compiler/testData/builtin-classes/default/kotlin.txt index a97dfd4aa1d..fbd6e359925 100644 --- a/compiler/testData/builtin-classes/default/kotlin.txt +++ b/compiler/testData/builtin-classes/default/kotlin.txt @@ -121,6 +121,10 @@ public final class Byte : kotlin.Number, kotlin.Comparable { public final fun (): kotlin.Byte public const final val MIN_VALUE: kotlin.Byte public final fun (): kotlin.Byte + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } @@ -165,6 +169,10 @@ public final class Char : kotlin.Comparable { public final fun (): kotlin.Char public const final val MIN_SURROGATE: kotlin.Char public final fun (): kotlin.Char + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } @@ -479,6 +487,10 @@ public final class Int : kotlin.Number, kotlin.Comparable { public final fun (): kotlin.Int public const final val MIN_VALUE: kotlin.Int public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } @@ -565,6 +577,10 @@ public final class Long : kotlin.Number, kotlin.Comparable { public final fun (): kotlin.Long public const final val MIN_VALUE: kotlin.Long public final fun (): kotlin.Long + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } @@ -677,6 +693,10 @@ public final class Short : kotlin.Number, kotlin.Comparable { public final fun (): kotlin.Short public const final val MIN_VALUE: kotlin.Short public final fun (): kotlin.Short + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } diff --git a/compiler/testData/builtin-classes/java6/kotlin.txt b/compiler/testData/builtin-classes/java6/kotlin.txt index 57de7b75863..7465130585f 100644 --- a/compiler/testData/builtin-classes/java6/kotlin.txt +++ b/compiler/testData/builtin-classes/java6/kotlin.txt @@ -123,6 +123,10 @@ public final class Byte : kotlin.Number, kotlin.Comparable, java.io public final fun (): kotlin.Byte public const final val MIN_VALUE: kotlin.Byte public final fun (): kotlin.Byte + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } @@ -168,6 +172,10 @@ public final class Char : kotlin.Comparable, java.io.Serializable { public final fun (): kotlin.Char public const final val MIN_SURROGATE: kotlin.Char public final fun (): kotlin.Char + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } @@ -493,6 +501,10 @@ public final class Int : kotlin.Number, kotlin.Comparable, java.io.S public final fun (): kotlin.Int public const final val MIN_VALUE: kotlin.Int public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } @@ -580,6 +592,10 @@ public final class Long : kotlin.Number, kotlin.Comparable, java.io public final fun (): kotlin.Long public const final val MIN_VALUE: kotlin.Long public final fun (): kotlin.Long + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } @@ -693,6 +709,10 @@ public final class Short : kotlin.Number, kotlin.Comparable, java. public final fun (): kotlin.Short public const final val MIN_VALUE: kotlin.Short public final fun (): kotlin.Short + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } diff --git a/compiler/testData/builtin-classes/java8/kotlin.txt b/compiler/testData/builtin-classes/java8/kotlin.txt index 41553e2a968..6bca6b04be1 100644 --- a/compiler/testData/builtin-classes/java8/kotlin.txt +++ b/compiler/testData/builtin-classes/java8/kotlin.txt @@ -123,6 +123,10 @@ public final class Byte : kotlin.Number, kotlin.Comparable, java.io public final fun (): kotlin.Byte public const final val MIN_VALUE: kotlin.Byte public final fun (): kotlin.Byte + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } @@ -168,6 +172,10 @@ public final class Char : kotlin.Comparable, java.io.Serializable { public final fun (): kotlin.Char public const final val MIN_SURROGATE: kotlin.Char public final fun (): kotlin.Char + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } @@ -495,6 +503,10 @@ public final class Int : kotlin.Number, kotlin.Comparable, java.io.S public final fun (): kotlin.Int public const final val MIN_VALUE: kotlin.Int public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } @@ -582,6 +594,10 @@ public final class Long : kotlin.Number, kotlin.Comparable, java.io public final fun (): kotlin.Long public const final val MIN_VALUE: kotlin.Long public final fun (): kotlin.Long + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } @@ -695,6 +711,10 @@ public final class Short : kotlin.Number, kotlin.Comparable, java. public final fun (): kotlin.Short public const final val MIN_VALUE: kotlin.Short public final fun (): kotlin.Short + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } diff --git a/compiler/testData/builtin-classes/newMethods/kotlin.txt b/compiler/testData/builtin-classes/newMethods/kotlin.txt index 4fe29fe703b..54b59185953 100644 --- a/compiler/testData/builtin-classes/newMethods/kotlin.txt +++ b/compiler/testData/builtin-classes/newMethods/kotlin.txt @@ -123,6 +123,10 @@ public final class Byte : kotlin.Number, kotlin.Comparable, java.io public final fun (): kotlin.Byte public const final val MIN_VALUE: kotlin.Byte public final fun (): kotlin.Byte + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } @@ -168,6 +172,10 @@ public final class Char : kotlin.Comparable, java.io.Serializable { public final fun (): kotlin.Char public const final val MIN_SURROGATE: kotlin.Char public final fun (): kotlin.Char + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } @@ -493,6 +501,10 @@ public final class Int : kotlin.Number, kotlin.Comparable, java.io.S public final fun (): kotlin.Int public const final val MIN_VALUE: kotlin.Int public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } @@ -580,6 +592,10 @@ public final class Long : kotlin.Number, kotlin.Comparable, java.io public final fun (): kotlin.Long public const final val MIN_VALUE: kotlin.Long public final fun (): kotlin.Long + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } @@ -693,6 +709,10 @@ public final class Short : kotlin.Number, kotlin.Comparable, java. public final fun (): kotlin.Short public const final val MIN_VALUE: kotlin.Short public final fun (): kotlin.Short + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BITS: kotlin.Int + public final fun (): kotlin.Int + @kotlin.SinceKotlin(version = "1.3") public const final val SIZE_BYTES: kotlin.Int + public final fun (): kotlin.Int } } diff --git a/core/builtins/native/kotlin/Char.kt b/core/builtins/native/kotlin/Char.kt index 126bab69d3c..18152d69026 100644 --- a/core/builtins/native/kotlin/Char.kt +++ b/core/builtins/native/kotlin/Char.kt @@ -89,6 +89,18 @@ public class Char private constructor() : Comparable { * The maximum value of a Unicode surrogate code unit. */ public const val MAX_SURROGATE: Char = MAX_LOW_SURROGATE + + /** + * The number of bytes used to represent a Char in a binary form. + */ + @SinceKotlin("1.3") + public const val SIZE_BYTES: Int = 2 + + /** + * The number of bits used to represent a Char in a binary form. + */ + @SinceKotlin("1.3") + public const val SIZE_BITS: Int = 16 } } diff --git a/core/builtins/native/kotlin/Primitives.kt b/core/builtins/native/kotlin/Primitives.kt index 9798374d876..fd094107a7e 100644 --- a/core/builtins/native/kotlin/Primitives.kt +++ b/core/builtins/native/kotlin/Primitives.kt @@ -22,6 +22,18 @@ public class Byte private constructor() : Number(), Comparable { * A constant holding the maximum value an instance of Byte can have. */ public const val MAX_VALUE: Byte = 127 + + /** + * The number of bytes used to represent an instance of Byte in a binary form. + */ + @SinceKotlin("1.3") + public const val SIZE_BYTES: Int = 1 + + /** + * The number of bits used to represent an instance of Byte in a binary form. + */ + @SinceKotlin("1.3") + public const val SIZE_BITS: Int = 8 } /** @@ -198,6 +210,18 @@ public class Short private constructor() : Number(), Comparable { * A constant holding the maximum value an instance of Short can have. */ public const val MAX_VALUE: Short = 32767 + + /** + * The number of bytes used to represent an instance of Short in a binary form. + */ + @SinceKotlin("1.3") + public const val SIZE_BYTES: Int = 2 + + /** + * The number of bits used to represent an instance of Short in a binary form. + */ + @SinceKotlin("1.3") + public const val SIZE_BITS: Int = 16 } /** @@ -374,6 +398,18 @@ public class Int private constructor() : Number(), Comparable { * A constant holding the maximum value an instance of Int can have. */ public const val MAX_VALUE: Int = 2147483647 + + /** + * The number of bytes used to represent an instance of Int in a binary form. + */ + @SinceKotlin("1.3") + public const val SIZE_BYTES: Int = 4 + + /** + * The number of bits used to represent an instance of Int in a binary form. + */ + @SinceKotlin("1.3") + public const val SIZE_BITS: Int = 32 } /** @@ -565,6 +601,18 @@ public class Long private constructor() : Number(), Comparable { * A constant holding the maximum value an instance of Long can have. */ public const val MAX_VALUE: Long = 9223372036854775807L + + /** + * The number of bytes used to represent an instance of Long in a binary form. + */ + @SinceKotlin("1.3") + public const val SIZE_BYTES: Int = 8 + + /** + * The number of bits used to represent an instance of Long in a binary form. + */ + @SinceKotlin("1.3") + public const val SIZE_BITS: Int = 64 } /** diff --git a/generators/builtins/common.kt b/generators/builtins/common.kt index 19e720f37ab..0884939ebfc 100644 --- a/generators/builtins/common.kt +++ b/generators/builtins/common.kt @@ -19,17 +19,18 @@ package org.jetbrains.kotlin.generators.builtins import org.jetbrains.kotlin.generators.builtins.ProgressionKind.* import kotlin.properties.Delegates -enum class PrimitiveType { - BYTE, - CHAR, - SHORT, - INT, - LONG, - FLOAT, - DOUBLE, - BOOLEAN; +enum class PrimitiveType(val byteSize: Int?) { + BYTE(1), + CHAR(2), + SHORT(2), + INT(4), + LONG(8), + FLOAT(null), + DOUBLE(null), + BOOLEAN(null); val capitalized: String get() = name.toLowerCase().capitalize() + companion object { val exceptBoolean = PrimitiveType.values().filterNot { it == BOOLEAN } val onlyNumeric = PrimitiveType.values().filterNot { it == BOOLEAN || it == CHAR } diff --git a/generators/builtins/primitives.kt b/generators/builtins/primitives.kt index 531a29fc41e..ddcb9c0db71 100644 --- a/generators/builtins/primitives.kt +++ b/generators/builtins/primitives.kt @@ -59,10 +59,10 @@ class GeneratePrimitives(out: PrintWriter) : BuiltInsSourceGenerator(out) { generateDoc(kind) out.println("public class $className private constructor() : Number(), Comparable<$className> {") - out.print(" companion object ") + out.print(" companion object {") if (kind == PrimitiveType.FLOAT || kind == PrimitiveType.DOUBLE) { //val (minValue, maxValue, posInf, negInf, nan) = primitiveConstants(kind) - out.println("""{ + out.println(""" /** * A constant holding the smallest *positive* nonzero value of $className. */ @@ -86,12 +86,11 @@ class GeneratePrimitives(out: PrintWriter) : BuiltInsSourceGenerator(out) { /** * A constant holding the "not a number" value of $className. */ - public val NaN: $className - }""") + public val NaN: $className""") } if (kind == PrimitiveType.INT || kind == PrimitiveType.LONG || kind == PrimitiveType.SHORT || kind == PrimitiveType.BYTE) { val (minValue, maxValue) = primitiveConstants(kind) - out.println("""{ + out.println(""" /** * A constant holding the minimum value an instance of $className can have. */ @@ -100,9 +99,23 @@ class GeneratePrimitives(out: PrintWriter) : BuiltInsSourceGenerator(out) { /** * A constant holding the maximum value an instance of $className can have. */ - public const val MAX_VALUE: $className = $maxValue - }""") + public const val MAX_VALUE: $className = $maxValue""") } + if (kind.byteSize != null) { + out.println(""" + /** + * The number of bytes used to represent an instance of $className in a binary form. + */ + @SinceKotlin("1.3") + public const val SIZE_BYTES: Int = ${kind.byteSize} + + /** + * The number of bits used to represent an instance of $className in a binary form. + */ + @SinceKotlin("1.3") + public const val SIZE_BITS: Int = ${kind.byteSize * 8}""") + } + out.println(""" }""") generateCompareTo(kind) diff --git a/generators/builtins/unsignedTypes.kt b/generators/builtins/unsignedTypes.kt index 3e96421b64d..57ecb11c328 100644 --- a/generators/builtins/unsignedTypes.kt +++ b/generators/builtins/unsignedTypes.kt @@ -56,6 +56,16 @@ class UnsignedTypeGenerator(val type: UnsignedType, out: PrintWriter) : BuiltIns * A constant holding the maximum value an instance of $className can have. */ public const val MAX_VALUE: $className = $className(-1) + + /** + * The number of bytes used to represent an instance of $className in a binary form. + */ + public const val SIZE_BYTES: Int = ${type.byteSize} + + /** + * The number of bits used to represent an instance of $className in a binary form. + */ + public const val SIZE_BITS: Int = ${type.byteSize * 8} }""") generateCompareTo() diff --git a/libraries/stdlib/js/runtime/primitiveCompanionObjects.kt b/libraries/stdlib/js/runtime/primitiveCompanionObjects.kt index 1657021be10..58a592cc0dd 100644 --- a/libraries/stdlib/js/runtime/primitiveCompanionObjects.kt +++ b/libraries/stdlib/js/runtime/primitiveCompanionObjects.kt @@ -48,6 +48,12 @@ private object IntCompanionObject { @JsName("MAX_VALUE") val MAX_VALUE: Int = 2147483647 + + @JsName("SIZE_BYTES") + const val SIZE_BYTES = 4 + + @JsName("SIZE_BITS") + const val SIZE_BITS = 32 } @JsName("LongCompanionObject") @@ -57,6 +63,12 @@ private object LongCompanionObject { @JsName("MAX_VALUE") val MAX_VALUE: Long = js("Kotlin.Long.MAX_VALUE") + + @JsName("SIZE_BYTES") + const val SIZE_BYTES = 8 + + @JsName("SIZE_BITS") + const val SIZE_BITS = 64 } @JsName("ShortCompanionObject") @@ -66,6 +78,12 @@ private object ShortCompanionObject { @JsName("MAX_VALUE") val MAX_VALUE: Short = 32767 + + @JsName("SIZE_BYTES") + const val SIZE_BYTES = 2 + + @JsName("SIZE_BITS") + const val SIZE_BITS = 16 } @JsName("ByteCompanionObject") @@ -75,6 +93,12 @@ private object ByteCompanionObject { @JsName("MAX_VALUE") val MAX_VALUE: Byte = 127 + + @JsName("SIZE_BYTES") + const val SIZE_BYTES = 1 + + @JsName("SIZE_BITS") + const val SIZE_BITS = 8 } @JsName("CharCompanionObject") @@ -96,6 +120,12 @@ private object CharCompanionObject { @JsName("MAX_SURROGATE") public const val MAX_SURROGATE: Char = MAX_LOW_SURROGATE + + @JsName("SIZE_BYTES") + const val SIZE_BYTES = 2 + + @JsName("SIZE_BITS") + const val SIZE_BITS = 16 } private object StringCompanionObject {} diff --git a/libraries/stdlib/jvm/runtime/kotlin/jvm/internal/PrimitiveCompanionObjects.kt b/libraries/stdlib/jvm/runtime/kotlin/jvm/internal/PrimitiveCompanionObjects.kt index 69cf48af9f7..03e4421cb3a 100644 --- a/libraries/stdlib/jvm/runtime/kotlin/jvm/internal/PrimitiveCompanionObjects.kt +++ b/libraries/stdlib/jvm/runtime/kotlin/jvm/internal/PrimitiveCompanionObjects.kt @@ -24,21 +24,29 @@ internal object FloatCompanionObject { internal object IntCompanionObject { const val MIN_VALUE: Int = java.lang.Integer.MIN_VALUE const val MAX_VALUE: Int = java.lang.Integer.MAX_VALUE + const val SIZE_BYTES: Int = 4 + const val SIZE_BITS: Int = SIZE_BYTES * 8 } internal object LongCompanionObject { const val MIN_VALUE: Long = java.lang.Long.MIN_VALUE const val MAX_VALUE: Long = java.lang.Long.MAX_VALUE + const val SIZE_BYTES: Int = 8 + const val SIZE_BITS: Int = SIZE_BYTES * 8 } internal object ShortCompanionObject { const val MIN_VALUE: Short = java.lang.Short.MIN_VALUE const val MAX_VALUE: Short = java.lang.Short.MAX_VALUE + const val SIZE_BYTES: Int = 2 + const val SIZE_BITS: Int = SIZE_BYTES * 8 } internal object ByteCompanionObject { const val MIN_VALUE: Byte = java.lang.Byte.MIN_VALUE const val MAX_VALUE: Byte = java.lang.Byte.MAX_VALUE + const val SIZE_BYTES: Int = 1 + const val SIZE_BITS: Int = SIZE_BYTES * 8 } @@ -49,6 +57,8 @@ internal object CharCompanionObject { const val MAX_LOW_SURROGATE: Char = '\uDFFF' const val MIN_SURROGATE: Char = MIN_HIGH_SURROGATE const val MAX_SURROGATE: Char = MAX_LOW_SURROGATE + const val SIZE_BYTES: Int = 2 + const val SIZE_BITS: Int = SIZE_BYTES * 8 } internal object StringCompanionObject {} diff --git a/libraries/stdlib/unsigned/src/kotlin/UByte.kt b/libraries/stdlib/unsigned/src/kotlin/UByte.kt index 6ce7657d655..4ed06b39565 100644 --- a/libraries/stdlib/unsigned/src/kotlin/UByte.kt +++ b/libraries/stdlib/unsigned/src/kotlin/UByte.kt @@ -24,6 +24,16 @@ public inline class UByte internal constructor(private val data: Byte) : Compara * A constant holding the maximum value an instance of UByte can have. */ public const val MAX_VALUE: UByte = UByte(-1) + + /** + * The number of bytes used to represent an instance of UByte in a binary form. + */ + public const val SIZE_BYTES: Int = 1 + + /** + * The number of bits used to represent an instance of UByte in a binary form. + */ + public const val SIZE_BITS: Int = 8 } /** diff --git a/libraries/stdlib/unsigned/src/kotlin/UInt.kt b/libraries/stdlib/unsigned/src/kotlin/UInt.kt index 6840d53ef78..bf6560144cc 100644 --- a/libraries/stdlib/unsigned/src/kotlin/UInt.kt +++ b/libraries/stdlib/unsigned/src/kotlin/UInt.kt @@ -24,6 +24,16 @@ public inline class UInt internal constructor(private val data: Int) : Comparabl * A constant holding the maximum value an instance of UInt can have. */ public const val MAX_VALUE: UInt = UInt(-1) + + /** + * The number of bytes used to represent an instance of UInt in a binary form. + */ + public const val SIZE_BYTES: Int = 4 + + /** + * The number of bits used to represent an instance of UInt in a binary form. + */ + public const val SIZE_BITS: Int = 32 } /** diff --git a/libraries/stdlib/unsigned/src/kotlin/ULong.kt b/libraries/stdlib/unsigned/src/kotlin/ULong.kt index 4fa79ea6d2a..3cf24982049 100644 --- a/libraries/stdlib/unsigned/src/kotlin/ULong.kt +++ b/libraries/stdlib/unsigned/src/kotlin/ULong.kt @@ -24,6 +24,16 @@ public inline class ULong internal constructor(private val data: Long) : Compara * A constant holding the maximum value an instance of ULong can have. */ public const val MAX_VALUE: ULong = ULong(-1) + + /** + * The number of bytes used to represent an instance of ULong in a binary form. + */ + public const val SIZE_BYTES: Int = 8 + + /** + * The number of bits used to represent an instance of ULong in a binary form. + */ + public const val SIZE_BITS: Int = 64 } /** diff --git a/libraries/stdlib/unsigned/src/kotlin/UShort.kt b/libraries/stdlib/unsigned/src/kotlin/UShort.kt index a6bd60853c3..57b64e0a202 100644 --- a/libraries/stdlib/unsigned/src/kotlin/UShort.kt +++ b/libraries/stdlib/unsigned/src/kotlin/UShort.kt @@ -24,6 +24,16 @@ public inline class UShort internal constructor(private val data: Short) : Compa * A constant holding the maximum value an instance of UShort can have. */ public const val MAX_VALUE: UShort = UShort(-1) + + /** + * The number of bytes used to represent an instance of UShort in a binary form. + */ + public const val SIZE_BYTES: Int = 2 + + /** + * The number of bits used to represent an instance of UShort in a binary form. + */ + public const val SIZE_BITS: Int = 16 } /** diff --git a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-runtime.txt b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-runtime.txt index 72e10064499..4895ca698ed 100644 --- a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-runtime.txt +++ b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-runtime.txt @@ -380,6 +380,8 @@ public final class kotlin/jvm/internal/ByteCompanionObject { public static final field INSTANCE Lkotlin/jvm/internal/ByteCompanionObject; public static final field MAX_VALUE B public static final field MIN_VALUE B + public static final field SIZE_BITS I + public static final field SIZE_BYTES I } public final class kotlin/jvm/internal/ByteSpreadBuilder : kotlin/jvm/internal/PrimitiveSpreadBuilder { @@ -421,6 +423,8 @@ public final class kotlin/jvm/internal/CharCompanionObject { public static final field MIN_HIGH_SURROGATE C public static final field MIN_LOW_SURROGATE C public static final field MIN_SURROGATE C + public static final field SIZE_BITS I + public static final field SIZE_BYTES I } public final class kotlin/jvm/internal/CharSpreadBuilder : kotlin/jvm/internal/PrimitiveSpreadBuilder { @@ -572,6 +576,8 @@ public final class kotlin/jvm/internal/IntCompanionObject { public static final field INSTANCE Lkotlin/jvm/internal/IntCompanionObject; public static final field MAX_VALUE I public static final field MIN_VALUE I + public static final field SIZE_BITS I + public static final field SIZE_BYTES I } public final class kotlin/jvm/internal/IntSpreadBuilder : kotlin/jvm/internal/PrimitiveSpreadBuilder { @@ -638,6 +644,8 @@ public final class kotlin/jvm/internal/LongCompanionObject { public static final field INSTANCE Lkotlin/jvm/internal/LongCompanionObject; public static final field MAX_VALUE J public static final field MIN_VALUE J + public static final field SIZE_BITS I + public static final field SIZE_BYTES I } public final class kotlin/jvm/internal/LongSpreadBuilder : kotlin/jvm/internal/PrimitiveSpreadBuilder { @@ -921,6 +929,8 @@ public final class kotlin/jvm/internal/ShortCompanionObject { public static final field INSTANCE Lkotlin/jvm/internal/ShortCompanionObject; public static final field MAX_VALUE S public static final field MIN_VALUE S + public static final field SIZE_BITS I + public static final field SIZE_BYTES I } public final class kotlin/jvm/internal/ShortSpreadBuilder : kotlin/jvm/internal/PrimitiveSpreadBuilder { diff --git a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt index 9cb46124c08..bff3536a0d0 100644 --- a/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt +++ b/libraries/tools/binary-compatibility-validator/reference-public-api/kotlin-stdlib-runtime-merged.txt @@ -216,6 +216,8 @@ public final class kotlin/UByte : java/lang/Comparable { public static final field Companion Lkotlin/UByte$Companion; public static final field MAX_VALUE B public static final field MIN_VALUE B + public static final field SIZE_BITS I + public static final field SIZE_BYTES I public final fun and (B)B public fun compareTo (B)I public final fun compareTo (I)I @@ -358,6 +360,8 @@ public final class kotlin/UInt : java/lang/Comparable { public static final field Companion Lkotlin/UInt$Companion; public static final field MAX_VALUE I public static final field MIN_VALUE I + public static final field SIZE_BITS I + public static final field SIZE_BYTES I public final fun and (I)I public final fun compareTo (B)I public fun compareTo (I)I @@ -504,6 +508,8 @@ public final class kotlin/ULong : java/lang/Comparable { public static final field Companion Lkotlin/ULong$Companion; public static final field MAX_VALUE J public static final field MIN_VALUE J + public static final field SIZE_BITS I + public static final field SIZE_BYTES I public final fun and (J)J public final fun compareTo (B)I public final fun compareTo (I)I @@ -650,6 +656,8 @@ public final class kotlin/UShort : java/lang/Comparable { public static final field Companion Lkotlin/UShort$Companion; public static final field MAX_VALUE S public static final field MIN_VALUE S + public static final field SIZE_BITS I + public static final field SIZE_BYTES I public final fun and (S)S public final fun compareTo (B)I public final fun compareTo (I)I @@ -3194,6 +3202,8 @@ public final class kotlin/jvm/internal/ByteCompanionObject { public static final field INSTANCE Lkotlin/jvm/internal/ByteCompanionObject; public static final field MAX_VALUE B public static final field MIN_VALUE B + public static final field SIZE_BITS I + public static final field SIZE_BYTES I } public final class kotlin/jvm/internal/ByteSpreadBuilder : kotlin/jvm/internal/PrimitiveSpreadBuilder { @@ -3235,6 +3245,8 @@ public final class kotlin/jvm/internal/CharCompanionObject { public static final field MIN_HIGH_SURROGATE C public static final field MIN_LOW_SURROGATE C public static final field MIN_SURROGATE C + public static final field SIZE_BITS I + public static final field SIZE_BYTES I } public final class kotlin/jvm/internal/CharSpreadBuilder : kotlin/jvm/internal/PrimitiveSpreadBuilder { @@ -3386,6 +3398,8 @@ public final class kotlin/jvm/internal/IntCompanionObject { public static final field INSTANCE Lkotlin/jvm/internal/IntCompanionObject; public static final field MAX_VALUE I public static final field MIN_VALUE I + public static final field SIZE_BITS I + public static final field SIZE_BYTES I } public final class kotlin/jvm/internal/IntSpreadBuilder : kotlin/jvm/internal/PrimitiveSpreadBuilder { @@ -3452,6 +3466,8 @@ public final class kotlin/jvm/internal/LongCompanionObject { public static final field INSTANCE Lkotlin/jvm/internal/LongCompanionObject; public static final field MAX_VALUE J public static final field MIN_VALUE J + public static final field SIZE_BITS I + public static final field SIZE_BYTES I } public final class kotlin/jvm/internal/LongSpreadBuilder : kotlin/jvm/internal/PrimitiveSpreadBuilder { @@ -3735,6 +3751,8 @@ public final class kotlin/jvm/internal/ShortCompanionObject { public static final field INSTANCE Lkotlin/jvm/internal/ShortCompanionObject; public static final field MAX_VALUE S public static final field MIN_VALUE S + public static final field SIZE_BITS I + public static final field SIZE_BYTES I } public final class kotlin/jvm/internal/ShortSpreadBuilder : kotlin/jvm/internal/PrimitiveSpreadBuilder {