Skip to content

Commit ecd89cb

Browse files
authored
Merge pull request #4570 from BuckleScript/refine_purity_test
refine purity analysis over raw object literals
2 parents 0195dff + 2abc2d4 commit ecd89cb

File tree

8 files changed

+291
-203
lines changed

8 files changed

+291
-203
lines changed

jscomp/core/classify_function.ml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,26 @@
2222
* along with this program; if not, write to the Free Software
2323
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *)
2424

25+
26+
let rec is_obj_literal ( x : _ Flow_ast.Expression.t) : bool =
27+
match snd x with
28+
| Literal _ -> true
29+
| Object {properties} ->
30+
Ext_list.for_all properties is_literal_kv
31+
| Array {elements} ->
32+
Ext_list.for_all elements (fun x ->
33+
match x with
34+
| None -> true
35+
| Some (Expression x) -> is_obj_literal x
36+
| Some _ -> false
37+
)
38+
| _ -> false
39+
and is_literal_kv (x : _ Flow_ast.Expression.Object.property) =
40+
match x with
41+
| Property (_ , Init {value}) -> is_obj_literal value
42+
| _ -> false
43+
44+
2545
let classify (prog : string) : Js_raw_info.exp =
2646
match Parser_flow.parse_expression
2747
(Parser_env.init_env None prog) false with
@@ -51,6 +71,8 @@ let classify (prog : string) : Js_raw_info.exp =
5171
| Some _ -> None
5272
in
5373
Js_literal {comment}
74+
| (_,Object _) as exp , _ ->
75+
if is_obj_literal exp then Js_literal {comment = None} else Js_exp_unknown
5476
| _ ->
5577
Js_exp_unknown
5678
| exception _ ->

