JS IR: declare intrinsics for lowerings in stdlib
- simplifies lowered IR serialization - removes some hacks in jsOperators.kt - intrinsics can be directly invoked in stdlib
This commit is contained in:
committed by
teamcityserver
parent
94384ce2ca
commit
48fe46303d
@@ -0,0 +1,207 @@
|
||||
/*
|
||||
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* 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("NON_MEMBER_FUNCTION_NO_BODY")
|
||||
|
||||
package kotlin.js
|
||||
|
||||
@RequiresOptIn(message = "Here be dragons! This is a compiler intrinsic, proceed with care!")
|
||||
@Retention(AnnotationRetention.BINARY)
|
||||
@Target(AnnotationTarget.FUNCTION)
|
||||
internal annotation class JsIntrinsic
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsEqeq(a: Any?, b: Any?): Boolean
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsNotEq(a: Any?, b: Any?): Boolean
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsEqeqeq(a: Any?, b: Any?): Boolean
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsNotEqeq(a: Any?, b: Any?): Boolean
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsGt(a: Any?, b: Any?): Boolean
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsGtEq(a: Any?, b: Any?): Boolean
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsLt(a: Any?, b: Any?): Boolean
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsLtEq(a: Any?, b: Any?): Boolean
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsNot(a: Any?): Boolean
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsUnaryPlus(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsUnaryMinus(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsPrefixInc(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsPostfixInc(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsPrefixDec(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsPostfixDec(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsPlus(a: Any?, b: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsMinus(a: Any?, b: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsMult(a: Any?, b: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsDiv(a: Any?, b: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsMod(a: Any?, b: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsPlusAssign(a: Any?, b: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsMinusAssign(a: Any?, b: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsMultAssign(a: Any?, b: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsDivAssign(a: Any?, b: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsModAssign(a: Any?, b: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsAnd(a: Any?, b: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsOr(a: Any?, b: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsBitAnd(a: Any?, b: Any?): Int
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsBitOr(a: Any?, b: Any?): Int
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsBitXor(a: Any?, b: Any?): Int
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsBitNot(a: Any?): Int
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsBitShiftR(a: Any?, b: Any?): Int
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsBitShiftRU(a: Any?, b: Any?): Int
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsBitShiftL(a: Any?, b: Any?): Int
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsInstanceOfIntrinsic(a: Any?, b: Any?): Boolean
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsNewTarget(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun emptyObject(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun openInitializerBox(a: Any?, b: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsArrayLength(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsArrayGet(a: Any?, b: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsArraySet(a: Any?, b: Any?, c: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun arrayLiteral(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun int8Array(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun int16Array(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun int32Array(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun float32Array(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun float64Array(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun int8ArrayOf(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun int16ArrayOf(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun int32ArrayOf(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun float32ArrayOf(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun float64ArrayOf(a: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun <T> objectCreate(): T
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun <T> sharedBoxCreate(v: T?): dynamic
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun <T> sharedBoxRead(box: dynamic): T?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun <T> sharedBoxWrite(box: dynamic, nv: T?)
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsUndefined(): Nothing?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun <T> DefaultType(): T
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsBind(receiver: Any?, target: Any?): Any?
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun <A> slice(a: A): A
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun unreachable(): Nothing
|
||||
|
||||
@JsIntrinsic
|
||||
@Suppress("REIFIED_TYPE_PARAMETER_NO_INLINE") // TODO: mark `inline` and skip in inliner
|
||||
internal fun <reified T : Any> jsClassIntrinsic(): JsClass<T>
|
||||
|
||||
// Returns true if the specified property is in the specified object or its prototype chain.
|
||||
@JsIntrinsic
|
||||
internal fun jsInIntrinsic(lhs: Any?, rhs: Any): Boolean
|
||||
|
||||
@JsIntrinsic
|
||||
internal fun jsDelete(e: Any?)
|
||||
Reference in New Issue
Block a user