@@ -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/**
1210Parses the given `string` into a `bigint` using JavaScript semantics. Return the
13- number as a `bigint` if successfully parsed. Uncaught syntax exception otherwise.
11+ number as a `bigint` if successfully parsed. Throws a syntax exception otherwise.
1412
1513## Examples
1614
1715```rescript
18- BigInt.fromStringExn ("123")->assertEqual(123n)
16+ BigInt.fromStringOrThrow ("123")->assertEqual(123n)
1917
20- BigInt.fromStringExn ("")->assertEqual(0n)
18+ BigInt.fromStringOrThrow ("")->assertEqual(0n)
2119
22- BigInt.fromStringExn ("0x11")->assertEqual(17n)
20+ BigInt.fromStringOrThrow ("0x11")->assertEqual(17n)
2321
24- BigInt.fromStringExn ("0b11")->assertEqual(3n)
22+ BigInt.fromStringOrThrow ("0b11")->assertEqual(3n)
2523
26- BigInt.fromStringExn ("0o11")->assertEqual(9n)
24+ BigInt.fromStringOrThrow ("0o11")->assertEqual(9n)
2725
2826/* catch exception */
29- switch BigInt.fromStringExn ("a") {
27+ switch BigInt.fromStringOrThrow ("a") {
3028| exception JsExn(_error) => assert(true)
3129| _bigInt => assert(false)
3230}
3331```
3432*/
3533@val
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+ /**
68+ Converts a `float` to a `bigint` using JavaScript semantics.
69+ Throws an exception if the float is not an integer or is infinite/NaN.
70+
71+ ## Examples
72+
73+ ```rescript
74+ BigInt.fromFloatOrThrow(123.0)->assertEqual(123n)
75+
76+ BigInt.fromFloatOrThrow(0.0)->assertEqual(0n)
77+
78+ BigInt.fromFloatOrThrow(-456.0)->assertEqual(-456n)
79+
80+ /* This will throw an exception */
81+ switch BigInt.fromFloatOrThrow(123.5) {
82+ | exception JsExn(_error) => assert(true)
83+ | _bigInt => assert(false)
84+ }
85+ ```
86+ */
87+ @val
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