Skip to content

continue simplify visitor #4917

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Jan 23, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 10 additions & 8 deletions jscomp/core/js_analyzer.ml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ let add_defined_idents (x : idents_stats) ident =
Note such shaking is done in the toplevel, so that it requires us to
flatten the statement first
*)
let super = Js_record_iter.iter
let super = Js_record_iter.super
let free_variables (stats : idents_stats) = {
super with
variable_declaration = begin fun self st ->
Expand Down Expand Up @@ -76,18 +76,20 @@ let free_variables (stats : idents_stats) = {
end
}

let init = {used_idents = Set_ident.empty;
defined_idents = Set_ident.empty}
let obj = free_variables init
let clean_up init =
init.used_idents <- Set_ident.empty;
init.defined_idents <- Set_ident.empty

let free_variables_of_statement st =
let init = {used_idents = Set_ident.empty;
defined_idents = Set_ident.empty} in
let obj = free_variables init in
clean_up init;
obj.statement obj st ;
Set_ident.diff init.used_idents init.defined_idents

let free_variables_of_expression st =
let init = {used_idents = Set_ident.empty;
defined_idents = Set_ident.empty} in
let obj = free_variables init in
clean_up init;
obj.expression obj st ;
Set_ident.diff init.used_idents init.defined_idents

Expand Down Expand Up @@ -143,7 +145,7 @@ and no_side_effect (x : J.expression) =

let no_side_effect_expression (x : J.expression) = no_side_effect x

let super = Js_record_iter.iter
let super = Js_record_iter.super
let no_side_effect_obj =
{super with
statement = (fun self s ->
Expand Down
2 changes: 1 addition & 1 deletion jscomp/core/js_fold_basic.ml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
let add_lam_module_ident = Lam_module_ident.Hash_set.add
let create = Lam_module_ident.Hash_set.create

let super = Js_record_iter.iter
let super = Js_record_iter.super
let count_hard_dependencies hard_dependencies = {
super with
module_id = begin
Expand Down
2 changes: 1 addition & 1 deletion jscomp/core/js_pass_flatten_and_mark_dead.ml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ type meta_info =
| Recursive


let super = Js_record_iter.iter
let super = Js_record_iter.super

let mark_dead_code (js : J.program) : J.program =
let ident_use_stats : meta_info Hash_ident.t
Expand Down
2 changes: 1 addition & 1 deletion jscomp/core/js_pass_get_used.ml
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ let post_process_stats my_export_set (defined_idents : J.variable_declaration Ha
since in this case it can not be global?

*)
let super = Js_record_iter.iter
let super = Js_record_iter.super
let count_collects
(* collect used status*)
(stats : int Hash_ident.t)
Expand Down
30 changes: 15 additions & 15 deletions jscomp/core/js_record_iter.ml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

open J
let unknown _ _ = ()
let option sub self = fun v ->
let [@inline] option sub self = fun v ->
match v with
| None -> ()
| Some v -> sub self v
Expand Down Expand Up @@ -38,9 +38,9 @@ program : program fn;
deps_program : deps_program fn
}
and 'a fn = iter -> 'a -> unit
let iter : iter = {
let super : iter = {
label : label fn = ( unknown ) ;
required_modules : required_modules fn = ( fun _self arg -> list ((fun _self arg -> _self.module_id _self arg)) _self arg ) ;
required_modules : required_modules fn = ( fun _self arg -> list _self.module_id _self arg ) ;
ident : ident fn = ( unknown ) ;
module_id : module_id fn = ( fun _self { id = _x0;kind = _x1} -> begin _self.ident _self _x0 end ) ;
vident : vident fn = ( fun _self -> function
Expand Down Expand Up @@ -78,28 +78,28 @@ deps_program : deps_program fn
|FlatCall ( _x0,_x1) ->
begin _self.expression _self _x0;_self.expression _self _x1 end
|Call ( _x0,_x1,_x2) ->
begin _self.expression _self _x0;list ((fun _self arg -> _self.expression _self arg)) _self _x1 end
begin _self.expression _self _x0;list _self.expression _self _x1 end
|String_index ( _x0,_x1) ->
begin _self.expression _self _x0;_self.expression _self _x1 end
|Array_index ( _x0,_x1) ->
begin _self.expression _self _x0;_self.expression _self _x1 end
|Static_index ( _x0,_x1,_x2) ->
begin _self.expression _self _x0 end
|New ( _x0,_x1) ->
begin _self.expression _self _x0;option (fun _self arg -> list ((fun _self arg -> _self.expression _self arg)) _self arg) _self _x1 end
begin _self.expression _self _x0;option (fun _self arg -> list _self.expression _self arg) _self _x1 end
|Var ( _x0) ->
begin _self.vident _self _x0 end
|Fun ( _x0,_x1,_x2,_x3) ->
begin list ((fun _self arg -> _self.ident _self arg)) _self _x1;_self.block _self _x2 end
begin list _self.ident _self _x1;_self.block _self _x2 end
|Str _ -> ()
|Unicode _ -> ()
|Raw_js_code _ -> ()
|Array ( _x0,_x1) ->
begin list ((fun _self arg -> _self.expression _self arg)) _self _x0 end
begin list _self.expression _self _x0 end
|Optional_block ( _x0,_x1) ->
begin _self.expression _self _x0 end
|Caml_block ( _x0,_x1,_x2,_x3) ->
begin list ((fun _self arg -> _self.expression _self arg)) _self _x0;_self.expression _self _x2 end
begin list _self.expression _self _x0;_self.expression _self _x2 end
|Caml_block_tag ( _x0) ->
begin _self.expression _self _x0 end
|Number _ -> ()
Expand All @@ -119,30 +119,30 @@ deps_program : deps_program fn
|If ( _x0,_x1,_x2) ->
begin _self.expression _self _x0;_self.block _self _x1;_self.block _self _x2 end
|While ( _x0,_x1,_x2,_x3) ->
begin option ((fun _self arg -> _self.label _self arg)) _self _x0;_self.expression _self _x1;_self.block _self _x2 end
begin option _self.label _self _x0;_self.expression _self _x1;_self.block _self _x2 end
|ForRange ( _x0,_x1,_x2,_x3,_x4,_x5) ->
begin option ((fun _self arg -> _self.for_ident_expression _self arg)) _self _x0;_self.finish_ident_expression _self _x1;_self.for_ident _self _x2;_self.for_direction _self _x3;_self.block _self _x4 end
begin option _self.for_ident_expression _self _x0;_self.finish_ident_expression _self _x1;_self.for_ident _self _x2;_self.for_direction _self _x3;_self.block _self _x4 end
|Continue ( _x0) ->
begin _self.label _self _x0 end
|Break -> ()
|Return ( _x0) ->
begin _self.expression _self _x0 end
|Int_switch ( _x0,_x1,_x2) ->
begin _self.expression _self _x0;list ((fun _self arg -> _self.int_clause _self arg)) _self _x1;option ((fun _self arg -> _self.block _self arg)) _self _x2 end
begin _self.expression _self _x0;list _self.int_clause _self _x1;option _self.block _self _x2 end
|String_switch ( _x0,_x1,_x2) ->
begin _self.expression _self _x0;list ((fun _self arg -> _self.string_clause _self arg)) _self _x1;option ((fun _self arg -> _self.block _self arg)) _self _x2 end
begin _self.expression _self _x0;list _self.string_clause _self _x1;option _self.block _self _x2 end
|Throw ( _x0) ->
begin _self.expression _self _x0 end
|Try ( _x0,_x1,_x2) ->
begin _self.block _self _x0;option ((fun _self (_x0,_x1) -> begin _self.exception_ident _self _x0;_self.block _self _x1 end)) _self _x1;option ((fun _self arg -> _self.block _self arg)) _self _x2 end
begin _self.block _self _x0;option ((fun _self (_x0,_x1) -> begin _self.exception_ident _self _x0;_self.block _self _x1 end)) _self _x1;option _self.block _self _x2 end
|Debugger -> () ) ;
expression : expression fn = ( fun _self { expression_desc = _x0;comment = _x1} -> begin _self.expression_desc _self _x0 end ) ;
statement : statement fn = ( fun _self { statement_desc = _x0;comment = _x1} -> begin _self.statement_desc _self _x0 end ) ;
variable_declaration : variable_declaration fn = ( fun _self { ident = _x0;value = _x1;property = _x2;ident_info = _x3} -> begin _self.ident _self _x0;option ((fun _self arg -> _self.expression _self arg)) _self _x1 end ) ;
variable_declaration : variable_declaration fn = ( fun _self { ident = _x0;value = _x1;property = _x2;ident_info = _x3} -> begin _self.ident _self _x0;option _self.expression _self _x1 end ) ;
string_clause : string_clause fn = ( (fun _self (_x0,_x1) -> begin _self.case_clause _self _x1 end) ) ;
int_clause : int_clause fn = ( (fun _self (_x0,_x1) -> begin _self.case_clause _self _x1 end) ) ;
case_clause : case_clause fn = ( fun _self { switch_body = _x0;should_break = _x1;comment = _x2} -> begin _self.block _self _x0 end ) ;
block : block fn = ( fun _self arg -> list ((fun _self arg -> _self.statement _self arg)) _self arg ) ;
block : block fn = ( fun _self arg -> list _self.statement _self arg ) ;
program : program fn = ( fun _self { block = _x0;exports = _x1;export_set = _x2} -> begin _self.block _self _x0 end ) ;
deps_program : deps_program fn = ( fun _self { program = _x0;modules = _x1;side_effect = _x2} -> begin _self.program _self _x0;_self.required_modules _self _x1 end )
}
Expand Down
32 changes: 16 additions & 16 deletions jscomp/core/js_record_map.ml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

open J
let [@inline] unknown _ x = x
let option sub self = fun v ->
let [@inline] option sub self = fun v ->
match v with
| None -> None
| Some v -> Some (sub self v)
Expand Down Expand Up @@ -40,7 +40,7 @@ deps_program : deps_program fn
and 'a fn = iter -> 'a -> 'a
let super : iter = {
label : label fn = ( unknown ) ;
required_modules : required_modules fn = ( fun _self arg -> list ((fun _self arg -> _self.module_id _self arg)) _self arg ) ;
required_modules : required_modules fn = ( fun _self arg -> list _self.module_id _self arg ) ;
ident : ident fn = ( unknown ) ;
module_id : module_id fn = ( fun _self { id = _x0;kind = _x1} -> begin let _x0 = _self.ident _self _x0 in {id = _x0;kind = _x1} end ) ;
vident : vident fn = ( fun _self -> function
Expand Down Expand Up @@ -86,7 +86,7 @@ let _x2 = _self.expression _self _x2 in Bin ( _x0,_x1,_x2) end
let _x1 = _self.expression _self _x1 in FlatCall ( _x0,_x1) end
|Call ( _x0,_x1,_x2) ->
begin let _x0 = _self.expression _self _x0 in
let _x1 = list ((fun _self arg -> _self.expression _self arg)) _self _x1 in Call ( _x0,_x1,_x2) end
let _x1 = list _self.expression _self _x1 in Call ( _x0,_x1,_x2) end
|String_index ( _x0,_x1) ->
begin let _x0 = _self.expression _self _x0 in
let _x1 = _self.expression _self _x1 in String_index ( _x0,_x1) end
Expand All @@ -97,21 +97,21 @@ let _x1 = _self.expression _self _x1 in Array_index ( _x0,_x1) end
begin let _x0 = _self.expression _self _x0 in Static_index ( _x0,_x1,_x2) end
|New ( _x0,_x1) ->
begin let _x0 = _self.expression _self _x0 in
let _x1 = option (fun _self arg -> list ((fun _self arg -> _self.expression _self arg)) _self arg) _self _x1 in New ( _x0,_x1) end
let _x1 = option (fun _self arg -> list _self.expression _self arg) _self _x1 in New ( _x0,_x1) end
|Var ( _x0) ->
begin let _x0 = _self.vident _self _x0 in Var ( _x0) end
|Fun ( _x0,_x1,_x2,_x3) ->
begin let _x1 = list ((fun _self arg -> _self.ident _self arg)) _self _x1 in
begin let _x1 = list _self.ident _self _x1 in
let _x2 = _self.block _self _x2 in Fun ( _x0,_x1,_x2,_x3) end
|Str _ as v -> v
|Unicode _ as v -> v
|Raw_js_code _ as v -> v
|Array ( _x0,_x1) ->
begin let _x0 = list ((fun _self arg -> _self.expression _self arg)) _self _x0 in Array ( _x0,_x1) end
begin let _x0 = list _self.expression _self _x0 in Array ( _x0,_x1) end
|Optional_block ( _x0,_x1) ->
begin let _x0 = _self.expression _self _x0 in Optional_block ( _x0,_x1) end
|Caml_block ( _x0,_x1,_x2,_x3) ->
begin let _x0 = list ((fun _self arg -> _self.expression _self arg)) _self _x0 in
begin let _x0 = list _self.expression _self _x0 in
let _x2 = _self.expression _self _x2 in Caml_block ( _x0,_x1,_x2,_x3) end
|Caml_block_tag ( _x0) ->
begin let _x0 = _self.expression _self _x0 in Caml_block_tag ( _x0) end
Expand All @@ -134,11 +134,11 @@ let _x2 = _self.expression _self _x2 in Caml_block ( _x0,_x1,_x2,_x3) end
let _x1 = _self.block _self _x1 in
let _x2 = _self.block _self _x2 in If ( _x0,_x1,_x2) end
|While ( _x0,_x1,_x2,_x3) ->
begin let _x0 = option ((fun _self arg -> _self.label _self arg)) _self _x0 in
begin let _x0 = option _self.label _self _x0 in
let _x1 = _self.expression _self _x1 in
let _x2 = _self.block _self _x2 in While ( _x0,_x1,_x2,_x3) end
|ForRange ( _x0,_x1,_x2,_x3,_x4,_x5) ->
begin let _x0 = option ((fun _self arg -> _self.for_ident_expression _self arg)) _self _x0 in
begin let _x0 = option _self.for_ident_expression _self _x0 in
let _x1 = _self.finish_ident_expression _self _x1 in
let _x2 = _self.for_ident _self _x2 in
let _x3 = _self.for_direction _self _x3 in
Expand All @@ -150,27 +150,27 @@ let _x4 = _self.block _self _x4 in ForRange ( _x0,_x1,_x2,_x3,_x4,_x5) end
begin let _x0 = _self.expression _self _x0 in Return ( _x0) end
|Int_switch ( _x0,_x1,_x2) ->
begin let _x0 = _self.expression _self _x0 in
let _x1 = list ((fun _self arg -> _self.int_clause _self arg)) _self _x1 in
let _x2 = option ((fun _self arg -> _self.block _self arg)) _self _x2 in Int_switch ( _x0,_x1,_x2) end
let _x1 = list _self.int_clause _self _x1 in
let _x2 = option _self.block _self _x2 in Int_switch ( _x0,_x1,_x2) end
|String_switch ( _x0,_x1,_x2) ->
begin let _x0 = _self.expression _self _x0 in
let _x1 = list ((fun _self arg -> _self.string_clause _self arg)) _self _x1 in
let _x2 = option ((fun _self arg -> _self.block _self arg)) _self _x2 in String_switch ( _x0,_x1,_x2) end
let _x1 = list _self.string_clause _self _x1 in
let _x2 = option _self.block _self _x2 in String_switch ( _x0,_x1,_x2) end
|Throw ( _x0) ->
begin let _x0 = _self.expression _self _x0 in Throw ( _x0) end
|Try ( _x0,_x1,_x2) ->
begin let _x0 = _self.block _self _x0 in
let _x1 = option ((fun _self (_x0,_x1) -> begin let _x0 = _self.exception_ident _self _x0 in let _x1 = _self.block _self _x1 in (_x0,_x1) end)) _self _x1 in
let _x2 = option ((fun _self arg -> _self.block _self arg)) _self _x2 in Try ( _x0,_x1,_x2) end
let _x2 = option _self.block _self _x2 in Try ( _x0,_x1,_x2) end
|Debugger as v -> v ) ;
expression : expression fn = ( fun _self { expression_desc = _x0;comment = _x1} -> begin let _x0 = _self.expression_desc _self _x0 in {expression_desc = _x0;comment = _x1} end ) ;
statement : statement fn = ( fun _self { statement_desc = _x0;comment = _x1} -> begin let _x0 = _self.statement_desc _self _x0 in {statement_desc = _x0;comment = _x1} end ) ;
variable_declaration : variable_declaration fn = ( fun _self { ident = _x0;value = _x1;property = _x2;ident_info = _x3} -> begin let _x0 = _self.ident _self _x0 in
let _x1 = option ((fun _self arg -> _self.expression _self arg)) _self _x1 in {ident = _x0;value = _x1;property = _x2;ident_info = _x3} end ) ;
let _x1 = option _self.expression _self _x1 in {ident = _x0;value = _x1;property = _x2;ident_info = _x3} end ) ;
string_clause : string_clause fn = ( (fun _self (_x0,_x1) -> begin let _x1 = _self.case_clause _self _x1 in (_x0,_x1) end) ) ;
int_clause : int_clause fn = ( (fun _self (_x0,_x1) -> begin let _x1 = _self.case_clause _self _x1 in (_x0,_x1) end) ) ;
case_clause : case_clause fn = ( fun _self { switch_body = _x0;should_break = _x1;comment = _x2} -> begin let _x0 = _self.block _self _x0 in {switch_body = _x0;should_break = _x1;comment = _x2} end ) ;
block : block fn = ( fun _self arg -> list ((fun _self arg -> _self.statement _self arg)) _self arg ) ;
block : block fn = ( fun _self arg -> list _self.statement _self arg ) ;
program : program fn = ( fun _self { block = _x0;exports = _x1;export_set = _x2} -> begin let _x0 = _self.block _self _x0 in {block = _x0;exports = _x1;export_set = _x2} end ) ;
deps_program : deps_program fn = ( fun _self { program = _x0;modules = _x1;side_effect = _x2} -> begin let _x0 = _self.program _self _x0 in
let _x1 = _self.required_modules _self _x1 in {program = _x0;modules = _x1;side_effect = _x2} end )
Expand Down
Loading