mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-31 18:32:11 +00:00
* array litterals uses typed arrays * Update compiler/jsgen.nim Co-authored-by: Timothee Cour <timothee.cour2@gmail.com> Co-authored-by: Andreas Rumpf <rumpf_a@web.de>
58 lines
1.5 KiB
Nim
58 lines
1.5 KiB
Nim
import std/private/jsutils
|
|
|
|
|
|
type JsBigIntImpl {.importc: "bigint".} = int
|
|
type JsBigInt = distinct JsBigIntImpl
|
|
|
|
doAssert JsBigInt isnot int
|
|
func big*(integer: SomeInteger): JsBigInt {.importjs: "BigInt(#)".}
|
|
func big*(integer: cstring): JsBigInt {.importjs: "BigInt(#)".}
|
|
func `<=`*(x, y: JsBigInt): bool {.importjs: "(# $1 #)".}
|
|
func `==`*(x, y: JsBigInt): bool {.importjs: "(# === #)".}
|
|
func inc*(x: var JsBigInt) {.importjs: "[#][0][0]++".}
|
|
func inc2*(x: var JsBigInt) {.importjs: "#++".}
|
|
func toCstring*(this: JsBigInt): cstring {.importjs: "#.toString()".}
|
|
func `$`*(this: JsBigInt): string =
|
|
$toCstring(this)
|
|
|
|
block:
|
|
doAssert defined(nimHasJsBigIntBackend)
|
|
let z1 = big"10"
|
|
let z2 = big"15"
|
|
doAssert z1 == big"10"
|
|
doAssert z1 == z1
|
|
doAssert z1 != z2
|
|
var s: seq[cstring]
|
|
for i in z1 .. z2:
|
|
s.add $i
|
|
doAssert s == @["10".cstring, "11", "12", "13", "14", "15"]
|
|
block:
|
|
var a=big"3"
|
|
a.inc
|
|
doAssert a == big"4"
|
|
block:
|
|
var z: JsBigInt
|
|
doAssert $z == "0"
|
|
doAssert z.jsTypeOf == "bigint" # would fail without codegen change
|
|
doAssert z != big(1)
|
|
doAssert z == big"0" # ditto
|
|
|
|
# ditto below
|
|
block:
|
|
let z: JsBigInt = big"1"
|
|
doAssert $z == "1"
|
|
doAssert z.jsTypeOf == "bigint"
|
|
doAssert z == big"1"
|
|
|
|
block:
|
|
let z = JsBigInt.default
|
|
doAssert $z == "0"
|
|
doAssert z.jsTypeOf == "bigint"
|
|
doAssert z == big"0"
|
|
|
|
block:
|
|
var a: seq[JsBigInt]
|
|
a.setLen 3
|
|
doAssert a[^1].jsTypeOf == "bigint"
|
|
doAssert a[^1] == big"0"
|