Skip to content

Commit 4b0671c

Browse files
committed
it works: fix a bug
1 parent 065544b commit 4b0671c

6 files changed

+258
-288
lines changed

jscomp/syntax/ast_derive_js_mapper.ml

+55-67
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,8 @@ let init () =
104104
let attr =
105105
Ast_polyvar.map_row_fields_into_strings loc row_fields
106106
in
107-
107+
let expConstantArray =
108+
Exp.ident {loc; txt = Longident.Lident constantArray} in
108109
begin match attr with
109110
| NullString result ->
110111
[
@@ -119,31 +120,29 @@ let init () =
119120
]
120121
) result));
121122
(
122-
toJsBody
123-
(Exp.apply
124-
(Exp.ident ({loc;
125-
txt = Longident.parse "Js.MapperRt.search" })
126-
)
127-
[
128-
"", exp_param;
129-
"", Exp.ident {loc; txt = Longident.Lident constantArray}
130-
]
131-
)
132-
);
133-
134-
let string_arg = "str" in
123+
toJsBody
124+
(Exp.apply
125+
(Exp.ident ({loc;
126+
txt = Longident.parse "Js.MapperRt.search" })
127+
)
128+
[
129+
"", exp_param;
130+
"", expConstantArray
131+
]
132+
)
133+
);
135134
Ast_comb.single_non_rec_value
136-
{loc; txt = fromJs}
135+
patFromJs
137136
(Exp.fun_ "" None
138-
(Pat.var {loc; txt = string_arg})
137+
(Pat.var pat_param)
139138
(Exp.constraint_
140139
(
141140
Exp.apply
142141
(Exp.ident {loc; txt = Longident.parse "Js.MapperRt.revSearch"})
143142
[
144143
"", Exp.constant (Const_int (List.length result));
145-
"", Exp.ident {loc; txt = Longident.Lident constantArray};
146-
"", Exp.ident {loc; txt = Longident.Lident string_arg}
144+
"", expConstantArray;
145+
"", exp_param
147146
]
148147
)
149148
(Ast_core_type.lift_option_type core_type)
@@ -157,7 +156,6 @@ let init () =
157156
)
158157

159158
| Ptype_variant ctors ->
160-
let loc = tdcl.ptype_loc in
161159
if Ast_polyvar.is_enum_constructors ctors then
162160
let xs = Ast_polyvar.map_constructor_declarations_into_ints ctors in
163161
match xs with
@@ -167,31 +165,23 @@ let init () =
167165
{loc; txt = constantArray}
168166
(Exp.array (List.map (fun i -> Exp.constant (Const_int i)) xs ))
169167
;
170-
(let variant_arg = "variant" in
171-
Ast_comb.single_non_rec_value
172-
{loc; txt = toJs}
173-
(Exp.fun_ "" None
174-
(Pat.constraint_
175-
(Pat.var {loc; txt = variant_arg } )
176-
core_type
177-
)
178-
(
179-
Exp.apply
180-
(Exp.ident {loc; txt = Longident.parse "Js.MapperRt.toInt"})
181-
182-
[
183-
"", Exp.ident {loc; txt = Lident variant_arg};
184-
"", Exp.ident {loc; txt = Lident constantArray}
185-
]
186-
)
187-
))
168+
(toJsBody
169+
(
170+
Exp.apply
171+
(Exp.ident {loc; txt = Longident.parse "Js.MapperRt.toInt"})
172+
[
173+
"", exp_param;
174+
"", Exp.ident {loc; txt = Lident constantArray}
175+
]
176+
)
177+
)
188178
;
189-
let int_arg = "int" in
179+
190180
Ast_comb.single_non_rec_value
191-
{loc ; txt = fromJs}
181+
patFromJs
192182
(Exp.fun_ "" None
193183
(Pat.constraint_
194-
(Pat.var {loc; txt = int_arg})
184+
(Pat.var pat_param)
195185
(Ast_literal.type_int ())
196186
)
197187
(Exp.constraint_
@@ -200,45 +190,39 @@ let init () =
200190
[
201191
"", Exp.constant(Const_int (List.length ctors));
202192
"", Exp.ident {loc; txt = Lident constantArray};
203-
"", Exp.ident {loc; txt = Lident int_arg}
193+
"", exp_param
204194
]
205195
)
206196
(Ast_core_type.lift_option_type core_type)
207197
)
208198
)
209199
]
210200
| `Offset offset ->
211-
let variant_arg = "variant" in
212-
[(Ast_comb.single_non_rec_value
213-
{loc; txt = toJs}
214-
(Exp.fun_ "" None
215-
(Pat.constraint_
216-
(Pat.var {loc; txt = variant_arg } )
217-
core_type
218-
)
219-
(Exp.apply
220-
(Exp.ident {loc; txt = Ldot (Lident "Pervasives", "+")})
221-
[
222-
"",
223-
(Exp.apply
224-
(Exp.ident {loc; txt = Ldot (Lident "Obj", "magic")})
225-
["",(Exp.ident {loc; txt = Lident variant_arg})]);
226-
"", Exp.constant (Const_int offset)
227-
]
228-
)
229-
)
201+
202+
[(toJsBody
203+
(Exp.apply
204+
(Exp.ident {loc; txt = Ldot (Lident "Pervasives", "+")})
205+
[
206+
"",
207+
(Exp.apply
208+
(Exp.ident {loc; txt = Ldot (Lident "Obj", "magic")})
209+
["",
210+
exp_param]);
211+
"", Exp.constant (Const_int offset)
212+
]
213+
)
230214
);
231-
let int_arg = "int" in
215+
232216
Ast_comb.single_non_rec_value
233217
{loc ; txt = fromJs}
234218
(Exp.fun_ "" None
235219
(Pat.constraint_
236-
(Pat.var {loc; txt = int_arg})
220+
(Pat.var pat_param)
237221
(Ast_literal.type_int ())
238222
)
239223
(Exp.constraint_
240224
(
241-
let v = Exp.ident {loc; txt = Lident int_arg} in
225+
242226
let len = List.length ctors in
243227
let range_low = Exp.constant (Const_int (offset + 0)) in
244228
let range_upper = Exp.constant (Const_int (offset + len - 1)) in
@@ -251,16 +235,20 @@ let init () =
251235
(Exp.ident {loc ; txt = Lident "&&"})
252236
["",
253237
(Exp.apply (Exp.ident {loc; txt = Lident "<="})
254-
["", v; "", range_upper] )
238+
["", exp_param; "", range_upper] )
255239
;
256240
"",
257241
(Exp.apply (Exp.ident {loc; txt = Lident "<="})
258-
["", range_low; "",v]
242+
["", range_low; "",exp_param]
259243
)
260244
]
261245
)
262-
(Exp.construct {loc; txt = Lident "Some"} (Some v ))
263-
246+
(Exp.construct {loc; txt = Lident "Some"}
247+
(Some
248+
(Exp.apply
249+
(Exp.ident {loc; txt = Ldot(Lident "Pervasives","-")})
250+
["",exp_param ; "", Exp.constant (Const_int offset)])
251+
))
264252
(Some (Exp.construct {loc; txt = Lident "None"} None)))
265253
]
266254
)

jscomp/test/ast_js_mapper_poly_test.js

+35-19
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
'use strict';
22

3-
var $$Array = require("../../lib/js/array.js");
4-
var Curry = require("../../lib/js/curry.js");
5-
var Js_mapperRt = require("../../lib/js/js_mapperRt.js");
3+
var $$Array = require("../../lib/js/array.js");
4+
var Curry = require("../../lib/js/curry.js");
5+
var Js_mapperRt = require("../../lib/js/js_mapperRt.js");
6+
var Caml_builtin_exceptions = require("../../lib/js/caml_builtin_exceptions.js");
67

78
var jsMapperConstantArray = /* array */[
89
/* tuple */[
@@ -23,8 +24,8 @@ function uToJs(param) {
2324
return Js_mapperRt.search(param, jsMapperConstantArray);
2425
}
2526

26-
function uFromJs(str) {
27-
return Js_mapperRt.revSearch(3, jsMapperConstantArray, str);
27+
function uFromJs(param) {
28+
return Js_mapperRt.revSearch(3, jsMapperConstantArray, param);
2829
}
2930

3031
function $neg$tilde(f, v) {
@@ -61,12 +62,12 @@ var jsMapperConstantArray$1 = /* int array */[
6162
5
6263
];
6364

64-
function vToJs(variant) {
65-
return jsMapperConstantArray$1[variant];
65+
function vToJs(param) {
66+
return jsMapperConstantArray$1[param];
6667
}
6768

68-
function vFromJs($$int) {
69-
return Js_mapperRt.fromInt(4, jsMapperConstantArray$1, $$int);
69+
function vFromJs(param) {
70+
return Js_mapperRt.fromInt(4, jsMapperConstantArray$1, param);
7071
}
7172

7273
function s(param) {
@@ -101,25 +102,25 @@ console.log($$Array.map((function (x) {
101102
5
102103
]));
103104

104-
function v1ToJs(variant) {
105-
return variant + 0 | 0;
105+
function v1ToJs(param) {
106+
return param + 0 | 0;
106107
}
107108

108-
function v1FromJs($$int) {
109-
if ($$int <= 5 && 0 <= $$int) {
110-
return /* Some */[$$int];
109+
function v1FromJs(param) {
110+
if (param <= 5 && 0 <= param) {
111+
return /* Some */[param - 0 | 0];
111112
} else {
112113
return /* None */0;
113114
}
114115
}
115116

116-
function v2ToJs(variant) {
117-
return variant + 2 | 0;
117+
function v2ToJs(param) {
118+
return param + 2 | 0;
118119
}
119120

120-
function v2FromJs($$int) {
121-
if ($$int <= 7 && 2 <= $$int) {
122-
return /* Some */[$$int];
121+
function v2FromJs(param) {
122+
if (param <= 7 && 2 <= param) {
123+
return /* Some */[param - 2 | 0];
123124
} else {
124125
return /* None */0;
125126
}
@@ -147,6 +148,21 @@ console.log($$Array.map(v2FromJs, $$Array.map((function (prim) {
147148
return prim + 1 | 0;
148149
}), xs)));
149150

151+
var x = v2FromJs(3);
152+
153+
if (!(
154+
x && x[0] === 1 ? /* true */1 : /* false */0
155+
)) {
156+
throw [
157+
Caml_builtin_exceptions.assert_failure,
158+
[
159+
"ast_js_mapper_poly_test.ml",
160+
71,
161+
3
162+
]
163+
];
164+
}
165+
150166
exports.uToJs = uToJs;
151167
exports.uFromJs = uFromJs;
152168
exports.$neg$tilde = $neg$tilde;

jscomp/test/ast_js_mapper_poly_test.ml

+3-1
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,6 @@ Js.log (Array.map v2ToJs [|C0; C1; C2 ; C3 ; C4; C5 |])
6666
;;
6767
let xs = (Array.map v2ToJs [|C0; C1; C2 ; C3 ; C4; C5 |])
6868
;;
69-
Js.log (Array.map v2FromJs (Array.map succ xs))
69+
Js.log (Array.map v2FromJs (Array.map succ xs))
70+
71+
;; assert (C1 |> v2ToJs |> v2FromJs|> (fun x -> match x with Some C1 -> true | _ -> false ))

0 commit comments

Comments
 (0)