@@ -882,31 +882,28 @@ let tag ?comment ?(name=Js_dump_lit.tag) e : t =
882
882
let rec int32_bor ?comment (e1 : J.expression ) (e2 : J.expression ) :
883
883
J. expression =
884
884
match (e1.expression_desc, e2.expression_desc) with
885
- | Number (Int { i = i1 } | Uint i1 ), Number (Int { i = i2 } ) ->
885
+ | Number (Int { i = i1 } ), Number (Int { i = i2 } ) ->
886
886
int ?comment (Int32. logor i1 i2)
887
- | _, Bin (Lsr , e2, { expression_desc = Number (Int { i = 0l } | Uint 0l ); _ })
887
+ | _, Bin (Lsr , e2, { expression_desc = Number (Int { i = 0l }); _ })
888
888
->
889
889
int32_bor e1 e2
890
- | Bin (Lsr , e1, { expression_desc = Number (Int { i = 0l } | Uint 0l ); _ }), _
890
+ | Bin (Lsr , e1, { expression_desc = Number (Int { i = 0l }); _ }), _
891
891
->
892
892
int32_bor e1 e2
893
- | ( Bin (Lsr , _, { expression_desc = Number (Int { i } | Uint i ); _ }),
894
- Number (Int { i = 0l } | Uint 0l ) )
893
+ | ( Bin (Lsr , _, { expression_desc = Number (Int { i }); _ }),
894
+ Number (Int { i = 0l }) )
895
895
when i > 0l ->
896
896
(* a >>> 3 | 0 -> a >>> 3 *)
897
897
e1
898
- | ( Bin (Bor , e1, { expression_desc = Number (Int { i = 0l } | Uint 0l ); _ }),
899
- Number (Int { i = 0l } | Uint 0l ) ) ->
898
+ | ( Bin (Bor , e1, { expression_desc = Number (Int { i = 0l }); _ }),
899
+ Number (Int { i = 0l }) ) ->
900
900
int32_bor e1 e2
901
901
| _ -> { comment; expression_desc = Bin (Bor , e1, e2) }
902
902
903
903
let to_int32 ?comment (e : J.expression ) : J.expression =
904
904
int32_bor ?comment e zero_int_literal
905
905
(* TODO: if we already know the input is int32, [x|0] can be reduced into [x] *)
906
906
907
- let uint32 ?comment n : J.expression =
908
- { expression_desc = Number (Uint n); comment }
909
-
910
907
let string_comp (cmp : J.binop ) ?comment (e0 : t ) (e1 : t ) =
911
908
match (e0.expression_desc, e1.expression_desc) with
912
909
| Str { txt = a0 ; delim = d0 } , Str { txt = a1 ; delim = d1 } -> (
@@ -931,19 +928,9 @@ let compare_int_aux (cmp : Lam_compat.comparison) (l : int) r =
931
928
932
929
let rec int_comp (cmp : Lam_compat.comparison ) ?comment (e0 : t ) (e1 : t ) =
933
930
match (cmp, e0.expression_desc, e1.expression_desc) with
934
- | _ , Number ((Int _ | Uint _ ) as l ), Number ((Int _ | Uint _ ) as r ) ->
935
- let l =
936
- match l with
937
- | Uint l -> Ext_int. int32_unsigned_to_int l
938
- | Int { i = l } -> Int32. to_int l
939
- | _ -> assert false
940
- in
941
- let r =
942
- match r with
943
- | Uint l -> Ext_int. int32_unsigned_to_int l
944
- | Int { i = l } -> Int32. to_int l
945
- | _ -> assert false
946
- in
931
+ | _ , Number ((Int { i = l } )), Number ((Int { i = r } )) ->
932
+ let l = Ext_int. int32_unsigned_to_int l in
933
+ let r = Int32. to_int r in
947
934
bool (compare_int_aux cmp l r)
948
935
| ( _,
949
936
Call
@@ -1025,20 +1012,17 @@ let js_comp cmp ?comment e0 e1 =
1025
1012
1026
1013
let rec int32_lsr ?comment (e1 : J.expression ) (e2 : J.expression ) :
1027
1014
J. expression =
1028
- let aux i1 i = uint32 (Int32. shift_right_logical i1 i) in
1015
+ let aux i1 i = int (Int32. shift_right_logical i1 i) in
1029
1016
match (e1.expression_desc, e2.expression_desc) with
1030
- | Number (Int { i = i1 } | Uint i1 ), Number (Int { i = i2 } | Uint i2 ) ->
1017
+ | Number (Int { i = i1 } ), Number (Int { i = i2 } ) ->
1031
1018
aux i1 (Int32. to_int i2)
1032
- | Bin (Lsr , _ , _ ), Number (Int { i = 0l } | Uint 0l ) ->
1019
+ | Bin (Lsr, _ , _ ), Number (Int { i = 0l } ) ->
1033
1020
e1 (* TODO: more opportunities here *)
1034
1021
| ( Bin
1035
- (Bor , e1, { expression_desc = Number (Int { i = 0l ; _ } | Uint 0l ); _ }),
1036
- Number (Int { i = 0l } | Uint 0l ) ) ->
1022
+ (Bor , e1, { expression_desc = Number (Int { i = 0l ; _ }); _ }),
1023
+ Number (Int { i = 0l }) ) ->
1037
1024
int32_lsr ?comment e1 e2
1038
- | _ , _ -> { comment; expression_desc = Bin (Lsr , e1, e2) (* uint32 *) }
1039
-
1040
- let to_uint32 ?comment (e : J.expression ) : J.expression =
1041
- int32_lsr ?comment e zero_int_literal
1025
+ | _ , _ -> { comment; expression_desc = Bin (Lsr , e1, e2) }
1042
1026
1043
1027
(* TODO:
1044
1028
we can apply a more general optimization here,
@@ -1094,10 +1078,11 @@ let rec is_out ?comment (e : t) (range : t) : t =
1094
1078
{ expression_desc = Var _; _ },
1095
1079
{ expression_desc = Number (Int { i = _; _ }) } ) );
1096
1080
} as e),
1097
- { expression_desc = Number (Int { i = 0l } | Uint 0l ); _ } ) ) ->
1081
+ { expression_desc = Number (Int { i = 0l }); _ } ) ) ->
1098
1082
(* TODO: check correctness *)
1099
1083
is_out ?comment e range
1100
- | _ , _ -> int_comp ?comment Cgt (to_uint32 e) range
1084
+ | _ , _ ->
1085
+ int_comp ?comment Cgt e range
1101
1086
1102
1087
let rec float_add ?comment (e1 : t ) (e2 : t ) =
1103
1088
match (e1.expression_desc, e2.expression_desc) with
@@ -1158,7 +1143,7 @@ let int32_asr ?comment e1 e2 : J.expression =
1158
1143
(* * Division by zero is undefined behavior*)
1159
1144
let int32_div ~checked ?comment (e1 : t ) (e2 : t ) : t =
1160
1145
match (e1.expression_desc, e2.expression_desc) with
1161
- | Length _ , Number (Int { i = 2l } | Uint 2l ) -> int32_asr e1 one_int_literal
1146
+ | Length _ , Number (Int { i = 2l } ) -> int32_asr e1 one_int_literal
1162
1147
| e1_desc , Number (Int { i = i1 } ) when i1 <> 0l -> (
1163
1148
match e1_desc with
1164
1149
| Number (Int { i = i0 } ) -> int (Int32. div i0 i1)
@@ -1179,8 +1164,8 @@ let float_mul ?comment e1 e2 = bin ?comment Mul e1 e2
1179
1164
1180
1165
let int32_lsl ?comment (e1 : J.expression ) (e2 : J.expression ) : J.expression =
1181
1166
match (e1, e2) with
1182
- | ( { expression_desc = Number (Int { i = i0 } | Uint i0 ) },
1183
- { expression_desc = Number (Int { i = i1 } | Uint i1 ) } ) ->
1167
+ | ( { expression_desc = Number (Int { i = i0 }) },
1168
+ { expression_desc = Number (Int { i = i1 }) } ) ->
1184
1169
int ?comment (Int32. shift_left i0 (Int32. to_int i1))
1185
1170
| _ -> { comment; expression_desc = Bin (Lsl , e1, e2) }
1186
1171
@@ -1196,17 +1181,17 @@ let is_pos_pow n =
1196
1181
1197
1182
let int32_mul ?comment (e1 : J.expression ) (e2 : J.expression ) : J.expression =
1198
1183
match (e1, e2) with
1199
- | { expression_desc = Number (Int { i = 0l } | Uint 0l ); _ }, x
1184
+ | { expression_desc = Number (Int { i = 0l }); _ }, x
1200
1185
when Js_analyzer. no_side_effect_expression x ->
1201
1186
zero_int_literal
1202
- | x, { expression_desc = Number (Int { i = 0l } | Uint 0l ); _ }
1187
+ | x, { expression_desc = Number (Int { i = 0l }); _ }
1203
1188
when Js_analyzer. no_side_effect_expression x ->
1204
1189
zero_int_literal
1205
1190
| ( { expression_desc = Number (Int { i = i0 }); _ },
1206
1191
{ expression_desc = Number (Int { i = i1 }); _ } ) ->
1207
1192
int (Int32. mul i0 i1)
1208
- | e, { expression_desc = Number (Int { i = i0 } | Uint i0 ); _ }
1209
- | { expression_desc = Number (Int { i = i0 } | Uint i0 ); _ } , e ->
1193
+ | e, { expression_desc = Number (Int { i = i0 }); _ }
1194
+ | { expression_desc = Number (Int { i = i0 } ); _ } , e ->
1210
1195
let i = is_pos_pow i0 in
1211
1196
if i > = 0 then int32_lsl e (small_int i)
1212
1197
else
@@ -1225,10 +1210,10 @@ let rec int32_bxor ?comment (e1 : t) (e2 : t) : J.expression =
1225
1210
match (e1.expression_desc, e2.expression_desc) with
1226
1211
| Number (Int { i = i1 } ), Number (Int { i = i2 } ) ->
1227
1212
int ?comment (Int32. logxor i1 i2)
1228
- | _, Bin (Lsr , e2, { expression_desc = Number (Int { i = 0l } | Uint 0l ); _ })
1213
+ | _, Bin (Lsr , e2, { expression_desc = Number (Int { i = 0l }); _ })
1229
1214
->
1230
1215
int32_bxor e1 e2
1231
- | Bin (Lsr , e1, { expression_desc = Number (Int { i = 0l } | Uint 0l ); _ }), _
1216
+ | Bin (Lsr , e1, { expression_desc = Number (Int { i = 0l }); _ }), _
1232
1217
->
1233
1218
int32_bxor e1 e2
1234
1219
| _ -> { comment; expression_desc = Bin (Bxor , e1, e2) }
0 commit comments