[Wasm] Deprecate Dynamic in favour of JsAny

Remove extension methods created to compile
Kotlin/JS-like WebIDL bindings

^KT-57060 Fixed
This commit is contained in:
Svyatoslav Kuzmich
2023-03-20 17:53:58 +01:00
committed by Space Team
parent 0e54ec5ef6
commit c466f926b0
+6 -203
View File
@@ -7,214 +7,17 @@
package kotlin.js
@PublishedApi
internal fun dynamicSetBoolean(obj: Dynamic, index: String, value: Boolean): Unit =
js("obj[index] = value")
@PublishedApi
internal fun dynamicSetByte(obj: Dynamic, index: String, value: Byte): Unit =
js("obj[index] = value")
@PublishedApi
internal fun dynamicSetShort(obj: Dynamic, index: String, value: Short): Unit =
js("obj[index] = value")
@PublishedApi
internal fun dynamicSetChar(obj: Dynamic, index: String, value: Char): Unit =
js("obj[index] = value")
@PublishedApi
internal fun dynamicSetInt(obj: Dynamic, index: String, value: Int): Unit =
js("obj[index] = value")
@PublishedApi
internal fun dynamicSetLong(obj: Dynamic, index: String, value: Long): Unit =
js("obj[index] = value")
@PublishedApi
internal fun dynamicSetFloat(obj: Dynamic, index: String, value: Float): Unit =
js("obj[index] = value")
@PublishedApi
internal fun dynamicSetDouble(obj: Dynamic, index: String, value: Double): Unit =
js("obj[index] = value")
@PublishedApi
internal fun dynamicSetString(obj: Dynamic, index: String, value: String?): Unit =
js("obj[index] = value")
@PublishedApi
internal fun dynamicSetAny(obj: Dynamic, index: String, value: Any?): Unit =
js("obj[index] = value")
@PublishedApi
internal fun dynamicGetBoolean(obj: Dynamic, index: String): Boolean =
js("obj[index]")
@PublishedApi
internal fun dynamicGetByte(obj: Dynamic, index: String): Byte =
js("obj[index]")
@PublishedApi
internal fun dynamicGetShort(obj: Dynamic, index: String): Short =
js("obj[index]")
@PublishedApi
internal fun dynamicGetChar(obj: Dynamic, index: String): Char =
js("obj[index]")
@PublishedApi
internal fun dynamicGetInt(obj: Dynamic, index: String): Int =
js("obj[index]")
@PublishedApi
internal fun dynamicGetLong(obj: Dynamic, index: String): Long =
js("obj[index]")
@PublishedApi
internal fun dynamicGetFloat(obj: Dynamic, index: String): Float =
js("obj[index]")
@PublishedApi
internal fun dynamicGetDouble(obj: Dynamic, index: String): Double =
js("obj[index]")
@PublishedApi
internal fun dynamicGetString(obj: Dynamic, index: String): String? =
js("obj[index]")
@PublishedApi
internal fun dynamicGetAny(obj: Dynamic, index: String): Any? =
js("obj[index]")
@PublishedApi
internal fun Dynamic.getBoolean(index: String): Boolean = dynamicGetBoolean(this, index)
@PublishedApi
internal fun Dynamic.getByte(index: String): Byte = dynamicGetByte(this, index)
@PublishedApi
internal fun Dynamic.getShort(index: String): Short = dynamicGetShort(this, index)
@PublishedApi
internal fun Dynamic.getChar(index: String): Char = dynamicGetChar(this, index)
@PublishedApi
internal fun Dynamic.getInt(index: String): Int = dynamicGetInt(this, index)
@PublishedApi
internal fun Dynamic.getLong(index: String): Long = dynamicGetLong(this, index)
@PublishedApi
internal fun Dynamic.getFloat(index: String): Float = dynamicGetFloat(this, index)
@PublishedApi
internal fun Dynamic.getDouble(index: String): Double = dynamicGetDouble(this, index)
@PublishedApi
internal fun Dynamic.getString(index: String): String? = dynamicGetString(this, index)
@Suppress("UNCHECKED_CAST")
@PublishedApi
internal fun <T> Dynamic.getAny(index: String): T? = dynamicGetAny(this, index) as T?
@PublishedApi
internal fun Dynamic.getBoolean(index: Int): Boolean = dynamicGetBoolean(this, index.toString())
@PublishedApi
internal fun Dynamic.getByte(index: Int): Byte = dynamicGetByte(this, index.toString())
@PublishedApi
internal fun Dynamic.getShort(index: Int): Short = dynamicGetShort(this, index.toString())
@PublishedApi
internal fun Dynamic.getChar(index: Int): Char = dynamicGetChar(this, index.toString())
@PublishedApi
internal fun Dynamic.getInt(index: Int): Int = dynamicGetInt(this, index.toString())
@PublishedApi
internal fun Dynamic.getLong(index: Int): Long = dynamicGetLong(this, index.toString())
@PublishedApi
internal fun Dynamic.getFloat(index: Int): Float = dynamicGetFloat(this, index.toString())
@PublishedApi
internal fun Dynamic.getDouble(index: Int): Double = dynamicGetDouble(this, index.toString())
@PublishedApi
internal fun Dynamic.getString(index: Int): String? = dynamicGetString(this, index.toString())
@Suppress("UNCHECKED_CAST")
@PublishedApi
internal fun <T> Dynamic.getAny(index: Int): T? = dynamicGetAny(this, index.toString()) as T?
/**
* Represents unversal type for JS interoperability.
* Represents universal type for JS interoperability.
*/
external interface Dynamic : JsAny
@Deprecated("Use JsAny instead", level = DeprecationLevel.ERROR, replaceWith = ReplaceWith("JsAny"))
public external interface Dynamic : JsAny
/**
* Reinterprets this value as a value of the Dynamic type.
*/
@Suppress("UNCHECKED_CAST_TO_EXTERNAL_INTERFACE")
@kotlin.internal.InlineOnly
fun Any.asDynamic(): Dynamic = this as Dynamic
/**
* Reinterprets this value as a value of the Dynamic type.
*/
@kotlin.internal.InlineOnly
fun String.asDynamic(): Dynamic = this.unsafeCast<Dynamic>()
operator fun Dynamic.set(index: String, value: Any?) {
when (value) {
is Boolean -> dynamicSetBoolean(this, index, value)
is Byte -> dynamicSetByte(this, index, value)
is Short -> dynamicSetShort(this, index, value)
is Char -> dynamicSetChar(this, index, value)
is Int -> dynamicSetInt(this, index, value)
is Long -> dynamicSetLong(this, index, value)
is Float -> dynamicSetFloat(this, index, value)
is Double -> dynamicSetDouble(this, index, value)
is String -> dynamicSetString(this, index, value)
else -> dynamicSetAny(this, index, value)
}
}
operator fun Dynamic.set(index: Int, value: Any?) {
this[index.toString()] = value
}
private fun <T> unsafeCastJs(x: String): Dynamic = js("x")
@Suppress("UNCHECKED_CAST")
fun <T> String.unsafeCast(): T = unsafeCastJs<T>(this) as T
private fun <T> unsafeCastJs(x: Boolean): Dynamic = js("x")
/**
* Reinterprets boolean value as a value of the specified type [T] without any actual type checking.
*/
@Suppress("UNCHECKED_CAST")
fun <T> Boolean.unsafeCast(): T = unsafeCastJs<T>(this) as T
/**
* Reinterprets Nothing? type value as Dynamic? null.
*/
fun <T> Nothing?.unsafeCast(): Dynamic? = null
/**
* Reinterprets Dynamic type value as a value of the specified type [T] without any actual type checking.
*/
@Suppress("UNCHECKED_CAST")
fun <T> Dynamic.unsafeCast(): T = this as T
private fun jsThrow(e: Dynamic) {
private fun jsThrow(e: JsAny) {
js("throw e;")
}
private fun jsCatch(f: () -> Unit): Dynamic? {
private fun jsCatch(f: () -> Unit): JsAny? {
js("""
let result = null;
try {
@@ -230,7 +33,7 @@ private fun jsCatch(f: () -> Unit): Dynamic? {
* For a Dynamic value caught in JS, returns the corresponding [Throwable]
* if it was thrown from Kotlin, or null otherwise.
*/
public fun Dynamic.toThrowableOrNull(): Throwable? {
public fun JsAny.toThrowableOrNull(): Throwable? {
val thisAny: Any = this
if (thisAny is Throwable) return thisAny
var result: Throwable? = null