@@ -559,7 +559,8 @@ let string_length ?comment (e : t) : t =
559559(* TODO: use [Buffer] instead? *)
560560let bytes_length ?comment (e : t ) : t =
561561 match e.expression_desc with
562- | Array (l , _ ) -> int ?comment (Int32. of_int (List. length l))
562+ | Array (l , _ ) when no_side_effect e ->
563+ int ?comment (Int32. of_int (List. length l))
563564 | _ -> {expression_desc = Length (e, Bytes ); comment}
564565
565566let function_length ?comment (e : t ) : t =
@@ -624,7 +625,8 @@ let rec triple_equal ?comment (e0 : t) (e1 : t) : t =
624625 | Undefined _, Optional_block _
625626 | Optional_block _, Undefined _
626627 | Null , Undefined _
627- | Undefined _ , Null ->
628+ | Undefined _, Null
629+ when no_side_effect e0 && no_side_effect e1 ->
628630 false_
629631 | Null , Null | Undefined _ , Undefined _ -> true_
630632 | _ -> {expression_desc = Bin (EqEqEq , e0, e1); comment}
@@ -1604,11 +1606,9 @@ let is_pos_pow n =
16041606
16051607let int32_mul ?comment (e1 : J.expression ) (e2 : J.expression ) : J.expression =
16061608 match (e1, e2) with
1607- | {expression_desc = Number (Int {i = 0l }); _}, x
1608- when Js_analyzer. no_side_effect_expression x ->
1609+ | {expression_desc = Number (Int {i = 0l } ); _} , x when no_side_effect x ->
16091610 zero_int_literal
1610- | x, {expression_desc = Number (Int {i = 0l }); _}
1611- when Js_analyzer. no_side_effect_expression x ->
1611+ | x , {expression_desc = Number (Int {i = 0l } ); _} when no_side_effect x ->
16121612 zero_int_literal
16131613 | ( {expression_desc = Number (Int {i = i0}); _},
16141614 {expression_desc = Number (Int {i = i1}); _} ) ->
0 commit comments