Skip to content

Commit 968a54e

Browse files
committed
finish the fold generator
1 parent 466b70e commit 968a54e

File tree

14 files changed

+396
-27
lines changed

14 files changed

+396
-27
lines changed

jscomp/core/js_record_fold.ml

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
2+
open J
3+
let [@inline] unknown _ st _ = st
4+
let [@inline] option sub self st = fun v ->
5+
match v with
6+
| None -> st
7+
| Some v -> sub self st v
8+
let rec list sub self st = fun x ->
9+
match x with
10+
| [] -> st
11+
| x::xs ->
12+
let st = sub self st x in
13+
list sub self st xs
14+
15+
type 'state iter = {
16+
ident : ('state,ident) fn;
17+
module_id : ('state,module_id) fn;
18+
vident : ('state,vident) fn;
19+
expression : ('state,expression) fn;
20+
statement : ('state,statement) fn;
21+
variable_declaration : ('state,variable_declaration) fn;
22+
block : ('state,block) fn;
23+
program : ('state,program) fn
24+
}
25+
and ('state,'a) fn = 'state iter -> 'state -> 'a -> 'state
26+
let label : 'a . ('a,label) fn = unknown
27+
let ident : 'a . ('a,ident) fn = unknown
28+
let module_id : 'a . ('a,module_id) fn = fun _self st { id = _x0;kind = _x1} -> let st = _self.ident _self st _x0 in st
29+
let required_modules : 'a . ('a,required_modules) fn = fun _self st arg -> list _self.module_id _self st arg
30+
let vident : 'a . ('a,vident) fn = fun _self st -> function
31+
| Id ( _x0) ->
32+
let st = _self.ident _self st _x0 in st
33+
|Qualified ( _x0,_x1) ->
34+
let st = _self.module_id _self st _x0 in st
35+
let exception_ident : 'a . ('a,exception_ident) fn = (fun _self arg -> _self.ident _self arg)
36+
let for_ident : 'a . ('a,for_ident) fn = (fun _self arg -> _self.ident _self arg)
37+
let for_direction : 'a . ('a,for_direction) fn = unknown
38+
let property_map : 'a . ('a,property_map) fn = fun _self st arg -> list ((fun _self st (_x0,_x1) -> let st = _self.expression _self st _x1 in st )) _self st arg
39+
let length_object : 'a . ('a,length_object) fn = unknown
40+
let expression_desc : 'a . ('a,expression_desc) fn = fun _self st -> function
41+
| Length ( _x0,_x1) ->
42+
let st = _self.expression _self st _x0 in let st = length_object _self st _x1 in st
43+
|Char_of_int ( _x0) ->
44+
let st = _self.expression _self st _x0 in st
45+
|Char_to_int ( _x0) ->
46+
let st = _self.expression _self st _x0 in st
47+
|Is_null_or_undefined ( _x0) ->
48+
let st = _self.expression _self st _x0 in st
49+
|String_append ( _x0,_x1) ->
50+
let st = _self.expression _self st _x0 in let st = _self.expression _self st _x1 in st
51+
|Bool _ -> st
52+
|Typeof ( _x0) ->
53+
let st = _self.expression _self st _x0 in st
54+
|Js_not ( _x0) ->
55+
let st = _self.expression _self st _x0 in st
56+
|Seq ( _x0,_x1) ->
57+
let st = _self.expression _self st _x0 in let st = _self.expression _self st _x1 in st
58+
|Cond ( _x0,_x1,_x2) ->
59+
let st = _self.expression _self st _x0 in let st = _self.expression _self st _x1 in let st = _self.expression _self st _x2 in st
60+
|Bin ( _x0,_x1,_x2) ->
61+
let st = _self.expression _self st _x1 in let st = _self.expression _self st _x2 in st
62+
|FlatCall ( _x0,_x1) ->
63+
let st = _self.expression _self st _x0 in let st = _self.expression _self st _x1 in st
64+
|Call ( _x0,_x1,_x2) ->
65+
let st = _self.expression _self st _x0 in let st = list _self.expression _self st _x1 in st
66+
|String_index ( _x0,_x1) ->
67+
let st = _self.expression _self st _x0 in let st = _self.expression _self st _x1 in st
68+
|Array_index ( _x0,_x1) ->
69+
let st = _self.expression _self st _x0 in let st = _self.expression _self st _x1 in st
70+
|Static_index ( _x0,_x1,_x2) ->
71+
let st = _self.expression _self st _x0 in st
72+
|New ( _x0,_x1) ->
73+
let st = _self.expression _self st _x0 in let st = option (fun _self st arg -> list _self.expression _self st arg) _self st _x1 in st
74+
|Var ( _x0) ->
75+
let st = _self.vident _self st _x0 in st
76+
|Fun ( _x0,_x1,_x2,_x3) ->
77+
let st = list _self.ident _self st _x1 in let st = _self.block _self st _x2 in st
78+
|Str _ -> st
79+
|Unicode _ -> st
80+
|Raw_js_code _ -> st
81+
|Array ( _x0,_x1) ->
82+
let st = list _self.expression _self st _x0 in st
83+
|Optional_block ( _x0,_x1) ->
84+
let st = _self.expression _self st _x0 in st
85+
|Caml_block ( _x0,_x1,_x2,_x3) ->
86+
let st = list _self.expression _self st _x0 in let st = _self.expression _self st _x2 in st
87+
|Caml_block_tag ( _x0) ->
88+
let st = _self.expression _self st _x0 in st
89+
|Number _ -> st
90+
|Object ( _x0) ->
91+
let st = property_map _self st _x0 in st
92+
|Undefined -> st
93+
|Null -> st
94+
let for_ident_expression : 'a . ('a,for_ident_expression) fn = (fun _self arg -> _self.expression _self arg)
95+
let finish_ident_expression : 'a . ('a,finish_ident_expression) fn = (fun _self arg -> _self.expression _self arg)
96+
let case_clause : 'a . ('a,case_clause) fn = fun _self st { switch_body = _x0;should_break = _x1;comment = _x2} -> let st = _self.block _self st _x0 in st
97+
let string_clause : 'a . ('a,string_clause) fn = (fun _self st (_x0,_x1) -> let st = case_clause _self st _x1 in st )
98+
let int_clause : 'a . ('a,int_clause) fn = (fun _self st (_x0,_x1) -> let st = case_clause _self st _x1 in st )
99+
let statement_desc : 'a . ('a,statement_desc) fn = fun _self st -> function
100+
| Block ( _x0) ->
101+
let st = _self.block _self st _x0 in st
102+
|Variable ( _x0) ->
103+
let st = _self.variable_declaration _self st _x0 in st
104+
|Exp ( _x0) ->
105+
let st = _self.expression _self st _x0 in st
106+
|If ( _x0,_x1,_x2) ->
107+
let st = _self.expression _self st _x0 in let st = _self.block _self st _x1 in let st = _self.block _self st _x2 in st
108+
|While ( _x0,_x1,_x2,_x3) ->
109+
let st = option label _self st _x0 in let st = _self.expression _self st _x1 in let st = _self.block _self st _x2 in st
110+
|ForRange ( _x0,_x1,_x2,_x3,_x4,_x5) ->
111+
let st = option for_ident_expression _self st _x0 in let st = finish_ident_expression _self st _x1 in let st = for_ident _self st _x2 in let st = for_direction _self st _x3 in let st = _self.block _self st _x4 in st
112+
|Continue ( _x0) ->
113+
let st = label _self st _x0 in st
114+
|Break -> st
115+
|Return ( _x0) ->
116+
let st = _self.expression _self st _x0 in st
117+
|Int_switch ( _x0,_x1,_x2) ->
118+
let st = _self.expression _self st _x0 in let st = list int_clause _self st _x1 in let st = option _self.block _self st _x2 in st
119+
|String_switch ( _x0,_x1,_x2) ->
120+
let st = _self.expression _self st _x0 in let st = list string_clause _self st _x1 in let st = option _self.block _self st _x2 in st
121+
|Throw ( _x0) ->
122+
let st = _self.expression _self st _x0 in st
123+
|Try ( _x0,_x1,_x2) ->
124+
let st = _self.block _self st _x0 in let st = option ((fun _self st (_x0,_x1) -> let st = exception_ident _self st _x0 in let st = _self.block _self st _x1 in st )) _self st _x1 in let st = option _self.block _self st _x2 in st
125+
|Debugger -> st
126+
let expression : 'a . ('a,expression) fn = fun _self st { expression_desc = _x0;comment = _x1} -> let st = expression_desc _self st _x0 in st
127+
let statement : 'a . ('a,statement) fn = fun _self st { statement_desc = _x0;comment = _x1} -> let st = statement_desc _self st _x0 in st
128+
let variable_declaration : 'a . ('a,variable_declaration) fn = fun _self st { ident = _x0;value = _x1;property = _x2;ident_info = _x3} -> let st = _self.ident _self st _x0 in let st = option _self.expression _self st _x1 in st
129+
let block : 'a . ('a,block) fn = fun _self st arg -> list _self.statement _self st arg
130+
let program : 'a . ('a,program) fn = fun _self st { block = _x0;exports = _x1;export_set = _x2} -> let st = _self.block _self st _x0 in st
131+
let deps_program : 'a . ('a,deps_program) fn = fun _self st { program = _x0;modules = _x1;side_effect = _x2} -> let st = _self.program _self st _x0 in let st = required_modules _self st _x1 in st
132+
let super : 'state iter = {
133+
ident;
134+
module_id;
135+
vident;
136+
expression;
137+
statement;
138+
variable_declaration;
139+
block;
140+
program
141+
}
142+

