From c9e2ed4e1ffe0ea4b7ad0d1291178e9d7d56a430 Mon Sep 17 00:00:00 2001 From: Svyatoslav Kuzmich Date: Tue, 29 Jan 2019 15:04:44 +0300 Subject: [PATCH] Undo unnecessary changes to stdlib Partially revert "[stdlib] Reduce usage of extension functions" --- .../kotlin/js/test/JsIrTestRuntime.kt | 4 +++- .../smallRuntimeMissingDeclarations.kt | 21 +++++++++++++++++++ .../kotlin/coroutines/CoroutineContextImpl.kt | 9 ++------ libraries/stdlib/src/kotlin/util/Standard.kt | 2 +- 4 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 libraries/stdlib/js/irRuntime/smallRuntimeMissingDeclarations.kt diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/JsIrTestRuntime.kt b/js/js.tests/test/org/jetbrains/kotlin/js/test/JsIrTestRuntime.kt index 207dafd6dce..80e0961eb71 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/JsIrTestRuntime.kt +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/JsIrTestRuntime.kt @@ -99,7 +99,7 @@ private val fullRuntimeSources = listOfKtFilesFrom( // Full version is defined in stdlib // This file is useful for smaller subset of runtime sources - "libraries/stdlib/js/irRuntime/rangeExtensions.kt", + "libraries/stdlib/js/irRuntime/smallRuntimeMissingDeclarations.kt", // Mostly array-specific stuff "libraries/stdlib/js/src/kotlin/builtins.kt", @@ -158,6 +158,8 @@ val reducedRuntimeSources = fullRuntimeSources - listOfKtFilesFrom( "libraries/stdlib/src/kotlin/util/KotlinVersion.kt", "libraries/stdlib/src/kotlin/util/Tuples.kt", "libraries/stdlib/common/src/generated/_Comparisons.kt" +) + listOfKtFilesFrom( + "libraries/stdlib/js/irRuntime/smallRuntimeMissingDeclarations.kt" ) private fun listOfKtFilesFrom(vararg paths: String): List { diff --git a/libraries/stdlib/js/irRuntime/smallRuntimeMissingDeclarations.kt b/libraries/stdlib/js/irRuntime/smallRuntimeMissingDeclarations.kt new file mode 100644 index 00000000000..af8628c925a --- /dev/null +++ b/libraries/stdlib/js/irRuntime/smallRuntimeMissingDeclarations.kt @@ -0,0 +1,21 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package kotlin + +/** + * Returns `true` if this char sequence is empty (contains no characters). + */ +@kotlin.internal.InlineOnly +public inline fun CharSequence.isEmpty(): Boolean = length == 0 + +/** + * Accumulates value starting with [initial] value and applying [operation] from left to right to current accumulator value and each element. + */ +public inline fun Array.fold(initial: R, operation: (acc: R, T) -> R): R { + var accumulator = initial + for (element in this) accumulator = operation(accumulator, element) + return accumulator +} diff --git a/libraries/stdlib/src/kotlin/coroutines/CoroutineContextImpl.kt b/libraries/stdlib/src/kotlin/coroutines/CoroutineContextImpl.kt index 32429a8e92b..ce48f06f6b8 100644 --- a/libraries/stdlib/src/kotlin/coroutines/CoroutineContextImpl.kt +++ b/libraries/stdlib/src/kotlin/coroutines/CoroutineContextImpl.kt @@ -98,7 +98,7 @@ internal class CombinedContext( override fun toString(): String = "[" + fold("") { acc, element -> - if (acc.length == 0) element.toString() else "$acc, $element" + if (acc.isEmpty()) element.toString() else "$acc, $element" } + "]" private fun writeReplace(): Any { @@ -116,11 +116,6 @@ internal class CombinedContext( private const val serialVersionUID: Long = 0L } - private fun readResolve(): Any { - var result: CoroutineContext = EmptyCoroutineContext - for (element in elements) - result = result + element - return result - } + private fun readResolve(): Any = elements.fold(EmptyCoroutineContext, CoroutineContext::plus) } } diff --git a/libraries/stdlib/src/kotlin/util/Standard.kt b/libraries/stdlib/src/kotlin/util/Standard.kt index 90cad8d4b00..aa3acb3c8b5 100644 --- a/libraries/stdlib/src/kotlin/util/Standard.kt +++ b/libraries/stdlib/src/kotlin/util/Standard.kt @@ -135,7 +135,7 @@ public inline fun T.takeUnless(predicate: (T) -> Boolean): T? { public inline fun repeat(times: Int, action: (Int) -> Unit) { contract { callsInPlace(action) } - for (index in 0 .. (times - 1)) { + for (index in 0 until times) { action(index) } }