Skip to content

Commit f371681

Browse files
committed
tweaks and clean
1 parent 8a5f506 commit f371681

File tree

2 files changed

+67
-49
lines changed

2 files changed

+67
-49
lines changed

jscomp/core/lam_compile.ml

Lines changed: 36 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -488,10 +488,21 @@ and compile_general_cases
488488
(fun group ->
489489
Ext_list.map_last
490490
(fun last (switch_case,lam) ->
491+
(* let switch_block, should_break =
492+
Js_output.to_break_block (compile_lambda cxt lam) in
493+
let should_break =
494+
match cxt.should_return with
495+
| ReturnFalse -> should_break
496+
| ReturnTrue _ -> false
497+
in *)
498+
491499
if last
492-
then {J.switch_case ;
493-
switch_body =
494-
Js_output.to_break_block (compile_lambda cxt lam) }
500+
then
501+
(* merge and shared *)
502+
let switch_body = Js_output.to_break_block (compile_lambda cxt lam) in
503+
{J.switch_case ;
504+
switch_body
505+
}
495506
else
496507
{ switch_case; switch_body = [],false }
497508
)
@@ -1242,28 +1253,28 @@ and
12421253
block @
12431254
(if sw_numconsts = 0 then
12441255
compile_cases cxt (E.tag e) sw_blocks sw_blocks_default
1245-
else if sw_numblocks = 0 then
1246-
compile_cases cxt e sw_consts sw_num_default
1247-
else
1248-
(* [e] will be used twice *)
1249-
let dispatch e =
1250-
S.if_
1251-
(E.is_type_number e )
1252-
(compile_cases cxt e sw_consts sw_num_default
1253-
)
1254-
(* default still needed, could simplified*)
1255-
~else_:
1256-
(compile_cases cxt (E.tag e ) sw_blocks
1257-
sw_blocks_default)
1258-
in
1259-
begin
1260-
match e.expression_desc with
1261-
| J.Var _ -> [ dispatch e]
1262-
| _ ->
1263-
let v = Ext_ident.create_tmp () in
1264-
(* Necessary avoid duplicated computation*)
1265-
[ S.define_variable ~kind:Variable v e ; dispatch (E.var v)]
1266-
end )
1256+
else if sw_numblocks = 0 then
1257+
compile_cases cxt e sw_consts sw_num_default
1258+
else
1259+
(* [e] will be used twice *)
1260+
let dispatch e =
1261+
S.if_
1262+
(E.is_type_number e )
1263+
(compile_cases cxt e sw_consts sw_num_default
1264+
)
1265+
(* default still needed, could simplified*)
1266+
~else_:
1267+
(compile_cases cxt (E.tag e ) sw_blocks
1268+
sw_blocks_default)
1269+
in
1270+
begin
1271+
match e.expression_desc with
1272+
| J.Var _ -> [ dispatch e]
1273+
| _ ->
1274+
let v = Ext_ident.create_tmp () in
1275+
(* Necessary avoid duplicated computation*)
1276+
[ S.define_variable ~kind:Variable v e ; dispatch (E.var v)]
1277+
end )
12671278
in
12681279
begin
12691280
match st with (* Needs declare first *)

lib/whole_compiler.ml

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -97858,10 +97858,17 @@ and compile_general_cases
9785897858
(fun group ->
9785997859
Ext_list.map_last
9786097860
(fun last (switch_case,lam) ->
97861+
let switch_block, should_break =
97862+
Js_output.to_break_block (compile_lambda cxt lam) in
97863+
let should_break =
97864+
match cxt.should_return with
97865+
| ReturnFalse -> should_break
97866+
| ReturnTrue _ -> false
97867+
in
9786197868
if last
9786297869
then {J.switch_case ;
97863-
switch_body =
97864-
Js_output.to_break_block (compile_lambda cxt lam) }
97870+
switch_body = switch_block, should_break
97871+
}
9786597872
else
9786697873
{ switch_case; switch_body = [],false }
9786797874
)
@@ -98612,28 +98619,28 @@ and
9861298619
block @
9861398620
(if sw_numconsts = 0 then
9861498621
compile_cases cxt (E.tag e) sw_blocks sw_blocks_default
98615-
else if sw_numblocks = 0 then
98616-
compile_cases cxt e sw_consts sw_num_default
98617-
else
98618-
(* [e] will be used twice *)
98619-
let dispatch e =
98620-
S.if_
98621-
(E.is_type_number e )
98622-
(compile_cases cxt e sw_consts sw_num_default
98623-
)
98624-
(* default still needed, could simplified*)
98625-
~else_:
98626-
(compile_cases cxt (E.tag e ) sw_blocks
98627-
sw_blocks_default)
98628-
in
98629-
begin
98630-
match e.expression_desc with
98631-
| J.Var _ -> [ dispatch e]
98632-
| _ ->
98633-
let v = Ext_ident.create_tmp () in
98634-
(* Necessary avoid duplicated computation*)
98635-
[ S.define_variable ~kind:Variable v e ; dispatch (E.var v)]
98636-
end )
98622+
else if sw_numblocks = 0 then
98623+
compile_cases cxt e sw_consts sw_num_default
98624+
else
98625+
(* [e] will be used twice *)
98626+
let dispatch e =
98627+
S.if_
98628+
(E.is_type_number e )
98629+
(compile_cases cxt e sw_consts sw_num_default
98630+
)
98631+
(* default still needed, could simplified*)
98632+
~else_:
98633+
(compile_cases cxt (E.tag e ) sw_blocks
98634+
sw_blocks_default)
98635+
in
98636+
begin
98637+
match e.expression_desc with
98638+
| J.Var _ -> [ dispatch e]
98639+
| _ ->
98640+
let v = Ext_ident.create_tmp () in
98641+
(* Necessary avoid duplicated computation*)
98642+
[ S.define_variable ~kind:Variable v e ; dispatch (E.var v)]
98643+
end )
9863798644
in
9863898645
begin
9863998646
match st with (* Needs declare first *)

0 commit comments

Comments
 (0)