@@ -6,39 +6,89 @@ type t = bigint
66@val external asIntN : (~width : int , bigint ) => bigint = "BigInt.asIntN"
77@val external asUintN : (~width : int , bigint ) => bigint = "BigInt.asUintN"
88
9- @val external fromString : string => bigint = "BigInt"
10-
119@val
1210/**
1311Parses the given `string` into a `bigint` using JavaScript semantics. Return the
14- number as a `bigint` if successfully parsed. Uncaught syntax exception otherwise.
12+ number as a `bigint` if successfully parsed. Throws a syntax exception otherwise.
1513
1614## Examples
1715
1816```rescript
19- BigInt.fromStringExn ("123")->assertEqual(123n)
17+ BigInt.fromStringOrThrow ("123")->assertEqual(123n)
2018
21- BigInt.fromStringExn ("")->assertEqual(0n)
19+ BigInt.fromStringOrThrow ("")->assertEqual(0n)
2220
23- BigInt.fromStringExn ("0x11")->assertEqual(17n)
21+ BigInt.fromStringOrThrow ("0x11")->assertEqual(17n)
2422
25- BigInt.fromStringExn ("0b11")->assertEqual(3n)
23+ BigInt.fromStringOrThrow ("0b11")->assertEqual(3n)
2624
27- BigInt.fromStringExn ("0o11")->assertEqual(9n)
25+ BigInt.fromStringOrThrow ("0o11")->assertEqual(9n)
2826
2927/* catch exception */
30- switch BigInt.fromStringExn ("a") {
28+ switch BigInt.fromStringOrThrow ("a") {
3129| exception JsExn(_error) => assert(true)
3230| _bigInt => assert(false)
3331}
3432```
3533*/
34+ external fromStringOrThrow : string => bigint = "BigInt"
35+
36+ /**
37+ Parses the given `string` into a `bigint` using JavaScript semantics. Returns
38+ `Some(bigint)` if the string can be parsed, `None` otherwise.
39+
40+ ## Examples
41+
42+ ```rescript
43+ BigInt.fromString("123")->assertEqual(Some(123n))
44+
45+ BigInt.fromString("")->assertEqual(Some(0n))
46+
47+ BigInt.fromString("0x11")->assertEqual(Some(17n))
48+
49+ BigInt.fromString("0b11")->assertEqual(Some(3n))
50+
51+ BigInt.fromString("0o11")->assertEqual(Some(9n))
52+
53+ BigInt.fromString("invalid")->assertEqual(None)
54+ ```
55+ */
56+ let fromString = (value : string ) => {
57+ try Some (fromStringOrThrow (value )) catch {
58+ | _ => None
59+ }
60+ }
61+
62+ @deprecated ("Use `fromStringOrThrow` instead" ) @val
3663external fromStringExn : string => bigint = "BigInt"
64+
3765@val external fromInt : int => bigint = "BigInt"
38- @val external fromFloat : float => bigint = "BigInt"
66+
67+ @val
68+ /**
69+ Converts a `float` to a `bigint` using JavaScript semantics.
70+ Throws an exception if the float is not an integer or is infinite/NaN.
71+
72+ ## Examples
73+
74+ ```rescript
75+ BigInt.fromFloatOrThrow(123.0)->assertEqual(123n)
76+
77+ BigInt.fromFloatOrThrow(0.0)->assertEqual(0n)
78+
79+ BigInt.fromFloatOrThrow(-456.0)->assertEqual(-456n)
80+
81+ /* This will throw an exception */
82+ switch BigInt.fromFloatOrThrow(123.5) {
83+ | exception JsExn(_error) => assert(true)
84+ | _bigInt => assert(false)
85+ }
86+ ```
87+ */
88+ external fromFloatOrThrow : float => bigint = "BigInt"
3989
4090let fromFloat = (value : float ) => {
41- try Some (fromFloat (value )) catch {
91+ try Some (fromFloatOrThrow (value )) catch {
4292 | _ => None
4393 }
4494}
0 commit comments