diff --git a/js/js.libraries/src/core/char.kt b/js/js.libraries/src/core/char.kt index 91a581ff751..06ab5da6a19 100644 --- a/js/js.libraries/src/core/char.kt +++ b/js/js.libraries/src/core/char.kt @@ -19,9 +19,9 @@ package kotlin.text // actually \s is enough to match all whitespace, but \xA0 added because of different regexp behavior of Rhino used in Selenium tests public fun Char.isWhitespace(): Boolean = toString().matches("[\\s\\xA0]") -public external fun Char.toLowerCase(): Char = noImpl +public inline fun Char.toLowerCase(): Char = asDynamic().toLowerCase() -public external fun Char.toUpperCase(): Char = noImpl +public inline fun Char.toUpperCase(): Char = asDynamic().toUpperCase() /** * Returns `true` if this character is a Unicode high-surrogate code unit (also known as leading-surrogate code unit). diff --git a/js/js.libraries/src/core/core.kt b/js/js.libraries/src/core/core.kt index c93815a9c0f..2a8a202349e 100644 --- a/js/js.libraries/src/core/core.kt +++ b/js/js.libraries/src/core/core.kt @@ -7,7 +7,7 @@ public external fun eval(expr: String): dynamic = noImpl public external val undefined: Nothing? = noImpl -external operator fun MutableMap.set(key: K, value: V): V? = noImpl +inline operator fun MutableMap.set(key: K, value: V): V? = asDynamic().set(key, value) @library public fun println() {} diff --git a/js/js.libraries/src/core/generated/_ArraysJs.kt b/js/js.libraries/src/core/generated/_ArraysJs.kt index 2d0b4600720..df9676e26bf 100644 --- a/js/js.libraries/src/core/generated/_ArraysJs.kt +++ b/js/js.libraries/src/core/generated/_ArraysJs.kt @@ -844,57 +844,57 @@ public fun Array.contentDeepHashCode(): Int { /** * Sorts the array in-place according to the order specified by the given [comparison] function. */ -public external fun Array.sort(comparison: (T, T) -> Int): Unit { - noImpl +public inline fun Array.sort(noinline comparison: (T, T) -> Int): Unit { + asDynamic().sort(comparison) } /** * Sorts the array in-place according to the order specified by the given [comparison] function. */ -public external fun ByteArray.sort(comparison: (Byte, Byte) -> Int): Unit { - noImpl +public inline fun ByteArray.sort(noinline comparison: (Byte, Byte) -> Int): Unit { + asDynamic().sort(comparison) } /** * Sorts the array in-place according to the order specified by the given [comparison] function. */ -public external fun ShortArray.sort(comparison: (Short, Short) -> Int): Unit { - noImpl +public inline fun ShortArray.sort(noinline comparison: (Short, Short) -> Int): Unit { + asDynamic().sort(comparison) } /** * Sorts the array in-place according to the order specified by the given [comparison] function. */ -public external fun IntArray.sort(comparison: (Int, Int) -> Int): Unit { - noImpl +public inline fun IntArray.sort(noinline comparison: (Int, Int) -> Int): Unit { + asDynamic().sort(comparison) } /** * Sorts the array in-place according to the order specified by the given [comparison] function. */ -public external fun LongArray.sort(comparison: (Long, Long) -> Int): Unit { - noImpl +public inline fun LongArray.sort(noinline comparison: (Long, Long) -> Int): Unit { + asDynamic().sort(comparison) } /** * Sorts the array in-place according to the order specified by the given [comparison] function. */ -public external fun FloatArray.sort(comparison: (Float, Float) -> Int): Unit { - noImpl +public inline fun FloatArray.sort(noinline comparison: (Float, Float) -> Int): Unit { + asDynamic().sort(comparison) } /** * Sorts the array in-place according to the order specified by the given [comparison] function. */ -public external fun DoubleArray.sort(comparison: (Double, Double) -> Int): Unit { - noImpl +public inline fun DoubleArray.sort(noinline comparison: (Double, Double) -> Int): Unit { + asDynamic().sort(comparison) } /** * Sorts the array in-place according to the order specified by the given [comparison] function. */ -public external fun CharArray.sort(comparison: (Char, Char) -> Int): Unit { - noImpl +public inline fun CharArray.sort(noinline comparison: (Char, Char) -> Int): Unit { + asDynamic().sort(comparison) } /** diff --git a/js/js.libraries/src/core/string.kt b/js/js.libraries/src/core/string.kt index 631683e7edc..73d11fc6245 100644 --- a/js/js.libraries/src/core/string.kt +++ b/js/js.libraries/src/core/string.kt @@ -2,21 +2,17 @@ package kotlin.text import kotlin.text.js.RegExp -public external fun String.toUpperCase(): String = noImpl +public inline fun String.toUpperCase(): String = asDynamic().toUpperCase() -public external fun String.toLowerCase(): String = noImpl +public inline fun String.toLowerCase(): String = asDynamic().toLowerCase() -@JsName("indexOf") -internal external fun String.nativeIndexOf(str: String, fromIndex: Int): Int = noImpl +internal inline fun String.nativeIndexOf(str: String, fromIndex: Int): Int = asDynamic().indexOf(str, fromIndex) -@JsName("lastIndexOf") -internal external fun String.nativeLastIndexOf(str: String, fromIndex: Int): Int = noImpl +internal inline fun String.nativeLastIndexOf(str: String, fromIndex: Int): Int = asDynamic().lastIndexOf(str, fromIndex) -@JsName("startsWith") -internal external fun String.nativeStartsWith(s: String, position: Int): Boolean = noImpl +internal inline fun String.nativeStartsWith(s: String, position: Int): Boolean = asDynamic().startsWith(s, position) -@JsName("endsWith") -internal external fun String.nativeEndsWith(s: String): Boolean = noImpl +internal inline fun String.nativeEndsWith(s: String): Boolean = asDynamic().endsWith(s) @Deprecated("Use split(Regex) instead.", ReplaceWith("split(regex.toRegex()).toTypedArray()")) @library("splitString") @@ -26,18 +22,17 @@ public fun String.splitWithRegex(regex: String): Array = noImpl @library("splitString") public fun String.splitWithRegex(regex: String, limit: Int): Array = noImpl -public external fun String.substring(startIndex: Int): String = noImpl +public inline fun String.substring(startIndex: Int): String = asDynamic().substring(startIndex) -public external fun String.substring(startIndex: Int, endIndex: Int): String = noImpl +public inline fun String.substring(startIndex: Int, endIndex: Int): String = asDynamic().substring(startIndex, endIndex) -public external fun String.concat(str: String): String = noImpl +public inline fun String.concat(str: String): String = asDynamic().concat(str) -public external fun String.match(regex: String): Array = noImpl +public inline fun String.match(regex: String): Array = asDynamic().match(regex) //native public fun String.trim() : String = noImpl //TODO: String.replace to implement effective trimLeading and trimTrailing public inline val CharSequence.size: Int get() = asDynamic().length -@JsName("replace") -internal external fun String.nativeReplace(pattern: RegExp, replacement: String): String = noImpl +internal inline fun String.nativeReplace(pattern: RegExp, replacement: String): String = asDynamic().replace(pattern, replacement) diff --git a/js/js.libraries/src/jquery/ui.kt b/js/js.libraries/src/jquery/ui.kt index aa8f8c0c4c5..341caf0b358 100644 --- a/js/js.libraries/src/jquery/ui.kt +++ b/js/js.libraries/src/jquery/ui.kt @@ -4,22 +4,22 @@ package jquery.ui //jquery UI import jquery.JQuery -public external fun JQuery.buttonset() : JQuery = noImpl; +public inline fun JQuery.buttonset(): JQuery = asDynamic().buttonset() -public external fun JQuery.dialog() : JQuery = noImpl; +public inline fun JQuery.dialog(): JQuery = asDynamic().dialog() -public external fun JQuery.dialog(params : Json) : JQuery = noImpl +public inline fun JQuery.dialog(params: Json): JQuery = asDynamic().dialog(params) -public external fun JQuery.dialog(mode : String, param : String) : Any? = noImpl +public inline fun JQuery.dialog(mode: String, param: String): Any? = asDynamic().dialog(mode, param) -public external fun JQuery.dialog(mode : String) : JQuery = noImpl +public inline fun JQuery.dialog(mode: String): JQuery = asDynamic().dialog(mode) -public external fun JQuery.dialog(mode : String, param : String, value : Any?) : JQuery = noImpl +public inline fun JQuery.dialog(mode: String, param: String, value: Any?): JQuery = asDynamic().dialog(mode, param, value) -public external fun JQuery.button() : JQuery = noImpl; +public inline fun JQuery.button(): JQuery = asDynamic().button() -public external fun JQuery.accordion() : JQuery = noImpl +public inline fun JQuery.accordion(): JQuery = asDynamic().accordion() -public external fun JQuery.draggable(params : Json) : JQuery = noImpl +public inline fun JQuery.draggable(params: Json): JQuery = asDynamic().draggable(params) -public external fun JQuery.selectable() : JQuery = noImpl +public inline fun JQuery.selectable(): JQuery = asDynamic().selectable() diff --git a/js/js.libraries/src/stdlib/domCode.kt b/js/js.libraries/src/stdlib/domCode.kt index 579a4c9ad0d..78f566910ce 100644 --- a/js/js.libraries/src/stdlib/domCode.kt +++ b/js/js.libraries/src/stdlib/domCode.kt @@ -7,7 +7,7 @@ import org.w3c.dom.Node public fun createDocument(): Document = Document() @Deprecated("use member property outerHTML of Element class instead") -public external val Node.outerHTML: String get() = noImpl +public inline val Node.outerHTML: String get() = asDynamic().outerHTML /** Converts the node to an XML String */ @Deprecated("use outerHTML directly") diff --git a/libraries/tools/kotlin-stdlib-gen/src/templates/SpecialJS.kt b/libraries/tools/kotlin-stdlib-gen/src/templates/SpecialJS.kt index ff6e6e56dcc..e7b4bb90375 100644 --- a/libraries/tools/kotlin-stdlib-gen/src/templates/SpecialJS.kt +++ b/libraries/tools/kotlin-stdlib-gen/src/templates/SpecialJS.kt @@ -252,13 +252,13 @@ fun specialJS(): List { } - templates add f("sort(comparison: (T, T) -> Int)") { + templates add f("sort(noinline comparison: (T, T) -> Int)") { only(ArraysOfObjects, ArraysOfPrimitives) exclude(PrimitiveType.Boolean) - external(true) + inline(true) returns("Unit") doc { "Sorts the array in-place according to the order specified by the given [comparison] function." } - body { "noImpl" } + body { "asDynamic().sort(comparison)" } } templates add f("sortWith(comparator: Comparator)") {