jscomp/test/caml_compare_test.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -622,7 +622,7 @@ var suites = {
622622
(function (param) {
623623
return {
624624
TAG: /* Eq */0,
625-
_0: Caml_obj.caml_compare(({}), ({})),
625+
_0: Caml_obj.caml_compare({}, {}),
626626
_1: 0
627627
};
628628
})
@@ -633,7 +633,7 @@ var suites = {
633633
(function (param) {
634634
return {
635635
TAG: /* Eq */0,
636-
_0: Caml_obj.caml_compare(({}), ({x:1})),
636+
_0: Caml_obj.caml_compare({}, {x:1}),
637637
_1: -1
638638
};
639639
})
@@ -661,7 +661,7 @@ var suites = {
661661
(function (param) {
662662
return {
663663
TAG: /* Eq */0,
664-
_0: Caml_obj.caml_compare(({x:1}), ({x:1, y:2})),
664+
_0: Caml_obj.caml_compare({x:1}, {x:1, y:2}),
665665
_1: -1
666666
};
667667
})
@@ -672,7 +672,7 @@ var suites = {
672672
(function (param) {
673673
return {
674674
TAG: /* Eq */0,
675-
_0: Caml_obj.caml_compare(({x:1, y:2}), ({x:1})),
675+
_0: Caml_obj.caml_compare({x:1, y:2}, {x:1}),
676676
_1: 1
677677
};
678678
})
@@ -847,7 +847,7 @@ var suites = {
847847
(function (param) {
848848
return {
849849
TAG: /* Eq */0,
850-
_0: Caml_obj.caml_equal(({}), ({})),
850+
_0: Caml_obj.caml_equal({}, {}),
851851
_1: true
852852
};
853853
})
@@ -858,7 +858,7 @@ var suites = {
858858
(function (param) {
859859
return {
860860
TAG: /* Eq */0,
861-
_0: Caml_obj.caml_equal(({}), ({x:1})),
861+
_0: Caml_obj.caml_equal({}, {x:1}),
862862
_1: false
863863
};
864864
})
@@ -885,7 +885,7 @@ var suites = {
885885
(function (param) {
886886
return {
887887
TAG: /* Eq */0,
888-
_0: Caml_obj.caml_equal(({x:1}), ({x:1, y:2})),
888+
_0: Caml_obj.caml_equal({x:1}, {x:1, y:2}),
889889
_1: false
890890
};
891891
})
@@ -896,7 +896,7 @@ var suites = {
896896
(function (param) {
897897
return {
898898
TAG: /* Eq */0,
899-
_0: Caml_obj.caml_equal(({x:1, y:2}), ({x:1})),
899+
_0: Caml_obj.caml_equal({x:1, y:2}, {x:1}),
900900
_1: false
901901
};
902902
})

jscomp/test/flow_parser_reg_test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17924,7 +17924,7 @@ function parse(content, options) {
1792417924
var e = new Error(String(List.length(l._1)) + " errors");
1792517925
e["name"] = "Parse Error";
1792617926
throw(e);
17927-
return ({});
17927+
return {};
1792817928
}
1792917929
throw l;
1793017930
}

jscomp/test/name_mangle_test.js

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -106,31 +106,31 @@ function f12(x) {
106106
return x.__;
107107
}
108108

109-
eq("File \"name_mangle_test.ml\", line 85, characters 7-14", f0(({open:0})), 1);
109+
eq("File \"name_mangle_test.ml\", line 85, characters 7-14", f0({open:0}), 1);
110110

111-
eq("File \"name_mangle_test.ml\", line 86, characters 7-14", f1(({in:0})), 1);
111+
eq("File \"name_mangle_test.ml\", line 86, characters 7-14", f1({in:0}), 1);
112112

113-
eq("File \"name_mangle_test.ml\", line 87, characters 7-14", f2(({MAX_LENGTH:0})), 1);
113+
eq("File \"name_mangle_test.ml\", line 87, characters 7-14", f2({MAX_LENGTH:0}), 1);
114114

115-
eq("File \"name_mangle_test.ml\", line 88, characters 7-14", f3(({Capital:0})), 1);
115+
eq("File \"name_mangle_test.ml\", line 88, characters 7-14", f3({Capital:0}), 1);
116116

117-
eq("File \"name_mangle_test.ml\", line 89, characters 7-14", f4(({_open:0})), 1);
117+
eq("File \"name_mangle_test.ml\", line 89, characters 7-14", f4({_open:0}), 1);
118118

119-
eq("File \"name_mangle_test.ml\", line 90, characters 7-14", f5(({open:0})), 1);
119+
eq("File \"name_mangle_test.ml\", line 90, characters 7-14", f5({open:0}), 1);
120120

121-
eq("File \"name_mangle_test.ml\", line 91, characters 7-14", f6(({ "'x" :0})), 1);
121+
eq("File \"name_mangle_test.ml\", line 91, characters 7-14", f6({ "'x" :0}), 1);
122122

123-
eq("File \"name_mangle_test.ml\", line 92, characters 7-14", f7(({_Capital:0})), 1);
123+
eq("File \"name_mangle_test.ml\", line 92, characters 7-14", f7({_Capital:0}), 1);
124124

125-
eq("File \"name_mangle_test.ml\", line 93, characters 7-14", f8(({_MAX:0})), 1);
125+
eq("File \"name_mangle_test.ml\", line 93, characters 7-14", f8({_MAX:0}), 1);
126126

127-
eq("File \"name_mangle_test.ml\", line 94, characters 7-14", f9(({__:0})), 1);
127+
eq("File \"name_mangle_test.ml\", line 94, characters 7-14", f9({__:0}), 1);
128128

129-
eq("File \"name_mangle_test.ml\", line 95, characters 7-14", f10(({__x:0})), 1);
129+
eq("File \"name_mangle_test.ml\", line 95, characters 7-14", f10({__x:0}), 1);
130130

131-
eq("File \"name_mangle_test.ml\", line 96, characters 7-14", f11(({_:0})), 1);
131+
eq("File \"name_mangle_test.ml\", line 96, characters 7-14", f11({_:0}), 1);
132132

133-
eq("File \"name_mangle_test.ml\", line 97, characters 7-14", f12(({__:0})), 1);
133+
eq("File \"name_mangle_test.ml\", line 97, characters 7-14", f12({__:0}), 1);
134134

135135
Mt.from_pair_suites("File \"name_mangle_test.ml\", line 101, characters 23-30", suites.contents);
136136

jscomp/test/unsafe_ppx_test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ Mt.from_pair_suites("Unsafe_ppx_test", {
9292
return {
9393
TAG: /* Eq */0,
9494
_0: ["a"],
95-
_1: Ffi_js_test.keys(({a : 3}))
95+
_1: Ffi_js_test.keys({a : 3})
9696
};
9797
})
9898
],

0 commit comments

Comments
 (0)