diff --git a/js/js.libraries/src/core/char.kt b/js/js.libraries/src/core/char.kt index 06ab5da6a19..c55edc29039 100644 --- a/js/js.libraries/src/core/char.kt +++ b/js/js.libraries/src/core/char.kt @@ -19,8 +19,10 @@ 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]") +@kotlin.internal.InlineOnly public inline fun Char.toLowerCase(): Char = asDynamic().toLowerCase() +@kotlin.internal.InlineOnly public inline fun Char.toUpperCase(): Char = asDynamic().toUpperCase() /** diff --git a/js/js.libraries/src/core/concurrent.kt b/js/js.libraries/src/core/concurrent.kt index 24a322f003f..9d9e1592d17 100644 --- a/js/js.libraries/src/core/concurrent.kt +++ b/js/js.libraries/src/core/concurrent.kt @@ -35,4 +35,5 @@ public annotation class Volatile @Retention(AnnotationRetention.SOURCE) public annotation class Synchronized +@kotlin.internal.InlineOnly public inline fun synchronized(lock: Any, crossinline block: () -> R): R = block() diff --git a/js/js.libraries/src/core/core.kt b/js/js.libraries/src/core/core.kt index 8042deab886..9a8c20d2583 100644 --- a/js/js.libraries/src/core/core.kt +++ b/js/js.libraries/src/core/core.kt @@ -20,8 +20,10 @@ public external fun js(code: String): dynamic /** * Function corresponding to JavaScript's `typeof` operator */ +@kotlin.internal.InlineOnly public inline fun jsTypeOf(a: Any?): String = js("typeof a") +@kotlin.internal.InlineOnly internal inline fun deleteProperty(obj: Any, property: Any) { js("delete obj[property]") } \ No newline at end of file diff --git a/js/js.libraries/src/core/dynamic.kt b/js/js.libraries/src/core/dynamic.kt index 9afdd6eafcc..0a79b90beae 100644 --- a/js/js.libraries/src/core/dynamic.kt +++ b/js/js.libraries/src/core/dynamic.kt @@ -16,11 +16,13 @@ package kotlin.js +@kotlin.internal.InlineOnly public inline fun Any?.asDynamic(): dynamic = this /** * Reinterprets this value as a value of the specified type [T] without any actual type checking. */ +@kotlin.internal.InlineOnly public inline fun Any?.unsafeCast(): @kotlin.internal.NoInfer T = this.asDynamic() /** @@ -28,6 +30,7 @@ public inline fun Any?.unsafeCast(): @kotlin.internal.NoInfer T = this.asDyn */ @kotlin.internal.DynamicExtension @JsName("unsafeCastDynamic") +@kotlin.internal.InlineOnly public inline fun dynamic.unsafeCast(): @kotlin.internal.NoInfer T = this /** diff --git a/js/js.libraries/src/core/string.kt b/js/js.libraries/src/core/string.kt index 03279036331..d9519e071c0 100644 --- a/js/js.libraries/src/core/string.kt +++ b/js/js.libraries/src/core/string.kt @@ -2,8 +2,10 @@ package kotlin.text import kotlin.text.js.RegExp +@kotlin.internal.InlineOnly public inline fun String.toUpperCase(): String = asDynamic().toUpperCase() +@kotlin.internal.InlineOnly public inline fun String.toLowerCase(): String = asDynamic().toLowerCase() internal inline fun String.nativeIndexOf(str: String, fromIndex: Int): Int = asDynamic().indexOf(str, fromIndex) @@ -14,17 +16,22 @@ internal inline fun String.nativeStartsWith(s: String, position: Int): Boolean = internal inline fun String.nativeEndsWith(s: String): Boolean = asDynamic().endsWith(s) +@kotlin.internal.InlineOnly public inline fun String.substring(startIndex: Int): String = asDynamic().substring(startIndex) +@kotlin.internal.InlineOnly public inline fun String.substring(startIndex: Int, endIndex: Int): String = asDynamic().substring(startIndex, endIndex) +@kotlin.internal.InlineOnly public inline fun String.concat(str: String): String = asDynamic().concat(str) +@kotlin.internal.InlineOnly public inline fun String.match(regex: String): Array = asDynamic().match(regex) //native public fun String.trim(): String //TODO: String.replace to implement effective trimLeading and trimTrailing +@kotlin.internal.InlineOnly public inline val CharSequence.size: Int get() = asDynamic().length internal inline fun String.nativeReplace(pattern: RegExp, replacement: String): String = asDynamic().replace(pattern, replacement)