Skip to content

Commit 7c4225c

Browse files
authored
Merge pull request #3779 from BuckleScript/improve_codegen
improve code gen, better code equality for block
2 parents 0c56ba5 + 148fa0c commit 7c4225c

29 files changed

+1298
-1800
lines changed

jscomp/core/j.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,7 +278,7 @@ and statement_desc =
278278
| Variable of variable_declaration
279279
(* Function declaration and Variable declaration *)
280280
| Exp of expression
281-
| If of expression * block * block option
281+
| If of expression * block * block
282282
| While of label option * expression * block
283283
* Js_closure.t (* check if it contains loop mutable values, happens in nested loop *)
284284
| ForRange of for_ident_expression option * finish_ident_expression *

jscomp/core/js_dump.ml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1126,17 +1126,17 @@ and statement_desc top cxt f (s : J.statement_desc) : cxt =
11261126
P.space f;
11271127
let cxt = block cxt f s1 in
11281128
(match s2 with
1129-
| None | (Some [])
1130-
| Some [{statement_desc = (Block [] | Exp {expression_desc = Var _;} ); }]
1129+
| []
1130+
| [{statement_desc = (Block [] | Exp {expression_desc = Var _;} ); }]
11311131
-> P.newline f; cxt
1132-
| Some [{statement_desc = If _} as nest]
1133-
| Some [{statement_desc = Block [ {statement_desc = If _ ; _} as nest] ; _}]
1132+
| [{statement_desc = If _} as nest]
1133+
| [{statement_desc = Block [ {statement_desc = If _ ; _} as nest] ; _}]
11341134
->
11351135
P.space f;
11361136
P.string f L.else_;
11371137
P.space f;
11381138
statement false cxt f nest
1139-
| Some s2 ->
1139+
| (_::_) as s2 ->
11401140
P.space f;
11411141
P.string f L.else_;
11421142
P.space f ;
@@ -1340,11 +1340,11 @@ and function_body cxt f b =
13401340
begin match s.statement_desc with
13411341
| If (bool,
13421342
then_,
1343-
Some [{
1343+
[{
13441344
statement_desc =
13451345
Return {return_value = {expression_desc = Undefined}} }])
13461346
->
1347-
statement false cxt f {s with statement_desc = If(bool,then_,None)}
1347+
statement false cxt f {s with statement_desc = If(bool,then_, [])}
13481348
| _ ->
13491349
statement false cxt f s
13501350
end

jscomp/core/js_fold.ml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,7 @@ class virtual fold =
5454
| Exp _x -> let o = o#expression _x in o
5555
| If (_x, _x_i1, _x_i2) ->
5656
let o = o#expression _x in
57-
let o = o#block _x_i1 in
58-
let o = o#option (fun o -> o#block) _x_i2 in o
57+
let o = o#block _x_i1 in let o = o#block _x_i2 in o
5958
| While (_x, _x_i1, _x_i2, _x_i3) ->
6059
let o = o#option (fun o -> o#label) _x in
6160
let o = o#expression _x_i1 in

jscomp/core/js_map.ml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,7 @@ class virtual map =
6464
| If (_x, _x_i1, _x_i2) ->
6565
let _x = o#expression _x in
6666
let _x_i1 = o#block _x_i1 in
67-
let _x_i2 = o#option (fun o -> o#block) _x_i2
68-
in If (_x, _x_i1, _x_i2)
67+
let _x_i2 = o#block _x_i2 in If (_x, _x_i1, _x_i2)
6968
| While (_x, _x_i1, _x_i2, _x_i3) ->
7069
let _x = o#option (fun o -> o#label) _x in
7170
let _x_i1 = o#expression _x_i1 in

jscomp/core/js_pass_flatten.ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ let flatten_map =
4646
S.block ( List.rev_map self#statement (Js_analyzer.rev_flatten_seq v ))
4747
| Exp ({expression_desc = Cond(a,b,c); comment} ) ->
4848
{ statement_desc = If (a, [ self#statement (S.exp b)],
49-
Some [ self#statement (S.exp c)]); comment}
49+
[ self#statement (S.exp c)]); comment}
5050

5151
| Exp ({expression_desc = Bin(Eq, a, ({expression_desc = Seq _; _ } as v)); _} )
5252
->
@@ -67,7 +67,7 @@ let flatten_map =
6767
| Return ( {return_value = {expression_desc = Cond (a,b,c); comment}})
6868
->
6969
{ statement_desc = If (a, [self#statement (S.return_stmt b)],
70-
Some [ self#statement (S.return_stmt c)]); comment}
70+
[ self#statement (S.return_stmt c)]); comment}
7171

7272
| Return ({return_value = {expression_desc = Seq _; _} as v}) ->
7373
let block = Js_analyzer.rev_flatten_seq v in

jscomp/core/js_stmt_make.ml

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ let rec if_ ?comment ?declaration ?else_ (e : J.expression) (then_ : J.block)
223223
| [], [] -> exp e
224224
| [], _ ->
225225
{
226-
statement_desc = If ( E.not e, ifnot, None); comment
226+
statement_desc = If ( E.not e, ifnot, []); comment
227227
}
228228
| [ {statement_desc = Return {return_value = ret_ifso; _}; _}],
229229
[ {statement_desc = Return {return_value = ret_ifnot; _}; _} as _ifnot_stmt]
@@ -250,21 +250,21 @@ let rec if_ ?comment ?declaration ?else_ (e : J.expression) (then_ : J.block)
250250
->
251251
exp (E.econd e exp_ifso exp_ifnot)
252252

253-
| [ {statement_desc = If (pred1, ifso1, Some ifnot1) }],
253+
| [ {statement_desc = If (pred1, ifso1, ifnot1) }],
254254
_ when Js_analyzer.eq_block ifnot1 ifnot
255255
->
256256
aux ?comment (E.and_ e pred1) ifso1 ifnot1
257-
| [ {statement_desc = If (pred1, ifso1, Some ifnot1) }],
257+
| [ {statement_desc = If (pred1, ifso1, ifnot1) }],
258258
_ when Js_analyzer.eq_block ifso1 ifnot
259259
->
260260
aux ?comment (E.and_ e (E.not pred1)) ifnot1 ifso1
261261
| _ ,
262-
[ {statement_desc = If (pred1, ifso1, Some (else_ )) }]
262+
[ {statement_desc = If (pred1, ifso1, (else_ )) }]
263263
when Js_analyzer.eq_block ifso ifso1
264264
->
265265
aux ?comment (E.or_ e pred1) ifso else_
266266
| _ ,
267-
[ {statement_desc = If (pred1, ifso1, Some ifnot1 ) }]
267+
[ {statement_desc = If (pred1, ifso1, ifnot1 ) }]
268268
when Js_analyzer.eq_block ifso ifnot1
269269
->
270270
aux ?comment (E.or_ e (E.not pred1)) ifso ifso1
@@ -280,8 +280,7 @@ let rec if_ ?comment ?declaration ?else_ (e : J.expression) (then_ : J.block)
280280
{ statement_desc =
281281
If (e,
282282
ifso,
283-
if ifnot = [] then None
284-
else Some ifnot);
283+
ifnot);
285284
comment } in
286285
let if_block =
287286
aux ?comment e then_ (match else_ with None -> [] | Some v -> v) in

jscomp/test/build.ninja

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,7 @@ build test/gpr_3595_test.cmi test/gpr_3595_test.cmj : cc test/gpr_3595_test.ml |
296296
build test/gpr_3609_test.cmi test/gpr_3609_test.cmj : cc test/gpr_3609_test.ml | $stdlib
297297
build test/gpr_3697_test.cmi test/gpr_3697_test.cmj : cc test/gpr_3697_test.ml | $stdlib
298298
build test/gpr_373_test.cmi test/gpr_373_test.cmj : cc test/gpr_373_test.ml | $stdlib
299+
build test/gpr_3770_test.cmi test/gpr_3770_test.cmj : cc test/gpr_3770_test.ml | $stdlib
299300
build test/gpr_405_test.cmj : cc_cmi test/gpr_405_test.ml | test/gpr_405_test.cmi $stdlib
300301
build test/gpr_405_test.cmi : cc test/gpr_405_test.mli | $stdlib
301302
build test/gpr_441.cmi test/gpr_441.cmj : cc test/gpr_441.ml | $stdlib

jscomp/test/exception_rebound_err_test.js

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,8 @@ function test_js_error4(param) {
4949
} else {
5050
exit = 2;
5151
}
52-
if (exit === 2) {
53-
if (e[0] === A) {
54-
if (e[1] === 2) {
55-
return 4;
56-
}
57-
58-
}
59-
52+
if (exit === 2 && e[0] === A && e[1] === 2) {
53+
return 4;
6054
}
6155
if (e === B) {
6256
return 5;

jscomp/test/ext_filename_test.js

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -119,16 +119,10 @@ function relative_path(file_or_dir_1, file_or_dir_2) {
119119
while(true) {
120120
var dir2 = _dir2;
121121
var dir1 = _dir1;
122-
if (dir1) {
123-
if (dir2) {
124-
if (dir1[0] === dir2[0]) {
125-
_dir2 = dir2[1];
126-
_dir1 = dir1[1];
127-
continue ;
128-
}
129-
130-
}
131-
122+
if (dir1 && dir2 && dir1[0] === dir2[0]) {
123+
_dir2 = dir2[1];
124+
_dir1 = dir1[1];
125+
continue ;
132126
}
133127
return Pervasives.$at(List.map((function (param) {
134128
return node_parent;

0 commit comments

Comments
 (0)