@@ -60,7 +60,7 @@ let var ?comment id : t = { expression_desc = Var (Id id); comment }
60
60
Invariant: it should not call an external module .. *)
61
61
62
62
let js_global ?comment (v : string ) = var ?comment (Ext_ident. create_js v)
63
- let undefined : t = { expression_desc = Undefined ; comment = None }
63
+ let undefined : t = { expression_desc = Undefined {isUnit = false } ; comment = None }
64
64
let nil : t = { expression_desc = Null ; comment = None }
65
65
66
66
let call ?comment ~info e0 args : t =
@@ -183,7 +183,7 @@ let is_array (e0 : t) : t =
183
183
let new_ ?comment e0 args : t =
184
184
{ expression_desc = New (e0, Some args); comment }
185
185
186
- let unit : t = { expression_desc = Undefined ; comment = None }
186
+ let unit : t = { expression_desc = Undefined {isUnit = true } ; comment = None }
187
187
188
188
(* let math ?comment v args : t =
189
189
{comment ; expression_desc = Math(v,args)} *)
@@ -256,17 +256,17 @@ let dummy_obj ?comment (info : Lam_tag_info.t) : t =
256
256
*)
257
257
let rec seq ?comment (e0 : t ) (e1 : t ) : t =
258
258
match (e0.expression_desc, e1.expression_desc) with
259
- | ( ( Seq (a, { expression_desc = Number _ | Undefined })
260
- | Seq ({ expression_desc = Number _ | Undefined }, a) ),
259
+ | ( ( Seq (a, { expression_desc = Number _ | Undefined _ })
260
+ | Seq ({ expression_desc = Number _ | Undefined _ }, a) ),
261
261
_ ) ->
262
262
seq ?comment a e1
263
- | _ , Seq ({ expression_desc = Number _ | Undefined } , a ) ->
263
+ | _ , Seq ({ expression_desc = Number _ | Undefined _ } , a ) ->
264
264
(* Return value could not be changed*)
265
265
seq ?comment e0 a
266
- | _ , Seq (a , ({ expression_desc = Number _ | Undefined } as v )) ->
266
+ | _ , Seq (a , ({ expression_desc = Number _ | Undefined _ } as v )) ->
267
267
(* Return value could not be changed*)
268
268
seq ?comment (seq e0 a) v
269
- | (Number _ | Var _ | Undefined ), _ -> e1
269
+ | (Number _ | Var _ | Undefined _ ), _ -> e1
270
270
| _ -> { expression_desc = Seq (e0, e1); comment }
271
271
272
272
let fuse_to_seq x xs = if xs = [] then x else Ext_list. fold_left xs x seq
@@ -567,22 +567,22 @@ let str_equal (txt0:string) (delim0:External_arg_spec.delim) txt1 delim1 =
567
567
568
568
let rec triple_equal ?comment (e0 : t ) (e1 : t ) : t =
569
569
match (e0.expression_desc, e1.expression_desc) with
570
- | ( (Null | Undefined ),
570
+ | ( (Null | Undefined _ ),
571
571
(Bool _ | Number _ | Typeof _ | Fun _ | Array _ | Caml_block _) )
572
572
when no_side_effect e1 ->
573
573
false_
574
574
| ( (Bool _ | Number _ | Typeof _ | Fun _ | Array _ | Caml_block _),
575
- (Null | Undefined ) )
575
+ (Null | Undefined _ ) )
576
576
when no_side_effect e0 ->
577
577
false_
578
578
| Number (Int { i = i0 ; _ } ), Number (Int { i = i1 ; _ } ) -> bool (i0 = i1)
579
579
| Optional_block (a , _ ), Optional_block (b , _ ) -> triple_equal ?comment a b
580
- | Undefined , Optional_block _
581
- | Optional_block _, Undefined
582
- | Null , Undefined
583
- | Undefined , Null ->
580
+ | Undefined _ , Optional_block _
581
+ | Optional_block _, Undefined _
582
+ | Null , Undefined _
583
+ | Undefined _ , Null ->
584
584
false_
585
- | Null , Null | Undefined , Undefined -> true_
585
+ | Null , Null | Undefined _ , Undefined _ -> true_
586
586
| _ -> { expression_desc = Bin (EqEqEq , e0, e1); comment }
587
587
588
588
let bin ?comment (op : J.binop ) (e0 : t ) (e1 : t ) : t =
@@ -654,7 +654,7 @@ let and_ ?comment (e1 : t) (e2 : t) : t =
654
654
| Var i, Bin (And , l, ({ expression_desc = Var j; _ } as r))
655
655
when Js_op_util. same_vident i j ->
656
656
{ e2 with expression_desc = Bin (And , r, l) }
657
- | ( Bin (NotEqEq , { expression_desc = Var i }, { expression_desc = Undefined }),
657
+ | ( Bin (NotEqEq , { expression_desc = Var i }, { expression_desc = Undefined _ }),
658
658
Bin
659
659
( EqEqEq ,
660
660
{ expression_desc = Var j },
@@ -702,7 +702,7 @@ let not (e : t) : t =
702
702
703
703
let not_empty_branch (x : t ) =
704
704
match x.expression_desc with
705
- | Number (Int { i = 0l } ) | Undefined -> false
705
+ | Number (Int { i = 0l } ) | Undefined _ -> false
706
706
| _ -> true
707
707
708
708
let rec econd ?comment (pred : t ) (ifso : t ) (ifnot : t ) : t =
@@ -735,8 +735,8 @@ let rec econd ?comment (pred : t) (ifso : t) (ifnot : t) : t =
735
735
econd (or_ pred (not pred1)) ifso ifso1
736
736
| Js_not e , _ , _ when not_empty_branch ifnot -> econd ?comment e ifnot ifso
737
737
| ( _,
738
- Seq (a, { expression_desc = Undefined }),
739
- Seq (b, { expression_desc = Undefined }) ) ->
738
+ Seq (a, { expression_desc = Undefined _ }),
739
+ Seq (b, { expression_desc = Undefined _ }) ) ->
740
740
seq (econd ?comment pred a b) undefined
741
741
| _ ->
742
742
if Js_analyzer. eq_expression ifso ifnot then
@@ -746,7 +746,7 @@ let rec econd ?comment (pred : t) (ifso : t) (ifnot : t) : t =
746
746
let rec float_equal ?comment (e0 : t ) (e1 : t ) : t =
747
747
match (e0.expression_desc, e1.expression_desc) with
748
748
| Number (Int { i = i0 ; _ } ), Number (Int { i = i1 } ) -> bool (i0 = i1)
749
- | Undefined , Undefined -> true_
749
+ | Undefined _ , Undefined _ -> true_
750
750
(* | (Bin(Bor,
751
751
{expression_desc = Number(Int {i = 0l; _})},
752
752
({expression_desc = Caml_block_tag _; _} as a ))
@@ -983,11 +983,11 @@ let rec int_comp (cmp : Lam_compat.comparison) ?comment (e0 : t) (e1 : t) =
983
983
args,
984
984
call_info );
985
985
}
986
- | Ceq , Optional_block _ , Undefined | Ceq , Undefined , Optional_block _ ->
986
+ | Ceq , Optional_block _ , Undefined _ | Ceq , Undefined _ , Optional_block _ ->
987
987
false_
988
988
| Ceq , _ , _ -> int_equal e0 e1
989
- | Cneq , Optional_block _, Undefined
990
- | Cneq , Undefined , Optional_block _
989
+ | Cneq , Optional_block _, Undefined _
990
+ | Cneq , Undefined _ , Optional_block _
991
991
| Cneq , Caml_block _, Number _
992
992
| Cneq , Number _ , Caml_block _ ->
993
993
true_
@@ -1281,36 +1281,36 @@ let is_null ?comment (x : t) = triple_equal ?comment x nil
1281
1281
let is_undef ?comment x = triple_equal ?comment x undefined
1282
1282
1283
1283
let for_sure_js_null_undefined (x : t ) =
1284
- match x.expression_desc with Null | Undefined -> true | _ -> false
1284
+ match x.expression_desc with Null | Undefined _ -> true | _ -> false
1285
1285
1286
1286
let is_null_undefined ?comment (x : t ) : t =
1287
1287
match x.expression_desc with
1288
- | Null | Undefined -> true_
1288
+ | Null | Undefined _ -> true_
1289
1289
| Number _ | Array _ | Caml_block _ -> false_
1290
1290
| _ -> { comment; expression_desc = Is_null_or_undefined x }
1291
1291
1292
1292
let eq_null_undefined_boolean ?comment (a : t ) (b : t ) =
1293
1293
match (a.expression_desc, b.expression_desc) with
1294
- | ( (Null | Undefined ),
1294
+ | ( (Null | Undefined _ ),
1295
1295
(Bool _ | Number _ | Typeof _ | Fun _ | Array _ | Caml_block _ ) ) ->
1296
1296
false_
1297
1297
| ( (Bool _ | Number _ | Typeof _ | Fun _ | Array _ | Caml_block _),
1298
- (Null | Undefined ) ) ->
1298
+ (Null | Undefined _ ) ) ->
1299
1299
false_
1300
- | Null , Undefined | Undefined , Null -> false_
1301
- | Null , Null | Undefined , Undefined -> true_
1300
+ | Null , Undefined _ | Undefined _ , Null -> false_
1301
+ | Null , Null | Undefined _ , Undefined _ -> true_
1302
1302
| _ -> { expression_desc = Bin (EqEqEq , a, b); comment }
1303
1303
1304
1304
let neq_null_undefined_boolean ?comment (a : t ) (b : t ) =
1305
1305
match (a.expression_desc, b.expression_desc) with
1306
- | ( (Null | Undefined ),
1306
+ | ( (Null | Undefined _ ),
1307
1307
(Bool _ | Number _ | Typeof _ | Fun _ | Array _ | Caml_block _ ) ) ->
1308
1308
true_
1309
1309
| ( (Bool _ | Number _ | Typeof _ | Fun _ | Array _ | Caml_block _),
1310
- (Null | Undefined ) ) ->
1310
+ (Null | Undefined _ ) ) ->
1311
1311
true_
1312
- | Null , Null | Undefined , Undefined -> false_
1313
- | Null , Undefined | Undefined , Null -> true_
1312
+ | Null , Null | Undefined _ , Undefined _ -> false_
1313
+ | Null , Undefined _ | Undefined _ , Null -> true_
1314
1314
| _ -> { expression_desc = Bin (NotEqEq , a, b); comment }
1315
1315
1316
1316
(* * TODO: in the future add a flag
0 commit comments