diff --git a/jscomp/core/js_analyzer.ml b/jscomp/core/js_analyzer.ml index 62ed998a1e..7e98c34748 100644 --- a/jscomp/core/js_analyzer.ml +++ b/jscomp/core/js_analyzer.ml @@ -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 -> @@ -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 @@ -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 -> diff --git a/jscomp/core/js_fold_basic.ml b/jscomp/core/js_fold_basic.ml index 0309482b31..dce8cdf258 100644 --- a/jscomp/core/js_fold_basic.ml +++ b/jscomp/core/js_fold_basic.ml @@ -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 diff --git a/jscomp/core/js_pass_flatten_and_mark_dead.ml b/jscomp/core/js_pass_flatten_and_mark_dead.ml index 9e42be6c58..8297908fc6 100644 --- a/jscomp/core/js_pass_flatten_and_mark_dead.ml +++ b/jscomp/core/js_pass_flatten_and_mark_dead.ml @@ -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 diff --git a/jscomp/core/js_pass_get_used.ml b/jscomp/core/js_pass_get_used.ml index 424b3999fe..69ae7e1643 100644 --- a/jscomp/core/js_pass_get_used.ml +++ b/jscomp/core/js_pass_get_used.ml @@ -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) diff --git a/jscomp/core/js_record_iter.ml b/jscomp/core/js_record_iter.ml index 016bf63361..21bb1cdf9b 100644 --- a/jscomp/core/js_record_iter.ml +++ b/jscomp/core/js_record_iter.ml @@ -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 @@ -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 @@ -78,7 +78,7 @@ 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) -> @@ -86,20 +86,20 @@ deps_program : deps_program fn |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 _ -> () @@ -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 ) } diff --git a/jscomp/core/js_record_map.ml b/jscomp/core/js_record_map.ml index c58402dd64..9f18a7d1d5 100644 --- a/jscomp/core/js_record_map.ml +++ b/jscomp/core/js_record_map.ml @@ -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) @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 ) diff --git a/lib/4.06.1/unstable/js_compiler.ml b/lib/4.06.1/unstable/js_compiler.ml index 52fd7f47a1..85cf3d3245 100644 --- a/lib/4.06.1/unstable/js_compiler.ml +++ b/lib/4.06.1/unstable/js_compiler.ml @@ -86710,7 +86710,7 @@ module Js_record_iter 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 @@ -86747,9 +86747,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 @@ -86787,7 +86787,7 @@ 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) -> @@ -86795,20 +86795,20 @@ deps_program : deps_program fn |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 _ -> () @@ -86828,30 +86828,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 ) } @@ -86996,7 +86996,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 -> @@ -87028,18 +87028,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 @@ -87095,7 +87097,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 -> @@ -99167,7 +99169,7 @@ end = struct 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 @@ -101396,7 +101398,7 @@ module Js_record_map 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) @@ -101435,7 +101437,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 @@ -101481,7 +101483,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 @@ -101492,21 +101494,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 @@ -101529,11 +101531,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 @@ -101545,27 +101547,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 ) @@ -101805,7 +101807,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 @@ -102675,7 +102677,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) diff --git a/lib/4.06.1/unstable/js_refmt_compiler.ml b/lib/4.06.1/unstable/js_refmt_compiler.ml index 68c6912f6e..617a075f96 100644 --- a/lib/4.06.1/unstable/js_refmt_compiler.ml +++ b/lib/4.06.1/unstable/js_refmt_compiler.ml @@ -86710,7 +86710,7 @@ module Js_record_iter 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 @@ -86747,9 +86747,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 @@ -86787,7 +86787,7 @@ 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) -> @@ -86795,20 +86795,20 @@ deps_program : deps_program fn |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 _ -> () @@ -86828,30 +86828,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 ) } @@ -86996,7 +86996,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 -> @@ -87028,18 +87028,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 @@ -87095,7 +87097,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 -> @@ -99167,7 +99169,7 @@ end = struct 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 @@ -101396,7 +101398,7 @@ module Js_record_map 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) @@ -101435,7 +101437,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 @@ -101481,7 +101483,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 @@ -101492,21 +101494,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 @@ -101529,11 +101531,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 @@ -101545,27 +101547,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 ) @@ -101805,7 +101807,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 @@ -102675,7 +102677,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) diff --git a/lib/4.06.1/whole_compiler.ml b/lib/4.06.1/whole_compiler.ml index b7cac15ec5..c1191275fe 100644 --- a/lib/4.06.1/whole_compiler.ml +++ b/lib/4.06.1/whole_compiler.ml @@ -376589,7 +376589,7 @@ module Js_record_iter 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 @@ -376626,9 +376626,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 @@ -376666,7 +376666,7 @@ 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) -> @@ -376674,20 +376674,20 @@ deps_program : deps_program fn |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 _ -> () @@ -376707,30 +376707,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 ) } @@ -376875,7 +376875,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 -> @@ -376907,18 +376907,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 @@ -376974,7 +376976,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 -> @@ -381661,7 +381663,7 @@ end = struct 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 @@ -383890,7 +383892,7 @@ module Js_record_map 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) @@ -383929,7 +383931,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 @@ -383975,7 +383977,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 @@ -383986,21 +383988,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 @@ -384023,11 +384025,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 @@ -384039,27 +384041,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 ) @@ -384299,7 +384301,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 @@ -385169,7 +385171,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) diff --git a/ocaml-tree/record_iter.js b/ocaml-tree/record_iter.js index 77a9c1a67a..57de5136dc 100644 --- a/ocaml-tree/record_iter.js +++ b/ocaml-tree/record_iter.js @@ -56,7 +56,14 @@ function mkBody(def, allNames) { throw new Error(`unkonwn ${def.type}`); } } +/** + * @typedef { { eta: string; beta(x: string): string; method? : string } } Obj + * + */ +/** + * @type {Obj} + */ var skip_obj = { eta: skip, /** @@ -76,7 +83,6 @@ var skip_obj = { * The code fragments should have two operations * - eta-expanded * needed due to `self` is missing - * @typedef {typeof skip_obj} Obj * @returns {Obj} */ function mkStructuralTy(def, allNames) { @@ -90,6 +96,7 @@ function mkStructuralTy(def, allNames) { beta(x) { return `${code} _self ${x}`; }, + method: code, }; } return skip_obj; @@ -104,10 +111,14 @@ function mkStructuralTy(def, allNames) { return skip_obj; } // return `${list.text} (${inner})`; + var inner_code = inner.method; + if (inner_code === undefined) { + inner_code = `(${inner.eta})`; + } return { - eta: `fun _self arg -> ${list.text} (${inner.eta}) _self arg`, + eta: `fun _self arg -> ${list.text} ${inner_code} _self arg`, beta(x) { - return `${list.text} (${inner.eta}) _self ${x}`; + return `${list.text} ${inner_code} _self ${x}`; }, }; default: @@ -186,7 +197,7 @@ function make(typedefs) { var o = ` 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 @@ -201,7 +212,7 @@ function make(typedefs) { ${customNames.map((x) => `${x} : ${x} fn`).join(";\n")} } and 'a fn = iter -> 'a -> unit - let iter : iter = { + let super : iter = { ${output.join(";\n")} } `; diff --git a/ocaml-tree/record_map.js b/ocaml-tree/record_map.js index 8868d52b85..62201ce547 100644 --- a/ocaml-tree/record_map.js +++ b/ocaml-tree/record_map.js @@ -59,6 +59,14 @@ function mkBody(def, allNames) { } } +/** + * @typedef { { eta: string; beta(x: string): string; method? : string } } Obj + * + */ + +/** + * @type {Obj} + */ var skip_obj = { eta: skip, /** @@ -78,7 +86,6 @@ var skip_obj = { * The code fragments should have two operations * - eta-expanded * needed due to `self` is missing - * @typedef {typeof skip_obj} Obj * @returns {Obj} */ function mkStructuralTy(def, allNames) { @@ -92,6 +99,7 @@ function mkStructuralTy(def, allNames) { beta(x) { return `let ${x} = ${code} _self ${x} in `; }, + method: code, }; } return skip_obj; @@ -105,11 +113,15 @@ function mkStructuralTy(def, allNames) { if (inner === skip_obj) { return skip_obj; } + var inner_code = inner.method; + if (inner_code === undefined) { + inner_code = `(${inner.eta})`; + } // return `${list.text} (${inner})`; return { - eta: `fun _self arg -> ${list.text} (${inner.eta}) _self arg`, + eta: `fun _self arg -> ${list.text} ${inner_code} _self arg`, beta(x) { - return `let ${x} = ${list.text} (${inner.eta}) _self ${x} in `; + return `let ${x} = ${list.text} ${inner_code} _self ${x} in `; }, }; default: @@ -121,7 +133,9 @@ function mkStructuralTy(def, allNames) { var body = args .map((x, i) => mkBodyApply(def.children[i], allNames, x)) .filter(Boolean); - var snippet = `(${args.join(",")}) -> begin ${body.join(" ")} (${args.join(",")}) end`; + var snippet = `(${args.join(",")}) -> begin ${body.join( + " " + )} (${args.join(",")}) end`; return { eta: `(fun _self ${snippet})`, beta(x) { @@ -188,7 +202,7 @@ function make(typedefs) { var o = ` 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) diff --git a/ocaml-tree/wasm.js b/ocaml-tree/wasm.js index e3b1769b2c..e6179d0732 100644 --- a/ocaml-tree/wasm.js +++ b/ocaml-tree/wasm.js @@ -19,6 +19,12 @@ for (let i = 0; i < process.argv.length; ++i) { case "-iter": mode = "iter"; break; + case "-record-iter": + mode = "record-iter"; + break; + case "-record-map": + mode = "record-map"; + break; case "-i": ++i; input = process.argv[i]; @@ -34,6 +40,8 @@ var node_types = require("./node_types"); var map_maker = require("./map_maker"); var fold_maker = require("./fold_maker"); var iter_maker = require("./iter_maker"); +var record_iter = require("./record_iter"); +var record_map = require("./record_map"); // var p = new P() (async () => { await P.init(); @@ -52,5 +60,11 @@ var iter_maker = require("./iter_maker"); case "iter": fs.writeFileSync(output, iter_maker.make(typedefs), "utf8"); break; + case "record-iter": + fs.writeFileSync(output, record_iter.make(typedefs), "utf8"); + break; + case "record-map": + fs.writeFileSync(output, record_map.make(typedefs), "utf8"); + break; } })(); diff --git a/scripts/ninja.js b/scripts/ninja.js index d4cf86dbbf..cf223a1ba9 100755 --- a/scripts/ninja.js +++ b/scripts/ninja.js @@ -1586,6 +1586,11 @@ o core/js_map.ml: p4of core/j.ml flags = -map o core/js_iter.ml: p4of core/j.ml flags = -iter +o core/js_record_iter.ml: p4of core/j.ml + flags = -record-iter +o core/js_record_map.ml: p4of core/j.ml + flags = -record-map + o common/bs_version.ml : mk_bsversion build_version.js ../package.json o ../${