@@ -60,7 +60,7 @@ let var ?comment id : t = { expression_desc = Var (Id id); comment }
6060 Invariant: it should not call an external module .. *)
6161
6262let 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 }
6464let nil : t = { expression_desc = Null ; comment = None }
6565
6666let call ?comment ~info e0 args : t =
@@ -183,7 +183,7 @@ let is_array (e0 : t) : t =
183183let new_ ?comment e0 args : t =
184184 { expression_desc = New (e0, Some args); comment }
185185
186- let unit : t = { expression_desc = Undefined ; comment = None }
186+ let unit : t = { expression_desc = Undefined {isUnit = true } ; comment = None }
187187
188188(* let math ?comment v args : t =
189189 {comment ; expression_desc = Math(v,args)} *)
@@ -256,17 +256,17 @@ let dummy_obj ?comment (info : Lam_tag_info.t) : t =
256256*)
257257let rec seq ?comment (e0 : t ) (e1 : t ) : t =
258258 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) ),
261261 _ ) ->
262262 seq ?comment a e1
263- | _ , Seq ({ expression_desc = Number _ | Undefined } , a ) ->
263+ | _ , Seq ({ expression_desc = Number _ | Undefined _ } , a ) ->
264264 (* Return value could not be changed*)
265265 seq ?comment e0 a
266- | _ , Seq (a , ({ expression_desc = Number _ | Undefined } as v )) ->
266+ | _ , Seq (a , ({ expression_desc = Number _ | Undefined _ } as v )) ->
267267 (* Return value could not be changed*)
268268 seq ?comment (seq e0 a) v
269- | (Number _ | Var _ | Undefined ), _ -> e1
269+ | (Number _ | Var _ | Undefined _ ), _ -> e1
270270 | _ -> { expression_desc = Seq (e0, e1); comment }
271271
272272let 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 =
567567
568568let rec triple_equal ?comment (e0 : t ) (e1 : t ) : t =
569569 match (e0.expression_desc, e1.expression_desc) with
570- | ( (Null | Undefined ),
570+ | ( (Null | Undefined _ ),
571571 (Bool _ | Number _ | Typeof _ | Fun _ | Array _ | Caml_block _) )
572572 when no_side_effect e1 ->
573573 false_
574574 | ( (Bool _ | Number _ | Typeof _ | Fun _ | Array _ | Caml_block _),
575- (Null | Undefined ) )
575+ (Null | Undefined _ ) )
576576 when no_side_effect e0 ->
577577 false_
578578 | Number (Int { i = i0 ; _ } ), Number (Int { i = i1 ; _ } ) -> bool (i0 = i1)
579579 | 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 ->
584584 false_
585- | Null , Null | Undefined , Undefined -> true_
585+ | Null , Null | Undefined _ , Undefined _ -> true_
586586 | _ -> { expression_desc = Bin (EqEqEq , e0, e1); comment }
587587
588588let bin ?comment (op : J.binop ) (e0 : t ) (e1 : t ) : t =
@@ -654,7 +654,7 @@ let and_ ?comment (e1 : t) (e2 : t) : t =
654654 | Var i, Bin (And , l, ({ expression_desc = Var j; _ } as r))
655655 when Js_op_util. same_vident i j ->
656656 { 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 _ }),
658658 Bin
659659 ( EqEqEq ,
660660 { expression_desc = Var j },
@@ -702,7 +702,7 @@ let not (e : t) : t =
702702
703703let not_empty_branch (x : t ) =
704704 match x.expression_desc with
705- | Number (Int { i = 0l } ) | Undefined -> false
705+ | Number (Int { i = 0l } ) | Undefined _ -> false
706706 | _ -> true
707707
708708let 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 =
735735 econd (or_ pred (not pred1)) ifso ifso1
736736 | Js_not e , _ , _ when not_empty_branch ifnot -> econd ?comment e ifnot ifso
737737 | ( _,
738- Seq (a, { expression_desc = Undefined }),
739- Seq (b, { expression_desc = Undefined }) ) ->
738+ Seq (a, { expression_desc = Undefined _ }),
739+ Seq (b, { expression_desc = Undefined _ }) ) ->
740740 seq (econd ?comment pred a b) undefined
741741 | _ ->
742742 if Js_analyzer. eq_expression ifso ifnot then
@@ -746,7 +746,7 @@ let rec econd ?comment (pred : t) (ifso : t) (ifnot : t) : t =
746746let rec float_equal ?comment (e0 : t ) (e1 : t ) : t =
747747 match (e0.expression_desc, e1.expression_desc) with
748748 | Number (Int { i = i0 ; _ } ), Number (Int { i = i1 } ) -> bool (i0 = i1)
749- | Undefined , Undefined -> true_
749+ | Undefined _ , Undefined _ -> true_
750750 (* | (Bin(Bor,
751751 {expression_desc = Number(Int {i = 0l; _})},
752752 ({expression_desc = Caml_block_tag _; _} as a ))
@@ -983,11 +983,11 @@ let rec int_comp (cmp : Lam_compat.comparison) ?comment (e0 : t) (e1 : t) =
983983 args,
984984 call_info );
985985 }
986- | Ceq , Optional_block _ , Undefined | Ceq , Undefined , Optional_block _ ->
986+ | Ceq , Optional_block _ , Undefined _ | Ceq , Undefined _ , Optional_block _ ->
987987 false_
988988 | 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 _
991991 | Cneq , Caml_block _, Number _
992992 | Cneq , Number _ , Caml_block _ ->
993993 true_
@@ -1281,36 +1281,36 @@ let is_null ?comment (x : t) = triple_equal ?comment x nil
12811281let is_undef ?comment x = triple_equal ?comment x undefined
12821282
12831283let 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
12851285
12861286let is_null_undefined ?comment (x : t ) : t =
12871287 match x.expression_desc with
1288- | Null | Undefined -> true_
1288+ | Null | Undefined _ -> true_
12891289 | Number _ | Array _ | Caml_block _ -> false_
12901290 | _ -> { comment; expression_desc = Is_null_or_undefined x }
12911291
12921292let eq_null_undefined_boolean ?comment (a : t ) (b : t ) =
12931293 match (a.expression_desc, b.expression_desc) with
1294- | ( (Null | Undefined ),
1294+ | ( (Null | Undefined _ ),
12951295 (Bool _ | Number _ | Typeof _ | Fun _ | Array _ | Caml_block _ ) ) ->
12961296 false_
12971297 | ( (Bool _ | Number _ | Typeof _ | Fun _ | Array _ | Caml_block _),
1298- (Null | Undefined ) ) ->
1298+ (Null | Undefined _ ) ) ->
12991299 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_
13021302 | _ -> { expression_desc = Bin (EqEqEq , a, b); comment }
13031303
13041304let neq_null_undefined_boolean ?comment (a : t ) (b : t ) =
13051305 match (a.expression_desc, b.expression_desc) with
1306- | ( (Null | Undefined ),
1306+ | ( (Null | Undefined _ ),
13071307 (Bool _ | Number _ | Typeof _ | Fun _ | Array _ | Caml_block _ ) ) ->
13081308 true_
13091309 | ( (Bool _ | Number _ | Typeof _ | Fun _ | Array _ | Caml_block _),
1310- (Null | Undefined ) ) ->
1310+ (Null | Undefined _ ) ) ->
13111311 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_
13141314 | _ -> { expression_desc = Bin (NotEqEq , a, b); comment }
13151315
13161316(* * TODO: in the future add a flag
0 commit comments