Skip to content

Commit b85a53d

Browse files
committed
avoid using functional objects
1 parent bea7cad commit b85a53d

File tree

4 files changed

+48
-43
lines changed

4 files changed

+48
-43
lines changed

jscomp/core/js_analyzer.ml

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -130,33 +130,33 @@ and no_side_effect (x : J.expression) =
130130

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

133-
let no_side_effect clean =
133+
let no_side_effect clean : Js_fold.fold =
134134
object (self)
135135
inherit Js_fold.fold as super
136-
val no_side_effect = clean
137-
method get_no_side_effect = no_side_effect
138-
139136
method! statement s =
140-
if not no_side_effect then self else
137+
if not !clean then self else
141138
match s.statement_desc with
142139
| Throw _
143140
| Debugger
144141
| Break
145142
| Variable _
146143
| Continue _ ->
147-
{< no_side_effect = false>}
144+
clean := false ; self
148145
| Exp e -> self#expression e
149146
| Int_switch _ | String_switch _ | ForRange _
150147
| If _ | While _ | Block _ | Return _ | Try _ -> super#statement s
151148
method! list f x =
152-
if not self#get_no_side_effect then self else super#list f x
149+
if not !clean then self else super#list f x
153150
method! expression s =
154-
if not no_side_effect then self
155-
else {< no_side_effect = no_side_effect_expression s >}
156-
151+
(if !clean then
152+
clean := no_side_effect_expression s);
153+
self
157154
(** only expression would cause side effec *)
158155
end
159-
let no_side_effect_statement st = ((no_side_effect true)#statement st)#get_no_side_effect
156+
let no_side_effect_statement st =
157+
let clean = ref true in
158+
let _ : Js_fold.fold = ((no_side_effect clean)#statement st) in
159+
!clean
160160

161161
(* TODO: generate [fold2]
162162
This make sense, for example:

lib/4.06.1/unstable/js_compiler.ml

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -87169,33 +87169,33 @@ and no_side_effect (x : J.expression) =
8716987169

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

87172-
let no_side_effect clean =
87172+
let no_side_effect clean : Js_fold.fold =
8717387173
object (self)
8717487174
inherit Js_fold.fold as super
87175-
val no_side_effect = clean
87176-
method get_no_side_effect = no_side_effect
87177-
8717887175
method! statement s =
87179-
if not no_side_effect then self else
87176+
if not !clean then self else
8718087177
match s.statement_desc with
8718187178
| Throw _
8718287179
| Debugger
8718387180
| Break
8718487181
| Variable _
8718587182
| Continue _ ->
87186-
{< no_side_effect = false>}
87183+
clean := false ; self
8718787184
| Exp e -> self#expression e
8718887185
| Int_switch _ | String_switch _ | ForRange _
8718987186
| If _ | While _ | Block _ | Return _ | Try _ -> super#statement s
8719087187
method! list f x =
87191-
if not self#get_no_side_effect then self else super#list f x
87188+
if not !clean then self else super#list f x
8719287189
method! expression s =
87193-
if not no_side_effect then self
87194-
else {< no_side_effect = no_side_effect_expression s >}
87195-
87190+
(if !clean then
87191+
clean := no_side_effect_expression s);
87192+
self
8719687193
(** only expression would cause side effec *)
8719787194
end
87198-
let no_side_effect_statement st = ((no_side_effect true)#statement st)#get_no_side_effect
87195+
let no_side_effect_statement st =
87196+
let clean = ref true in
87197+
let _ : Js_fold.fold = ((no_side_effect clean)#statement st) in
87198+
!clean
8719987199

8720087200
(* TODO: generate [fold2]
8720187201
This make sense, for example:

lib/4.06.1/unstable/js_refmt_compiler.ml

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -87169,33 +87169,38 @@ and no_side_effect (x : J.expression) =
8716987169

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

87172-
let no_side_effect init =
87172+
let no_side_effect clean : Js_fold.fold =
8717387173
object (self)
8717487174
inherit Js_fold.fold as super
87175-
val no_side_effect = init
87176-
method get_no_side_effect = no_side_effect
87177-
8717887175
method! statement s =
87179-
if not no_side_effect then self else
87176+
if not !clean then self else
8718087177
match s.statement_desc with
8718187178
| Throw _
8718287179
| Debugger
8718387180
| Break
8718487181
| Variable _
8718587182
| Continue _ ->
87186-
{< no_side_effect = false>}
87183+
clean := false ; self
8718787184
| Exp e -> self#expression e
8718887185
| Int_switch _ | String_switch _ | ForRange _
8718987186
| If _ | While _ | Block _ | Return _ | Try _ -> super#statement s
8719087187
method! list f x =
87191-
if not self#get_no_side_effect then self else super#list f x
87188+
if not !clean then self else super#list f x
8719287189
method! expression s =
87193-
if not no_side_effect then self
87194-
else {< no_side_effect = no_side_effect_expression s >}
87190+
(if !clean then
87191+
clean := no_side_effect_expression s);
87192+
self
87193+
87194+
87195+
87196+
(* {< no_side_effect = no_side_effect_expression s >} *)
8719587197

8719687198
(** only expression would cause side effec *)
8719787199
end
87198-
let no_side_effect_statement st = ((no_side_effect true)#statement st)#get_no_side_effect
87200+
let no_side_effect_statement st =
87201+
let clean = ref true in
87202+
let _ : Js_fold.fold = ((no_side_effect clean)#statement st) in
87203+
!clean
8719987204

8720087205
(* TODO: generate [fold2]
8720187206
This make sense, for example:

lib/4.06.1/whole_compiler.ml

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -377036,33 +377036,33 @@ and no_side_effect (x : J.expression) =
377036377036

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

377039-
let no_side_effect clean =
377039+
let no_side_effect clean : Js_fold.fold =
377040377040
object (self)
377041377041
inherit Js_fold.fold as super
377042-
val no_side_effect = clean
377043-
method get_no_side_effect = no_side_effect
377044-
377045377042
method! statement s =
377046-
if not no_side_effect then self else
377043+
if not !clean then self else
377047377044
match s.statement_desc with
377048377045
| Throw _
377049377046
| Debugger
377050377047
| Break
377051377048
| Variable _
377052377049
| Continue _ ->
377053-
{< no_side_effect = false>}
377050+
clean := false ; self
377054377051
| Exp e -> self#expression e
377055377052
| Int_switch _ | String_switch _ | ForRange _
377056377053
| If _ | While _ | Block _ | Return _ | Try _ -> super#statement s
377057377054
method! list f x =
377058-
if not self#get_no_side_effect then self else super#list f x
377055+
if not !clean then self else super#list f x
377059377056
method! expression s =
377060-
if not no_side_effect then self
377061-
else {< no_side_effect = no_side_effect_expression s >}
377062-
377057+
(if !clean then
377058+
clean := no_side_effect_expression s);
377059+
self
377063377060
(** only expression would cause side effec *)
377064377061
end
377065-
let no_side_effect_statement st = ((no_side_effect true)#statement st)#get_no_side_effect
377062+
let no_side_effect_statement st =
377063+
let clean = ref true in
377064+
let _ : Js_fold.fold = ((no_side_effect clean)#statement st) in
377065+
!clean
377066377066

377067377067
(* TODO: generate [fold2]
377068377068
This make sense, for example:

0 commit comments

Comments
 (0)