diff --git a/libraries/stdlib/js/src/kotlin/Comparator.kt b/libraries/stdlib/js/src/kotlin/Comparator.kt index be1d1a2a74d..a4a955315f3 100644 --- a/libraries/stdlib/js/src/kotlin/Comparator.kt +++ b/libraries/stdlib/js/src/kotlin/Comparator.kt @@ -7,7 +7,8 @@ package kotlin public actual interface Comparator { - @JsName("compare") actual fun compare(a: T, b: T): Int + @JsName("compare") + actual fun compare(a: T, b: T): Int } public actual inline fun Comparator(crossinline comparison: (a: T, b: T) -> Int): Comparator = object : Comparator { diff --git a/libraries/stdlib/js/src/kotlin/builtins.kt b/libraries/stdlib/js/src/kotlin/builtins.kt index 37d9348c069..9c1fece2ddb 100644 --- a/libraries/stdlib/js/src/kotlin/builtins.kt +++ b/libraries/stdlib/js/src/kotlin/builtins.kt @@ -90,8 +90,7 @@ internal fun noWhenBranchMatched(): Nothing = throw NoWhenBranchMatchedException internal fun subSequence(c: CharSequence, startIndex: Int, endIndex: Int): CharSequence { if (c is String) { return c.substring(startIndex, endIndex) - } - else { + } else { return c.asDynamic().`subSequence_vux9f0$`(startIndex, endIndex) } } @@ -100,8 +99,7 @@ internal fun subSequence(c: CharSequence, startIndex: Int, endIndex: Int): CharS internal fun captureStack(baseClass: JsClass, instance: Throwable) { if (js("Error").captureStackTrace) { js("Error").captureStackTrace(instance, instance::class.js); - } - else { + } else { instance.asDynamic().stack = js("new Error()").stack; } } @@ -111,8 +109,7 @@ internal fun newThrowable(message: String?, cause: Throwable?): Throwable { val throwable = js("new Error()") throwable.message = if (jsTypeOf(message) == "undefined") { if (cause != null) cause.toString() else null - } - else { + } else { message } throwable.cause = cause @@ -151,8 +148,7 @@ internal inline fun concat(args: Array): T { val arr = args[i] if (arr !is Array<*>) { typed[i] = js("[]").slice.call(arr) - } - else { + } else { typed[i] = arr } } @@ -182,8 +178,7 @@ internal fun primitiveArrayConcat(a: T, b: T): T { val args: Array = js("arguments") if (a is Array<*> && a.asDynamic().`$type$` === undefined) { return concat(args) - } - else { + } else { var size = 0 for (i in args.indices) { size += args[i].asDynamic().length as Int diff --git a/libraries/stdlib/js/src/kotlin/collections.kt b/libraries/stdlib/js/src/kotlin/collections.kt index 696366560c6..40ab566f097 100644 --- a/libraries/stdlib/js/src/kotlin/collections.kt +++ b/libraries/stdlib/js/src/kotlin/collections.kt @@ -95,6 +95,7 @@ public actual fun MutableList.shuffle(): Unit { this[j] = copy } } + private fun rand(upperBound: Int) = floor(kotlin.js.Math.random() * upperBound).toInt() /** @@ -143,8 +144,8 @@ internal actual inline fun Map.toSingletonMap(): Map = th @Suppress("NOTHING_TO_INLINE") internal actual inline fun Array.copyToArrayOfAny(isVarargs: Boolean): Array = - if (isVarargs) - // no need to copy vararg array in JS - this - else - this.copyOf() + if (isVarargs) + // no need to copy vararg array in JS + this + else + this.copyOf() diff --git a/libraries/stdlib/js/src/kotlin/concurrent.kt b/libraries/stdlib/js/src/kotlin/concurrent.kt index b103d4663d2..f0fa4220edb 100644 --- a/libraries/stdlib/js/src/kotlin/concurrent.kt +++ b/libraries/stdlib/js/src/kotlin/concurrent.kt @@ -8,6 +8,7 @@ package kotlin @Deprecated("Use Synchronized annotation from kotlin.jvm package", ReplaceWith("kotlin.jvm.Synchronized"), level = DeprecationLevel.WARNING) public typealias Synchronized = kotlin.jvm.Synchronized + @Deprecated("Use Volatile annotation from kotlin.jvm package", ReplaceWith("kotlin.jvm.Volatile"), level = DeprecationLevel.WARNING) public typealias Volatile = kotlin.jvm.Volatile diff --git a/libraries/stdlib/js/src/kotlin/coroutines.kt b/libraries/stdlib/js/src/kotlin/coroutines.kt index d698a0574fb..8bf3d3358df 100644 --- a/libraries/stdlib/js/src/kotlin/coroutines.kt +++ b/libraries/stdlib/js/src/kotlin/coroutines.kt @@ -4,6 +4,7 @@ */ package kotlin.coroutines.experimental + import kotlin.coroutines.experimental.intrinsics.* @JsName("CoroutineImpl") @@ -38,13 +39,14 @@ internal abstract class CoroutineImpl(private val resultContinuation: Continuati private val UNDECIDED: Any? = Any() private val RESUMED: Any? = Any() + private class Fail(val exception: Throwable) @PublishedApi internal actual class SafeContinuation internal actual constructor( - private val delegate: Continuation, - initialResult: Any? + private val delegate: Continuation, + initialResult: Any? ) : Continuation { @PublishedApi diff --git a/libraries/stdlib/js/src/kotlin/coroutinesIntrinsics.kt b/libraries/stdlib/js/src/kotlin/coroutinesIntrinsics.kt index 44bce26419a..f8b39d1d58f 100644 --- a/libraries/stdlib/js/src/kotlin/coroutinesIntrinsics.kt +++ b/libraries/stdlib/js/src/kotlin/coroutinesIntrinsics.kt @@ -11,24 +11,24 @@ import kotlin.coroutines.experimental.Continuation @Suppress("UNCHECKED_CAST") @kotlin.internal.InlineOnly public actual inline fun (suspend () -> T).startCoroutineUninterceptedOrReturn( - completion: Continuation + completion: Continuation ): Any? = this.asDynamic()(completion, false) @SinceKotlin("1.1") @Suppress("UNCHECKED_CAST") @kotlin.internal.InlineOnly public actual inline fun (suspend R.() -> T).startCoroutineUninterceptedOrReturn( - receiver: R, - completion: Continuation + receiver: R, + completion: Continuation ): Any? = this.asDynamic()(receiver, completion, false) @SinceKotlin("1.1") public actual fun (suspend R.() -> T).createCoroutineUnchecked( - receiver: R, - completion: Continuation + receiver: R, + completion: Continuation ): Continuation = this.asDynamic()(receiver, completion, true).facade @SinceKotlin("1.1") public actual fun (suspend () -> T).createCoroutineUnchecked( - completion: Continuation + completion: Continuation ): Continuation = this.asDynamic()(completion, true).facade diff --git a/libraries/stdlib/js/src/kotlin/dom/Builders.kt b/libraries/stdlib/js/src/kotlin/dom/Builders.kt index e2b93a9e85a..da1d8b82397 100644 --- a/libraries/stdlib/js/src/kotlin/dom/Builders.kt +++ b/libraries/stdlib/js/src/kotlin/dom/Builders.kt @@ -20,5 +20,5 @@ public fun Document.createElement(name: String, init: Element.() -> Unit): Eleme * The element is initialized with the speicifed [init] function. */ public fun Element.appendElement(name: String, init: Element.() -> Unit): Element = - ownerDocument!!.createElement(name, init).also { appendChild(it) } + ownerDocument!!.createElement(name, init).also { appendChild(it) } diff --git a/libraries/stdlib/js/src/kotlin/dom/EventListener.kt b/libraries/stdlib/js/src/kotlin/dom/EventListener.kt index b4912439451..c5516daca08 100644 --- a/libraries/stdlib/js/src/kotlin/dom/EventListener.kt +++ b/libraries/stdlib/js/src/kotlin/dom/EventListener.kt @@ -11,5 +11,6 @@ private class EventListenerHandler(private val handler: (Event) -> Unit) : Event public override fun handleEvent(e: Event) { handler(e) } + public override fun toString(): String = "EventListenerHandler($handler)" } diff --git a/libraries/stdlib/js/src/kotlin/grouping.kt b/libraries/stdlib/js/src/kotlin/grouping.kt index c6d61ba319f..b042e60f458 100644 --- a/libraries/stdlib/js/src/kotlin/grouping.kt +++ b/libraries/stdlib/js/src/kotlin/grouping.kt @@ -11,9 +11,9 @@ package kotlin.collections */ @SinceKotlin("1.1") public actual fun Grouping.eachCount(): Map = - fold(0) { acc, _ -> acc + 1 } + fold(0) { acc, _ -> acc + 1 } -/** +/* /** * Groups elements from the [Grouping] source by key and sums values provided by the [valueSelector] function for elements in each group. * diff --git a/libraries/stdlib/js/src/kotlin/math.kt b/libraries/stdlib/js/src/kotlin/math.kt index e686f5d6bf6..4c42a1041cf 100644 --- a/libraries/stdlib/js/src/kotlin/math.kt +++ b/libraries/stdlib/js/src/kotlin/math.kt @@ -371,6 +371,7 @@ public actual inline fun sign(x: Double): Double = nativeMath.sign(x) @SinceKotlin("1.2") @InlineOnly public actual inline fun min(a: Double, b: Double): Double = nativeMath.min(a, b) + /** * Returns the greater of two values. * @@ -502,7 +503,7 @@ public actual fun Double.nextTowards(to: Double): Double = when { this.isNaN() || to.isNaN() -> Double.NaN to == this -> to to > this -> this.nextUp() - else /* to < this */-> this.nextDown() + else /* to < this */ -> this.nextDown() } @@ -901,6 +902,7 @@ public actual inline fun sign(x: Float): Float = nativeMath.sign(x.toDouble()).t @SinceKotlin("1.2") @InlineOnly public actual inline fun min(a: Float, b: Float): Float = nativeMath.min(a, b) + /** * Returns the greater of two values. * @@ -970,6 +972,7 @@ public actual inline val Float.sign: Float get() = nativeMath.sign(this.toDouble @SinceKotlin("1.2") @InlineOnly public actual inline fun Float.withSign(sign: Float): Float = this.toDouble().withSign(sign.toDouble()).toFloat() + /** * Returns this value with the sign bit same as of the [sign] value. */ diff --git a/libraries/stdlib/js/src/kotlin/numberConversions.kt b/libraries/stdlib/js/src/kotlin/numberConversions.kt index fdcc103072c..1f9d771b59a 100644 --- a/libraries/stdlib/js/src/kotlin/numberConversions.kt +++ b/libraries/stdlib/js/src/kotlin/numberConversions.kt @@ -6,7 +6,6 @@ package kotlin.text - /** * Returns `true` if the contents of this string is equal to the word "true", ignoring case, and `false` otherwise. */ @@ -97,7 +96,7 @@ public actual fun String.toDoubleOrNull(): Double? = (+(this.asDynamic())).unsaf public actual inline fun String.toFloatOrNull(): Float? = toDoubleOrNull().unsafeCast() -private fun String.isNaN(): Boolean = when(this.toLowerCase()) { +private fun String.isNaN(): Boolean = when (this.toLowerCase()) { "nan", "+nan", "-nan" -> true else -> false } @@ -107,7 +106,7 @@ private fun String.isNaN(): Boolean = when(this.toLowerCase()) { */ @PublishedApi internal actual fun checkRadix(radix: Int): Int { - if(radix !in 2..36) { + if (radix !in 2..36) { throw IllegalArgumentException("radix $radix was not in valid range 2..36") } return radix diff --git a/libraries/stdlib/js/src/kotlin/promise.kt b/libraries/stdlib/js/src/kotlin/promise.kt index f8561239e64..cc106614b68 100644 --- a/libraries/stdlib/js/src/kotlin/promise.kt +++ b/libraries/stdlib/js/src/kotlin/promise.kt @@ -14,6 +14,7 @@ import kotlin.internal.LowPriorityInOverloadResolution public open external class Promise(executor: (resolve: (T) -> Unit, reject: (Throwable) -> Unit) -> Unit) { @LowPriorityInOverloadResolution public open fun then(onFulfilled: ((T) -> S)?): Promise + @LowPriorityInOverloadResolution public open fun then(onFulfilled: ((T) -> S)?, onRejected: ((Throwable) -> S)?): Promise @@ -33,14 +34,14 @@ public open external class Promise(executor: (resolve: (T) -> Unit, rejec // It's workaround for KT-19672 since we can fix it properly until KT-11265 isn't fixed. inline fun Promise>.then( - noinline onFulfilled: ((T) -> S)? + noinline onFulfilled: ((T) -> S)? ): Promise { return this.unsafeCast>().then(onFulfilled) } inline fun Promise>.then( - noinline onFulfilled: ((T) -> S)?, - noinline onRejected: ((Throwable) -> S)? + noinline onFulfilled: ((T) -> S)?, + noinline onRejected: ((Throwable) -> S)? ): Promise { return this.unsafeCast>().then(onFulfilled, onRejected) } diff --git a/libraries/stdlib/js/src/kotlin/ranges.kt b/libraries/stdlib/js/src/kotlin/ranges.kt index f468218cff8..3061c36a59c 100644 --- a/libraries/stdlib/js/src/kotlin/ranges.kt +++ b/libraries/stdlib/js/src/kotlin/ranges.kt @@ -8,4 +8,4 @@ package kotlin.ranges @SinceKotlin("1.1") @kotlin.internal.InlineOnly public inline operator fun Float.rangeTo(that: Float): ClosedFloatingPointRange = - this.toDouble().rangeTo(that.toDouble()).unsafeCast>() + this.toDouble().rangeTo(that.toDouble()).unsafeCast>() diff --git a/libraries/stdlib/js/src/kotlin/reflect/KClassImpl.kt b/libraries/stdlib/js/src/kotlin/reflect/KClassImpl.kt index abf465ea10e..899560f4f3c 100644 --- a/libraries/stdlib/js/src/kotlin/reflect/KClassImpl.kt +++ b/libraries/stdlib/js/src/kotlin/reflect/KClassImpl.kt @@ -8,7 +8,7 @@ package kotlin.reflect.js.internal import kotlin.reflect.* internal abstract class KClassImpl( - internal open val jClass: JsClass + internal open val jClass: JsClass ) : KClass { override val annotations: List get() = TODO() @@ -65,9 +65,9 @@ internal class SimpleKClassImpl(jClass: JsClass) : KClassImpl(jCl } internal class PrimitiveKClassImpl( - jClass: JsClass, - private val givenSimpleName: String, - private val isInstanceFunction: (Any?) -> Boolean + jClass: JsClass, + private val givenSimpleName: String, + private val isInstanceFunction: (Any?) -> Boolean ) : KClassImpl(jClass) { override fun equals(other: Any?): Boolean { if (other !is PrimitiveKClassImpl<*>) return false diff --git a/libraries/stdlib/js/src/kotlin/reflect/primitives.kt b/libraries/stdlib/js/src/kotlin/reflect/primitives.kt index a6919adc468..c9d5c462aeb 100644 --- a/libraries/stdlib/js/src/kotlin/reflect/primitives.kt +++ b/libraries/stdlib/js/src/kotlin/reflect/primitives.kt @@ -19,10 +19,10 @@ internal object PrimitiveClasses { val nothingClass = NothingKClassImpl @JsName("booleanClass") - val booleanClass = PrimitiveKClassImpl(js("Boolean").unsafeCast>(), "Boolean", { it is Boolean }) + val booleanClass = PrimitiveKClassImpl(js("Boolean").unsafeCast>(), "Boolean", { it is Boolean }) @JsName("byteClass") - val byteClass = PrimitiveKClassImpl(js("Number").unsafeCast>(), "Byte", { it is Byte }) + val byteClass = PrimitiveKClassImpl(js("Number").unsafeCast>(), "Byte", { it is Byte }) @JsName("shortClass") val shortClass = PrimitiveKClassImpl(js("Number").unsafeCast>(), "Short", { it is Short }) diff --git a/libraries/stdlib/js/src/kotlin/reflect/reflection.kt b/libraries/stdlib/js/src/kotlin/reflect/reflection.kt index 7fb32ee3287..a4de4921f8a 100644 --- a/libraries/stdlib/js/src/kotlin/reflect/reflection.kt +++ b/libraries/stdlib/js/src/kotlin/reflect/reflection.kt @@ -10,39 +10,40 @@ import kotlin.reflect.js.internal.* @JsName("getKClass") internal fun getKClass(jClass: JsClass): KClass = getOrCreateKClass(jClass) + @JsName("getKClassFromExpression") internal fun getKClassFromExpression(e: T): KClass = - when (jsTypeOf(e)) { - "string" -> PrimitiveClasses.stringClass - "number" -> if (js("e | 0") === e) PrimitiveClasses.intClass else PrimitiveClasses.doubleClass - "boolean" -> PrimitiveClasses.booleanClass - "function" -> PrimitiveClasses.functionClass(e.asDynamic().length) - else -> { - when { - e is BooleanArray -> PrimitiveClasses.booleanArrayClass - e is CharArray -> PrimitiveClasses.charArrayClass - e is ByteArray -> PrimitiveClasses.byteArrayClass - e is ShortArray -> PrimitiveClasses.shortArrayClass - e is IntArray -> PrimitiveClasses.intArrayClass - e is LongArray -> PrimitiveClasses.longArrayClass - e is FloatArray -> PrimitiveClasses.floatArrayClass - e is DoubleArray -> PrimitiveClasses.doubleArrayClass - e is KClass<*> -> KClass::class - e is Array<*> -> PrimitiveClasses.arrayClass - else -> { - val constructor = js("Object").getPrototypeOf(e).constructor - when { - constructor === js("Object") -> PrimitiveClasses.anyClass - constructor === js("Error") -> PrimitiveClasses.throwableClass - else -> { - val jsClass: JsClass = constructor - getOrCreateKClass(jsClass) - } + when (jsTypeOf(e)) { + "string" -> PrimitiveClasses.stringClass + "number" -> if (js("e | 0") === e) PrimitiveClasses.intClass else PrimitiveClasses.doubleClass + "boolean" -> PrimitiveClasses.booleanClass + "function" -> PrimitiveClasses.functionClass(e.asDynamic().length) + else -> { + when { + e is BooleanArray -> PrimitiveClasses.booleanArrayClass + e is CharArray -> PrimitiveClasses.charArrayClass + e is ByteArray -> PrimitiveClasses.byteArrayClass + e is ShortArray -> PrimitiveClasses.shortArrayClass + e is IntArray -> PrimitiveClasses.intArrayClass + e is LongArray -> PrimitiveClasses.longArrayClass + e is FloatArray -> PrimitiveClasses.floatArrayClass + e is DoubleArray -> PrimitiveClasses.doubleArrayClass + e is KClass<*> -> KClass::class + e is Array<*> -> PrimitiveClasses.arrayClass + else -> { + val constructor = js("Object").getPrototypeOf(e).constructor + when { + constructor === js("Object") -> PrimitiveClasses.anyClass + constructor === js("Error") -> PrimitiveClasses.throwableClass + else -> { + val jsClass: JsClass = constructor + getOrCreateKClass(jsClass) } } } } - }.unsafeCast>() + } + }.unsafeCast>() private fun getOrCreateKClass(jClass: JsClass): KClass { if (jClass === js("String")) return PrimitiveClasses.stringClass.unsafeCast>() @@ -54,12 +55,10 @@ private fun getOrCreateKClass(jClass: JsClass): KClass { val kClass = SimpleKClassImpl(jClass) metadata.`$kClass$` = kClass kClass - } - else { + } else { metadata.`$kClass$` } - } - else { + } else { SimpleKClassImpl(jClass) } } diff --git a/libraries/stdlib/js/src/kotlin/regex.kt b/libraries/stdlib/js/src/kotlin/regex.kt index 22f781e7a80..9a6f372c1f9 100644 --- a/libraries/stdlib/js/src/kotlin/regex.kt +++ b/libraries/stdlib/js/src/kotlin/regex.kt @@ -71,7 +71,8 @@ public actual class Regex actual constructor(pattern: String, options: Set = generateSequence({ find(input, startIndex) }, { match -> match.next() }) + public actual fun findAll(input: CharSequence, startIndex: Int = 0): Sequence = + generateSequence({ find(input, startIndex) }, { match -> match.next() }) /** * Attempts to match the entire [input] CharSequence against the pattern. @@ -110,8 +111,7 @@ public actual class Regex actual constructor(pattern: String, options: Set