jscomp/ext/ext_pervasives.mli

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ external reraise: exn -> 'a = "%reraise"
3636

3737
val finally :
3838
'a ->
39-
clean:('a -> 'c) ->
39+
clean:('a -> unit) ->
4040
('a -> 'b) -> 'b
4141

4242
(* val try_it : (unit -> 'a) -> unit *)

jscomp/ounit/oUnit.ml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ let assert_command
262262

263263
let raises f =
264264
try
265-
f ();
265+
ignore (f ());
266266
None
267267
with e ->
268268
Some e
@@ -462,7 +462,7 @@ let maybe_backtrace = ""
462462
let perform_test report test =
463463
let run_test_case f path =
464464
try
465-
f ();
465+
ignore(f ());
466466
RSuccess path
467467
with
468468
| Failure s ->
@@ -496,11 +496,11 @@ let perform_test report test =
496496
let test_cases = List.rev (flatten_test [] [] test) in
497497
let runner (path, f) =
498498
let result =
499-
report (EStart path);
499+
ignore @@ report (EStart path);
500500
run_test_case f path
501501
in
502-
report (EResult result);
503-
report (EEnd path);
502+
ignore @@ report (EResult result);
503+
ignore @@ report (EEnd path);
504504
result
505505
in
506506
let rec iter state =

lib/4.06.1/bsb.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4993,7 +4993,7 @@ external reraise: exn -> 'a = "%reraise"
49934993

49944994
val finally :
49954995
'a ->
4996-
clean:('a -> 'c) ->
4996+
clean:('a -> unit) ->
49974997
('a -> 'b) -> 'b
49984998

49994999
(* val try_it : (unit -> 'a) -> unit *)

lib/4.06.1/bsb_helper.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ external reraise: exn -> 'a = "%reraise"
3838

3939
val finally :
4040
'a ->
41-
clean:('a -> 'c) ->
41+
clean:('a -> unit) ->
4242
('a -> 'b) -> 'b
4343

4444
(* val try_it : (unit -> 'a) -> unit *)

lib/4.06.1/unstable/all_ounit_tests.ml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -888,7 +888,7 @@ let assert_command
888888

889889
let raises f =
890890
try
891-
f ();
891+
ignore (f ());
892892
None
893893
with e ->
894894
Some e
@@ -1088,7 +1088,7 @@ let maybe_backtrace = ""
10881088
let perform_test report test =
10891089
let run_test_case f path =
10901090
try
1091-
f ();
1091+
ignore(f ());
10921092
RSuccess path
10931093
with
10941094
| Failure s ->
@@ -1122,11 +1122,11 @@ let perform_test report test =
11221122
let test_cases = List.rev (flatten_test [] [] test) in
11231123
let runner (path, f) =
11241124
let result =
1125-
report (EStart path);
1125+
ignore @@ report (EStart path);
11261126
run_test_case f path
11271127
in
1128-
report (EResult result);
1129-
report (EEnd path);
1128+
ignore @@ report (EResult result);
1129+
ignore @@ report (EEnd path);
11301130
result
11311131
in
11321132
let rec iter state =
@@ -5641,7 +5641,7 @@ external reraise: exn -> 'a = "%reraise"
56415641

56425642
val finally :
56435643
'a ->
5644-
clean:('a -> 'c) ->
5644+
clean:('a -> unit) ->
56455645
('a -> 'b) -> 'b
56465646

56475647
(* val try_it : (unit -> 'a) -> unit *)

lib/4.06.1/unstable/bspack.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10553,7 +10553,7 @@ external reraise: exn -> 'a = "%reraise"
1055310553

1055410554
val finally :
1055510555
'a ->
10556-
clean:('a -> 'c) ->
10556+
clean:('a -> unit) ->
1055710557
('a -> 'b) -> 'b
1055810558

1055910559
(* val try_it : (unit -> 'a) -> unit *)

lib/4.06.1/unstable/js_compiler.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81801,7 +81801,7 @@ external reraise: exn -> 'a = "%reraise"
8180181801

8180281802
val finally :
8180381803
'a ->
81804-
clean:('a -> 'c) ->
81804+
clean:('a -> unit) ->
8180581805
('a -> 'b) -> 'b
8180681806

8180781807
(* val try_it : (unit -> 'a) -> unit *)

lib/4.06.1/unstable/js_refmt_compiler.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81801,7 +81801,7 @@ external reraise: exn -> 'a = "%reraise"
8180181801

8180281802
val finally :
8180381803
'a ->
81804-
clean:('a -> 'c) ->
81804+
clean:('a -> unit) ->
8180581805
('a -> 'b) -> 'b
8180681806

8180781807
(* val try_it : (unit -> 'a) -> unit *)

lib/4.06.1/whole_compiler.ml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365990,7 +365990,7 @@ external reraise: exn -> 'a = "%reraise"
365990365990

365991365991
val finally :
365992365992
'a ->
365993-
clean:('a -> 'c) ->
365993+
clean:('a -> unit) ->
365994365994
('a -> 'b) -> 'b
365995365995

365996365996
(* val try_it : (unit -> 'a) -> unit *)

0 commit comments

Comments
 (0)