[JS] Reduce usage of 'js' function in stdlib
Function 'kotlin.js.js' is to be redesigned in JS IR backend, partially because it is a hard feature to support. Current implementation is unstable and can cause problems around inlining and name generator. Luckily most of its use-cases can be covered by simpler features like dynamic expressions and external declarations. Thus we are reducing it's usage in stdlib to make IR backend more stable in current state. JavaScript features that can't be covered by dynamic expression are implemented in 'jsOperators.kt' file respectively for each backend: - 'internal inline' function which calls 'js' function inside for current pre-IR backend - 'internal' function with '_hack' parameters for JS IR backend which will be later intinsicified in a compiler
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
@file:Suppress("UNUSED_PARAMETER")
|
||||
|
||||
package kotlin.js
|
||||
|
||||
// Parameters are suffixed with `_hack` as a workaround for Namer.
|
||||
// TODO: Implemet as compiler intrinsics
|
||||
|
||||
/**
|
||||
* Function corresponding to JavaScript's `typeof` operator
|
||||
*/
|
||||
public fun jsTypeOf(value_hack: Any?): String =
|
||||
js("typeof value_hack").unsafeCast<String>()
|
||||
|
||||
internal fun jsDeleteProperty(obj_hack: Any, property_hack: Any) {
|
||||
js("delete obj_hack[property_hack]")
|
||||
}
|
||||
|
||||
internal fun jsBitwiseOr(lhs_hack: Any?, rhs_hack: Any?): Int =
|
||||
js("lhs_hack | rhs_hack").unsafeCast<Int>()
|
||||
|
||||
internal fun jsBitwiseAnd(lhs_hack: Any?, rhs_hack: Any?): Int =
|
||||
js("lhs_hack & rhs_hack").unsafeCast<Int>()
|
||||
|
||||
internal fun jsInstanceOf(obj_hack: Any?, jsClass_hack: Any?): Boolean =
|
||||
js("obj_hack instanceof jsClass_hack").unsafeCast<Boolean>()
|
||||
|
||||
// Returns true if the specified property is in the specified object or its prototype chain.
|
||||
internal fun jsIn(lhs_hack: Any?, rhs_hack: Any): Boolean =
|
||||
js("lhs_hack in rhs_hack").unsafeCast<Boolean>()
|
||||
|
||||
Reference in New Issue
Block a user