blob: eaa2a1dcd07585beeab0171ef54683f3c759579f [file]
/*
* Copyright 2010-2026 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("PackageDirectoryMismatch", "NOTHING_TO_INLINE")
@file:OptIn(JsIntrinsic::class)
package kotlin.js.internal
/**
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt
*/
internal external class BigInt {
companion object {
/**
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt/asIntN
*/
fun asIntN(@Suppress("unused") bits: Int, @Suppress("unused") bigint: BigInt): BigInt
/**
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt/asUintN
*/
fun asUintN(@Suppress("unused") bits: Int, @Suppress("unused") bigint: BigInt): BigInt
}
/**
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt/toString
*/
fun toString(@Suppress("unused") radix: Int = definedExternally): String
}
/**
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt/BigInt
*/
internal external fun BigInt(value: Number): BigInt
internal external fun Number(value: dynamic): Number
internal inline fun BigInt.toNumber(): Number = Number(this)
internal inline operator fun BigInt.unaryMinus(): BigInt = jsUnaryMinus(this).unsafeCast<BigInt>()
internal inline operator fun BigInt.plus(other: BigInt): BigInt = jsPlus(this, other).unsafeCast<BigInt>()
internal inline operator fun BigInt.minus(other: BigInt): BigInt = jsMinus(this, other).unsafeCast<BigInt>()
internal inline operator fun BigInt.times(other: BigInt): BigInt = jsMult(this, other).unsafeCast<BigInt>()
internal inline operator fun BigInt.div(other: BigInt): BigInt = jsDiv(this, other).unsafeCast<BigInt>()
internal inline operator fun BigInt.rem(other: BigInt): BigInt = jsMod(this, other).unsafeCast<BigInt>()
internal inline infix fun BigInt.and(other: BigInt): BigInt = jsBitwiseAnd(this, other).unsafeCast<BigInt>()
internal inline infix fun BigInt.shl(other: BigInt): BigInt = jsBitShiftL(this, other).unsafeCast<BigInt>()
internal inline infix fun BigInt.shr(other: BigInt): BigInt = jsBitShiftR(this, other).unsafeCast<BigInt>()
internal inline val BigInt.isNegative: Boolean
get() = jsLt(this, 0)
internal inline val BigInt.isZero: Boolean
get() = jsEqeq(this, 0)
internal fun BigInt.abs(): BigInt = if (isNegative) -this else this