Skip to content

Commit a5ca1d5

Browse files
Remove Belt & Pervasives deps (#226)
* Inline Belt.Array deps of Core__List * Get rid of Pervasives deps in Core__Int * Get rid of Js dep in Core__Array * Changelog
1 parent e9a3cce commit a5ca1d5

7 files changed

+67
-13
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
## Next version
44

5+
- Remove some deps to Belt, Pervasives and Js. https://github.com/rescript-association/rescript-core/pull/226/commits
6+
57
## 1.3.0
68

79
This version requires ReScript `>=11.1.0-rc.6`.

src/Core__Array.mjs

+5-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
// Generated by ReScript, PLEASE EDIT WITH CARE
22

3-
import * as Js_math from "rescript/lib/es6/js_math.js";
43
import * as Caml_option from "rescript/lib/es6/caml_option.js";
54

65
function make(length, x) {
@@ -113,10 +112,14 @@ function swapUnsafe(xs, i, j) {
113112
xs[j] = tmp;
114113
}
115114

115+
function random_int(min, max) {
116+
return (Math.floor(Math.random() * (max - min | 0)) | 0) + min | 0;
117+
}
118+
116119
function shuffle(xs) {
117120
var len = xs.length;
118121
for(var i = 0; i < len; ++i){
119-
swapUnsafe(xs, i, Js_math.random_int(i, len));
122+
swapUnsafe(xs, i, random_int(i, len));
120123
}
121124
}
122125

src/Core__Array.res

+11-1
Original file line numberDiff line numberDiff line change
@@ -203,10 +203,20 @@ let swapUnsafe = (xs, i, j) => {
203203
setUnsafe(xs, j, tmp)
204204
}
205205

206+
module M = {
207+
@val external floor: float => float = "Math.floor"
208+
@val external random: unit => float = "Math.random"
209+
external fromFloat: float => int = "%intoffloat"
210+
external toFloat: int => float = "%identity"
211+
212+
let random_int: (int, int) => int = (min, max) =>
213+
floor(random() *. toFloat(max - min))->fromFloat + min
214+
}
215+
206216
let shuffle = xs => {
207217
let len = length(xs)
208218
for i in 0 to len - 1 {
209-
swapUnsafe(xs, i, Js.Math.random_int(i, len)) /* [i,len) */
219+
swapUnsafe(xs, i, M.random_int(i, len)) /* [i,len) */
210220
}
211221
}
212222

src/Core__Int.mjs

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// Generated by ReScript, PLEASE EDIT WITH CARE
22

33
import * as Core__Array from "./Core__Array.mjs";
4-
import * as PervasivesU from "rescript/lib/es6/pervasivesU.js";
54

65
function equal(a, b) {
76
return a === b;
@@ -26,6 +25,14 @@ function fromString(x, radix) {
2625
}
2726
}
2827

28+
function abs(x) {
29+
if (x >= 0) {
30+
return x;
31+
} else {
32+
return -x | 0;
33+
}
34+
}
35+
2936
function range(start, end, optionsOpt) {
3037
var options = optionsOpt !== undefined ? optionsOpt : ({});
3138
var isInverted = start > end;
@@ -51,7 +58,7 @@ function range(start, end, optionsOpt) {
5158
} else {
5259
var range$1 = isInverted ? start - end | 0 : end - start | 0;
5360
var range$2 = options.inclusive === true ? range$1 + 1 | 0 : range$1;
54-
length = Math.ceil(range$2 / PervasivesU.abs(step)) | 0;
61+
length = Math.ceil(range$2 / abs(step)) | 0;
5562
}
5663
return Core__Array.fromInitializer(length, (function (i) {
5764
return start + Math.imul(i, step) | 0;

src/Core__Int.res

+7
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,13 @@ external mod: (int, int) => int = "%modint"
4848

4949
type rangeOptions = {step?: int, inclusive?: bool}
5050

51+
let abs = x =>
52+
if x >= 0 {
53+
x
54+
} else {
55+
-x
56+
}
57+
5158
let range = (start, end, ~options: rangeOptions={}) => {
5259
let isInverted = start > end
5360

src/Core__List.mjs

+14-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
// Generated by ReScript, PLEASE EDIT WITH CARE
22

3-
import * as Belt_Array from "rescript/lib/es6/belt_Array.js";
43
import * as Caml_option from "rescript/lib/es6/caml_option.js";
54
import * as Core__Array from "./Core__Array.mjs";
65

@@ -794,7 +793,12 @@ function reduceReverse(l, acc, f) {
794793
if (len < 1000) {
795794
return reduceReverseUnsafe(l, acc, f);
796795
} else {
797-
return Belt_Array.reduceReverseU(toArray(l), acc, f);
796+
var a = toArray(l);
797+
var r = acc;
798+
for(var i = a.length - 1 | 0; i >= 0; --i){
799+
r = f(r, a[i]);
800+
}
801+
return r;
798802
}
799803
}
800804

@@ -888,7 +892,14 @@ function reduceReverse2(l1, l2, acc, f) {
888892
if (len < 1000) {
889893
return reduceReverse2Unsafe(l1, l2, acc, f);
890894
} else {
891-
return Belt_Array.reduceReverse2U(toArray(l1), toArray(l2), acc, f);
895+
var a = toArray(l1);
896+
var b = toArray(l2);
897+
var r = acc;
898+
var len$1 = a.length < b.length ? a.length : b.length;
899+
for(var i = len$1 - 1 | 0; i >= 0; --i){
900+
r = f(r, a[i], b[i]);
901+
}
902+
return r;
892903
}
893904
}
894905

src/Core__List.res

+19-5
Original file line numberDiff line numberDiff line change
@@ -63,12 +63,26 @@
6363

6464
type t<'a> = list<'a>
6565

66-
// TODO: This module should be inlined eventually, if we end up removing Belt
67-
// from the compiler.
6866
module A = {
69-
let makeUninitializedUnsafe = Belt_Array.makeUninitializedUnsafe
70-
let reduceReverseU = Belt_Array.reduceReverseU
71-
let reduceReverse2U = Belt_Array.reduceReverse2U
67+
@new external makeUninitializedUnsafe: int => array<'a> = "Array"
68+
external min: ('a, 'a) => 'a = "%bs_min"
69+
70+
let reduceReverseU = (a, x, f) => {
71+
let r = ref(x)
72+
for i in Core__Array.length(a) - 1 downto 0 {
73+
r.contents = f(r.contents, Core__Array.getUnsafe(a, i))
74+
}
75+
r.contents
76+
}
77+
78+
let reduceReverse2U = (a, b, x, f) => {
79+
let r = ref(x)
80+
let len = min(Core__Array.length(a), Core__Array.length(b))
81+
for i in len - 1 downto 0 {
82+
r.contents = f(r.contents, Core__Array.getUnsafe(a, i), Core__Array.getUnsafe(b, i))
83+
}
84+
r.contents
85+
}
7286
}
7387

7488
external mutableCell: ('a, t<'a>) => t<'a> = "#makemutablelist"

0 commit comments

Comments
 (0)