Skip to content

Commit 9fabf6a

Browse files
committedMar 31, 2020
avoid abstract in belt_Map
1 parent 26d826e commit 9fabf6a

File tree

6 files changed

+100
-82
lines changed

6 files changed

+100
-82
lines changed
 

‎jscomp/others/belt_Map.ml

+55-55
Original file line numberDiff line numberDiff line change
@@ -37,135 +37,135 @@ type ('k,'v,'id) t = {
3737
cmp: ('k,'id) cmp;
3838
data: ('k,'v, 'id) Dict.t
3939
}
40-
[@@bs.deriving abstract]
4140

4241

4342

4443

45-
let fromArray (type k) (type idx) data ~(id : (k,idx) id) =
44+
45+
let fromArray (type k idx) data ~(id : (k,idx) id) =
4646
let module M = (val id) in
4747
let cmp = M.cmp in
48-
t ~cmp ~data:(Dict.fromArray ~cmp data)
48+
{cmp; data = (Dict.fromArray ~cmp data)}
4949

5050
let remove m x =
51-
let cmp, odata = m |. (cmpGet, dataGet) in
51+
let {cmp; data=odata} = m in
5252
let newData = Dict.remove odata x ~cmp in
5353
if newData == odata then m
54-
else t ~cmp ~data:newData
54+
else {cmp; data = newData}
5555

5656
let removeMany m x =
57-
let cmp, odata = m |. (cmpGet, dataGet) in
57+
let {cmp; data=odata} = m in
5858
let newData = Dict.removeMany odata x ~cmp in
59-
t ~cmp ~data:newData
59+
{cmp; data = newData}
6060

6161
let set m key d =
62-
let cmp = cmpGet m in
63-
t ~cmp ~data:(Dict.set ~cmp (dataGet m) key d)
62+
let cmp = m.cmp in
63+
{cmp; data = Dict.set ~cmp m.data key d}
6464

6565
let mergeMany m e =
66-
let cmp = cmpGet m in
67-
t ~cmp ~data:(Dict.mergeMany ~cmp (dataGet m) e)
66+
let cmp = m.cmp in
67+
{cmp; data = Dict.mergeMany ~cmp m.data e}
6868

6969
let updateU m key f =
70-
let cmp = cmpGet m in
71-
t ~cmp ~data:(Dict.updateU ~cmp (dataGet m) key f )
70+
let cmp = m.cmp in
71+
{cmp; data = Dict.updateU ~cmp m.data key f }
7272
let update m key f = updateU m key (fun [@bs] a -> f a )
7373
let split m x =
74-
let cmp = cmpGet m in
75-
let (l,r),b = Dict.split ~cmp (dataGet m) x in
76-
(t ~cmp ~data:l, t ~cmp ~data:r), b
74+
let cmp = m.cmp in
75+
let (l,r),b = Dict.split ~cmp m.data x in
76+
({cmp; data=l}, {cmp; data=r}), b
7777

7878
let mergeU s1 s2 f =
79-
let cmp = cmpGet s1 in
80-
t ~cmp ~data:(Dict.mergeU ~cmp (dataGet s1) (dataGet s2) f)
79+
let cmp = s1.cmp in
80+
{cmp; data=(Dict.mergeU ~cmp (s1.data) (s2.data) f)}
8181

8282
let merge s1 s2 f =
8383
mergeU s1 s2 (fun [@bs] a b c -> f a b c)
8484

8585
let make (type key) (type idx) ~(id: (key, idx) id) =
8686
let module M = (val id) in
87-
t ~cmp:M.cmp ~data:Dict.empty
87+
{cmp = M.cmp; data = Dict.empty}
8888

8989
let isEmpty map =
90-
Dict.isEmpty (dataGet map)
90+
Dict.isEmpty map.data
9191

92-
let findFirstByU m f = Dict.findFirstByU (dataGet m) f
92+
let findFirstByU m f = Dict.findFirstByU m.data f
9393
let findFirstBy m f = findFirstByU m (fun [@bs] a b -> f a b)
94-
let forEachU m f = Dict.forEachU (dataGet m) f
94+
let forEachU m f = Dict.forEachU m.data f
9595
let forEach m f = forEachU m (fun [@bs] a b -> f a b)
96-
let reduceU m acc f = Dict.reduceU (dataGet m) acc f
96+
let reduceU m acc f = Dict.reduceU m.data acc f
9797
let reduce m acc f = reduceU m acc (fun[@bs] a b c -> f a b c )
98-
let everyU m f = Dict.everyU (dataGet m) f
98+
let everyU m f = Dict.everyU m.data f
9999
let every m f = everyU m (fun [@bs] a b -> f a b)
100-
let someU m f = Dict.someU (dataGet m) f
100+
let someU m f = Dict.someU m.data f
101101
let some m f = someU m (fun[@bs] a b -> f a b)
102102
let keepU m f =
103-
t ~cmp:(cmpGet m) ~data:(Dict.keepU (dataGet m) f)
103+
{cmp = m.cmp; data = (Dict.keepU m.data f)}
104104
let keep m f = keepU m (fun [@bs] a b -> f a b)
105105

106106
let partitionU m p =
107-
let cmp = cmpGet m in
108-
let l,r = m |. dataGet |. Dict.partitionU p in
109-
t ~cmp ~data:l, t ~cmp ~data:r
107+
let cmp = m.cmp in
108+
let l,r = m . data |. Dict.partitionU p in
109+
{cmp; data=l}, {cmp; data=r}
110110
let partition m p = partitionU m (fun [@bs] a b -> p a b)
111111

112112
let mapU m f =
113-
t ~cmp:(cmpGet m) ~data:(Dict.mapU (dataGet m) f)
113+
{cmp = m.cmp; data = Dict.mapU m.data f}
114114
let map m f = mapU m (fun [@bs] a -> f a)
115115
let mapWithKeyU m f =
116-
t ~cmp:(cmpGet m) ~data:(Dict.mapWithKeyU (dataGet m) f)
116+
{cmp = (m.cmp); data = (Dict.mapWithKeyU m.data f)}
117117
let mapWithKey m f = mapWithKeyU m (fun [@bs] a b -> f a b)
118-
let size map = Dict.size (dataGet map)
119-
let toList map = Dict.toList (dataGet map)
120-
let toArray m = Dict.toArray (dataGet m)
121-
let keysToArray m = Dict.keysToArray (dataGet m)
122-
let valuesToArray m = Dict.valuesToArray (dataGet m)
123-
let minKey m = Dict.minKey (dataGet m)
124-
let minKeyUndefined m = Dict.minKeyUndefined (dataGet m)
125-
let maxKey m = Dict.maxKey (dataGet m)
126-
let maxKeyUndefined m = Dict.maxKeyUndefined (dataGet m)
127-
let minimum m = Dict.minimum (dataGet m)
128-
let minUndefined m = Dict.minUndefined (dataGet m)
129-
let maximum m = Dict.maximum (dataGet m)
130-
let maxUndefined m = Dict.maxUndefined (dataGet m)
118+
let size map = Dict.size map.data
119+
let toList map = Dict.toList map.data
120+
let toArray m = Dict.toArray m.data
121+
let keysToArray m = Dict.keysToArray m.data
122+
let valuesToArray m = Dict.valuesToArray m.data
123+
let minKey m = Dict.minKey m.data
124+
let minKeyUndefined m = Dict.minKeyUndefined m.data
125+
let maxKey m = Dict.maxKey m.data
126+
let maxKeyUndefined m = Dict.maxKeyUndefined m.data
127+
let minimum m = Dict.minimum m.data
128+
let minUndefined m = Dict.minUndefined m.data
129+
let maximum m = Dict.maximum m.data
130+
let maxUndefined m = Dict.maxUndefined m.data
131131

132132
let get map x =
133-
Dict.get ~cmp:(cmpGet map) (dataGet map) x
133+
Dict.get ~cmp:map.cmp map.data x
134134

135135
let getUndefined map x =
136-
Dict.getUndefined ~cmp:(cmpGet map) (dataGet map) x
136+
Dict.getUndefined ~cmp:map.cmp map.data x
137137

138138
let getWithDefault map x def =
139-
Dict.getWithDefault ~cmp:(cmpGet map) (dataGet map) x def
139+
Dict.getWithDefault ~cmp:map.cmp map.data x def
140140

141141
let getExn map x =
142-
Dict.getExn ~cmp:(cmpGet map) (dataGet map) x
142+
Dict.getExn ~cmp:map.cmp map.data x
143143

144144
let has map x =
145-
Dict.has ~cmp:(cmpGet map) (dataGet map) x
145+
Dict.has ~cmp:map.cmp map.data x
146146

147147
let checkInvariantInternal m =
148-
Dict.checkInvariantInternal (dataGet m)
148+
Dict.checkInvariantInternal m.data
149149

150150
let eqU m1 m2 veq =
151-
Dict.eqU ~kcmp:(cmpGet m1) ~veq (dataGet m1) (dataGet m2)
151+
Dict.eqU ~kcmp:m1.cmp ~veq m1.data m2.data
152152
let eq m1 m2 veq = eqU m1 m2 (fun[@bs] a b -> veq a b)
153153

154154
let cmpU m1 m2 vcmp =
155-
Dict.cmpU ~kcmp:(cmpGet m1) ~vcmp (dataGet m1) (dataGet m2)
155+
Dict.cmpU ~kcmp:m1.cmp ~vcmp m1.data m2.data
156156
let cmp m1 m2 vcmp = cmpU m1 m2 (fun [@bs] a b -> vcmp a b)
157157

158-
let getData = dataGet
158+
let getData m = m.data
159159

160160
let getId (type key) (type identity) (m : (key,_,identity) t) : (key, identity) id =
161161
let module T = struct
162162
type nonrec identity = identity
163163
type nonrec t = key
164-
let cmp = cmpGet m
164+
let cmp = m.cmp
165165
end in
166166
(module T )
167167

168168
let packIdData (type key) (type idx) ~(id : (key, idx) id) ~data =
169169
let module M = (val id) in
170-
t ~cmp:M.cmp ~data
170+
{cmp = M.cmp ; data}
171171

‎jscomp/test/bs_hashtbl_string_test.js

+3-5
Original file line numberDiff line numberDiff line change
@@ -102,12 +102,10 @@ function bench2(m) {
102102
}
103103

104104
function bench3(m) {
105-
var empty = {
106-
cmp: m.cmp,
107-
data: null
108-
};
105+
var empty_cmp = m.cmp;
106+
var empty_data = null;
109107
var cmp = m.cmp;
110-
var table = empty.data;
108+
var table = empty_data;
111109
for(var i = 0; i <= 1000000; ++i){
112110
table = Belt_MapDict.set(table, String(i), i, cmp);
113111
}

‎jscomp/test/bs_map_set_dict_test.js

+22-8
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,13 @@ var Icmp2 = Belt_Id.comparable(Caml_primitive.caml_int_compare);
3232

3333
var Ic3 = Belt_Id.comparable(Caml_primitive.caml_int_compare);
3434

35+
var m0_cmp = Icmp.cmp;
36+
37+
var m0_data = null;
38+
3539
var m0 = {
36-
cmp: Icmp.cmp,
37-
data: null
40+
cmp: m0_cmp,
41+
data: m0_data
3842
};
3943

4044
var m00_cmp = Ic3.cmp;
@@ -50,17 +54,25 @@ var I2 = Belt_Id.comparable((function (x, y) {
5054
return Caml_primitive.caml_int_compare(y, x);
5155
}));
5256

57+
var m_cmp = Icmp2.cmp;
58+
59+
var m_data = null;
60+
5361
var m = {
54-
cmp: Icmp2.cmp,
55-
data: null
62+
cmp: m_cmp,
63+
data: m_data
5664
};
5765

66+
var m2_cmp = I2.cmp;
67+
68+
var m2_data = null;
69+
5870
var m2 = {
59-
cmp: I2.cmp,
60-
data: null
71+
cmp: m2_cmp,
72+
data: m2_data
6173
};
6274

63-
var data = m.data;
75+
var data = null;
6476

6577
Belt_Map.getId(m2);
6678

@@ -72,8 +84,10 @@ for(var i = 0; i <= 100000; ++i){
7284

7385
var data$1 = data;
7486

87+
var newm_cmp = m_dict.cmp;
88+
7589
var newm = {
76-
cmp: m_dict.cmp,
90+
cmp: newm_cmp,
7791
data: data$1
7892
};
7993

‎jscomp/test/bs_poly_map_test.js

+12-4
Original file line numberDiff line numberDiff line change
@@ -178,9 +178,13 @@ function acc(m, is) {
178178
}));
179179
}
180180

