Skip to content

Commit 72babc2

Browse files
Update to native built-in methods
1 parent 4e65e98 commit 72babc2

File tree

1 file changed

+73
-17
lines changed

1 file changed

+73
-17
lines changed

src/Core__BigInt.res

+73-17
Original file line numberDiff line numberDiff line change
@@ -2,38 +2,94 @@
22
@val external asUintN: (~width: int, bigint) => bigint = "BigInt.asUintN"
33

44
@val external fromString: string => bigint = "BigInt"
5+
6+
@val
7+
/**
8+
Parses the given `string` into a `bigint` using JavaScript semantics. Return the
9+
number as a `bigint` if successfully parsed. Uncaught syntax exception otherwise.
10+
11+
## Examples
12+
13+
```rescript
14+
/* returns 123n */
15+
BigInt.fromStringExn("123")
16+
17+
/* returns 0n */
18+
BigInt.fromStringExn("")
19+
20+
/* returns 17n */
21+
BigInt.fromStringExn("0x11")
22+
23+
/* returns 3n */
24+
BigInt.fromStringExn("0b11")
25+
26+
/* returns 9n */
27+
BigInt.fromStringExn("0o11")
28+
29+
/* catch exception */
30+
try {
31+
BigInt.fromStringExn("a")
32+
} catch {
33+
| _ => ...
34+
}
35+
```
36+
*/
37+
external fromStringExn: string => bigint = "BigInt"
538
@val external fromInt: int => bigint = "BigInt"
639
@val external fromFloat: float => bigint = "BigInt"
740

8-
@send external toString: bigint => string = "toString"
41+
@send
42+
/**
43+
Formats a `bigint` as a string. Return a `string` representing the given value.
44+
See [`toString`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toString) on MDN.
45+
46+
## Examples
47+
48+
```rescript
49+
/* prints "123" */
50+
Js.BigInt.toString(123n)->Js.log
51+
```
52+
*/
53+
external toString: bigint => string = "toString"
954
@send external toStringWithRadix: (bigint, ~radix: int) => string = "toString"
10-
@send external toLocaleString: bigint => string = "toLocaleString"
55+
56+
@send
57+
/**
58+
Returns a string with a language-sensitive representation of this BigInt value.
59+
60+
## Examples
61+
62+
```rescript
63+
/* prints "123" */
64+
Js.BigInt.toString(123n)->Js.log
65+
```
66+
*/
67+
external toLocaleString: bigint => string = "toLocaleString"
1168

1269
@val external toFloat: bigint => float = "Number"
1370

1471
let toInt = t => t->toFloat->Core__Int.fromFloat
1572

16-
external \"+": (bigint, bigint) => bigint = "%addfloat"
17-
external \"-": (bigint, bigint) => bigint = "%subfloat"
18-
external \"*": (bigint, bigint) => bigint = "%mulfloat"
19-
external \"/": (bigint, bigint) => bigint = "%divfloat"
73+
external \"+": (bigint, bigint) => bigint = "%addbigint"
74+
external \"-": (bigint, bigint) => bigint = "%subbigint"
75+
external \"*": (bigint, bigint) => bigint = "%mulbigint"
76+
external \"/": (bigint, bigint) => bigint = "%divbigint"
77+
external \"~-": bigint => bigint = "%negbigint"
78+
external \"~+": bigint => bigint = "%identity"
79+
external \"**": (bigint, bigint) => bigint = "%powbigint"
2080

2181
external add: (bigint, bigint) => bigint = "%addfloat"
2282
external sub: (bigint, bigint) => bigint = "%subfloat"
2383
external mul: (bigint, bigint) => bigint = "%mulfloat"
2484
external div: (bigint, bigint) => bigint = "%divfloat"
2585

26-
@noalloc external mod: (bigint, bigint) => bigint = "?fmod_float"
86+
external mod: (bigint, bigint) => bigint = "%modbigint"
2787

28-
external land: (bigint, bigint) => bigint = "%andint"
29-
external lor: (bigint, bigint) => bigint = "%orint"
30-
external lxor: (bigint, bigint) => bigint = "%xorint"
88+
external land: (bigint, bigint) => bigint = "%andbigint"
89+
external lor: (bigint, bigint) => bigint = "%orbigint"
90+
external lxor: (bigint, bigint) => bigint = "%xorbigint"
3191

32-
external lsl: (bigint, bigint) => bigint = "%lslint"
33-
external asr: (bigint, bigint) => bigint = "%asrint"
92+
external lsl: (bigint, bigint) => bigint = "%lslbigint"
93+
external asr: (bigint, bigint) => bigint = "%asrbigint"
3494

35-
let exp = (x: bigint, y: bigint) => {
36-
let _ = x
37-
let _ = y
38-
%raw(`x ** y`)
39-
}
95+
let lnot = x => lxor(x, -1n)

0 commit comments

Comments
 (0)