@@ -86507,20 +86507,17 @@ module Js_iter
86507
86507
86508
86508
open J
86509
86509
86510
- let option sub = fun v ->
86510
+ let option sub v =
86511
86511
match v with
86512
86512
| None -> ()
86513
86513
| Some v -> sub v
86514
- class iter =
86515
- object ((_self : 'self_type))
86516
- method list :
86517
- 'a. ('self_type -> 'a -> unit) -> 'a list -> unit =
86518
- fun _f_a ->
86519
- function
86520
- | [] -> ()
86521
- | _x :: _x_i1 -> _f_a _self _x ; _self#list _f_a _x_i1
86514
+ let rec list sub v =
86515
+ match v with
86516
+ | [] -> ()
86517
+ | x::xs -> sub x ; list sub xs
86518
+ class iter = object (_self : 'self_type)
86522
86519
method label : label -> unit = ignore
86523
- method required_modules : required_modules -> unit = _self#list (fun _self -> _self#module_id)
86520
+ method required_modules : required_modules -> unit = (list _self#module_id)
86524
86521
method ident : ident -> unit = ignore
86525
86522
method module_id : module_id -> unit = fun { id = _x0;kind = _x1} -> begin _self#ident _x0 end
86526
86523
method vident : vident -> unit = function
@@ -86531,7 +86528,7 @@ method vident : vident -> unit = function
86531
86528
method exception_ident : exception_ident -> unit = _self#ident
86532
86529
method for_ident : for_ident -> unit = _self#ident
86533
86530
method for_direction : for_direction -> unit = ignore
86534
- method property_map : property_map -> unit = _self# list (fun _self -> fun ( _x0,_x1) -> begin _self#expression _x1 end)
86531
+ method property_map : property_map -> unit = ( list (fun ( _x0,_x1) -> begin _self#expression _x1 end) )
86535
86532
method length_object : length_object -> unit = ignore
86536
86533
method expression_desc : expression_desc -> unit = function
86537
86534
| Length ( _x0,_x1) ->
@@ -86558,28 +86555,28 @@ method expression_desc : expression_desc -> unit = function
86558
86555
|FlatCall ( _x0,_x1) ->
86559
86556
begin _self#expression _x0;_self#expression _x1 end
86560
86557
|Call ( _x0,_x1,_x2) ->
86561
- begin _self#expression _x0;_self#list (fun _self -> _self#expression) _x1 end
86558
+ begin _self#expression _x0;(list _self#expression) _x1 end
86562
86559
|String_index ( _x0,_x1) ->
86563
86560
begin _self#expression _x0;_self#expression _x1 end
86564
86561
|Array_index ( _x0,_x1) ->
86565
86562
begin _self#expression _x0;_self#expression _x1 end
86566
86563
|Static_index ( _x0,_x1,_x2) ->
86567
86564
begin _self#expression _x0 end
86568
86565
|New ( _x0,_x1) ->
86569
- begin _self#expression _x0;option (_self# list (fun _self -> _self#expression)) _x1 end
86566
+ begin _self#expression _x0;( option (list _self#expression)) _x1 end
86570
86567
|Var ( _x0) ->
86571
86568
begin _self#vident _x0 end
86572
86569
|Fun ( _x0,_x1,_x2,_x3) ->
86573
- begin _self#list (fun _self -> _self#ident) _x1;_self#block _x2 end
86570
+ begin (list _self#ident) _x1;_self#block _x2 end
86574
86571
|Str _ -> ()
86575
86572
|Unicode _ -> ()
86576
86573
|Raw_js_code _ -> ()
86577
86574
|Array ( _x0,_x1) ->
86578
- begin _self#list (fun _self -> _self#expression) _x0 end
86575
+ begin (list _self#expression) _x0 end
86579
86576
|Optional_block ( _x0,_x1) ->
86580
86577
begin _self#expression _x0 end
86581
86578
|Caml_block ( _x0,_x1,_x2,_x3) ->
86582
- begin _self#list (fun _self -> _self#expression) _x0;_self#expression _x2 end
86579
+ begin (list _self#expression) _x0;_self#expression _x2 end
86583
86580
|Caml_block_tag ( _x0) ->
86584
86581
begin _self#expression _x0 end
86585
86582
|Number _ -> ()
@@ -86599,30 +86596,30 @@ method statement_desc : statement_desc -> unit = function
86599
86596
|If ( _x0,_x1,_x2) ->
86600
86597
begin _self#expression _x0;_self#block _x1;_self#block _x2 end
86601
86598
|While ( _x0,_x1,_x2,_x3) ->
86602
- begin option ( _self#label) _x0;_self#expression _x1;_self#block _x2 end
86599
+ begin ( option _self#label) _x0;_self#expression _x1;_self#block _x2 end
86603
86600
|ForRange ( _x0,_x1,_x2,_x3,_x4,_x5) ->
86604
- begin option ( _self#for_ident_expression) _x0;_self#finish_ident_expression _x1;_self#for_ident _x2;_self#for_direction _x3;_self#block _x4 end
86601
+ begin ( option _self#for_ident_expression) _x0;_self#finish_ident_expression _x1;_self#for_ident _x2;_self#for_direction _x3;_self#block _x4 end
86605
86602
|Continue ( _x0) ->
86606
86603
begin _self#label _x0 end
86607
86604
|Break -> ()
86608
86605
|Return ( _x0) ->
86609
86606
begin _self#expression _x0 end
86610
86607
|Int_switch ( _x0,_x1,_x2) ->
86611
- begin _self#expression _x0;_self# list (fun _self -> _self #int_clause) _x1;option ( _self#block) _x2 end
86608
+ begin _self#expression _x0;( list _self#int_clause) _x1;( option _self#block) _x2 end
86612
86609
|String_switch ( _x0,_x1,_x2) ->
86613
- begin _self#expression _x0;_self# list (fun _self -> _self #string_clause) _x1;option ( _self#block) _x2 end
86610
+ begin _self#expression _x0;( list _self#string_clause) _x1;( option _self#block) _x2 end
86614
86611
|Throw ( _x0) ->
86615
86612
begin _self#expression _x0 end
86616
86613
|Try ( _x0,_x1,_x2) ->
86617
- begin _self#block _x0;option (fun ( _x0,_x1) -> begin _self#exception_ident _x0;_self#block _x1 end) _x1;option ( _self#block) _x2 end
86614
+ begin _self#block _x0;( option (fun ( _x0,_x1) -> begin _self#exception_ident _x0;_self#block _x1 end)) _x1;( option _self#block) _x2 end
86618
86615
|Debugger -> ()
86619
86616
method expression : expression -> unit = fun { expression_desc = _x0;comment = _x1} -> begin _self#expression_desc _x0 end
86620
86617
method statement : statement -> unit = fun { statement_desc = _x0;comment = _x1} -> begin _self#statement_desc _x0 end
86621
- method variable_declaration : variable_declaration -> unit = fun { ident = _x0;value = _x1;property = _x2;ident_info = _x3} -> begin _self#ident _x0;option ( _self#expression) _x1 end
86622
- method string_clause : string_clause -> unit = fun ( _x0,_x1) -> begin _self#case_clause _x1 end
86623
- method int_clause : int_clause -> unit = fun ( _x0,_x1) -> begin _self#case_clause _x1 end
86618
+ method variable_declaration : variable_declaration -> unit = fun { ident = _x0;value = _x1;property = _x2;ident_info = _x3} -> begin _self#ident _x0;( option _self#expression) _x1 end
86619
+ method string_clause : string_clause -> unit = ( fun ( _x0,_x1) -> begin _self#case_clause _x1 end)
86620
+ method int_clause : int_clause -> unit = ( fun ( _x0,_x1) -> begin _self#case_clause _x1 end)
86624
86621
method case_clause : case_clause -> unit = fun { switch_body = _x0;should_break = _x1;comment = _x2} -> begin _self#block _x0 end
86625
- method block : block -> unit = _self#list (fun _self -> _self#statement)
86622
+ method block : block -> unit = (list _self#statement)
86626
86623
method program : program -> unit = fun { block = _x0;exports = _x1;export_set = _x2} -> begin _self#block _x0 end
86627
86624
method deps_program : deps_program -> unit = fun { program = _x0;modules = _x1;side_effect = _x2} -> begin _self#program _x0;_self#required_modules _x1 end
86628
86625
end
@@ -87065,32 +87062,28 @@ and no_side_effect (x : J.expression) =
87065
87062
87066
87063
let no_side_effect_expression (x : J.expression) = no_side_effect x
87067
87064
87068
- let no_side_effect clean : Js_iter.iter =
87065
+ let no_side_effect_obj : Js_iter.iter =
87069
87066
object (self)
87070
87067
inherit Js_iter.iter as super
87071
87068
method! statement s =
87072
- if !clean then
87073
87069
match s.statement_desc with
87074
87070
| Throw _
87075
87071
| Debugger
87076
87072
| Break
87077
87073
| Variable _
87078
87074
| Continue _ ->
87079
- clean := false
87075
+ raise_notrace Not_found
87080
87076
| Exp e -> self#expression e
87081
87077
| Int_switch _ | String_switch _ | ForRange _
87082
87078
| If _ | While _ | Block _ | Return _ | Try _ -> super#statement s
87083
- method! list f x =
87084
- if !clean then super#list f x
87085
87079
method! expression s =
87086
- if !clean then
87087
- clean := no_side_effect_expression s
87088
- (** only expression would cause side effec *)
87080
+ if not (no_side_effect_expression s) then raise_notrace Not_found
87089
87081
end
87090
87082
let no_side_effect_statement st =
87091
- let clean = ref true in
87092
- (no_side_effect clean)#statement st;
87093
- !clean
87083
+ try
87084
+ no_side_effect_obj#statement st; true
87085
+ with _ -> false
87086
+
87094
87087
87095
87088
(* TODO: generate [fold2]
87096
87089
This make sense, for example:
0 commit comments