181+
var m_cmp = Icmp.cmp;
182+
183+
var m_data = null;
184+
181185
var m = {
182-
cmp: Icmp.cmp,
183-
data: null
186+
cmp: m_cmp,
187+
data: m_data
184188
};
185189

186190
var m1 = acc(m, Belt_Array.concat(Array_data_util.randomRange(0, 20), Array_data_util.randomRange(10, 30)));
@@ -194,9 +198,13 @@ b("File \"bs_poly_map_test.ml\", line 103, characters 4-11", Belt_Map.eq(m1, Bel
194198
return x === y;
195199
})));
196200

201+
var v0_cmp = Icmp.cmp;
202+
203+
var v0_data = null;
204+
197205
var v0 = {
198-
cmp: Icmp.cmp,
199-
data: null
206+
cmp: v0_cmp,
207+
data: v0_data
200208
};
201209

202210
var v1 = Belt_Map.mergeMany(v0, Belt_Array.map(Array_data_util.randomRange(0, 10000), (function (x) {

‎lib/es6/belt_Map.js

+4-5
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ function fromArray(data, id) {
1212
}
1313

1414
function remove(m, x) {
15-
var cmp = m.cmp;
1615
var odata = m.data;
16+
var cmp = m.cmp;
1717
var newData = Belt_MapDict.remove(odata, x, cmp);
1818
if (newData === odata) {
1919
return m;
@@ -27,8 +27,7 @@ function remove(m, x) {
2727

2828
function removeMany(m, x) {
2929
var cmp = m.cmp;
30-
var odata = m.data;
31-
var newData = Belt_MapDict.removeMany(odata, x, cmp);
30+
var newData = Belt_MapDict.removeMany(m.data, x, cmp);
3231
return {
3332
cmp: cmp,
3433
data: newData
@@ -289,8 +288,8 @@ function cmp(m1, m2, vcmp) {
289288
return cmpU(m1, m2, Curry.__2(vcmp));
290289
}
291290

292-
function getData(prim) {
293-
return prim.data;
291+
function getData(m) {
292+
return m.data;
294293
}
295294

296295
function getId(m) {

‎lib/js/belt_Map.js

+4-5
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ function fromArray(data, id) {
1212
}
1313

1414
function remove(m, x) {
15-
var cmp = m.cmp;
1615
var odata = m.data;
16+
var cmp = m.cmp;
1717
var newData = Belt_MapDict.remove(odata, x, cmp);
1818
if (newData === odata) {
1919
return m;
@@ -27,8 +27,7 @@ function remove(m, x) {
2727

2828
function removeMany(m, x) {
2929
var cmp = m.cmp;
30-
var odata = m.data;
31-
var newData = Belt_MapDict.removeMany(odata, x, cmp);
30+
var newData = Belt_MapDict.removeMany(m.data, x, cmp);
3231
return {
3332
cmp: cmp,
3433
data: newData
@@ -289,8 +288,8 @@ function cmp(m1, m2, vcmp) {
289288
return cmpU(m1, m2, Curry.__2(vcmp));
290289
}
291290

292-
function getData(prim) {
293-
return prim.data;
291+
function getData(m) {
292+
return m.data;
294293
}
295294

296295
function getId(m) {

0 commit comments

Comments
 (0)