@@ -116,32 +116,38 @@ let no_side_effects (rest : Lam_group.t list) : string option =
116116 else None (* TODO :*) )
117117
118118
119- let _d = fun s lam ->
120- let diagnose = ! Js_config. diagnose in
121- if diagnose then begin
122- Lam_util. dump s lam;
123- Ext_log. dwarn ~__POS__ " START CHECKING PASS %s@." s
124- end ;
125- if ! Js_config. check_lam || diagnose then begin
126- ignore @@ Lam_check. check ~file: ! Location. input_name ~pass: s lam;
127- if diagnose then Ext_log. dwarn ~__POS__ " FINISH CHECKING PASS %s@." s
128- end ;
129- lam
130-
131- let _j name program =
132- if ! Js_config. diagnose then Js_pass_debug. dump name program else program
133-
134119(* * Actually simplify_lets is kind of global optimization since it requires you to know whether
135120 it's used or not
136121*)
137122let compile
138123 (output_prefix : string )
139124 export_idents
140125 (lam : Lambda.lambda ) =
126+ let debug_ir = ! Js_config. debug_ir in
127+ let diagnostics =
128+ if debug_ir then Some (Ir_diagnostics. create ~output_prefix ) else None
129+ in
130+ let d pass lam =
131+ (match diagnostics with
132+ | Some diagnostics ->
133+ Ir_diagnostics. dump_lam diagnostics ~pass lam;
134+ Ext_log. dwarn ~__POS__ " START CHECKING PASS %s@." pass
135+ | None -> () );
136+ if ! Js_config. check_lam || debug_ir then begin
137+ ignore @@ Lam_check. check ~file: ! Location. input_name ~pass lam;
138+ if debug_ir then Ext_log. dwarn ~__POS__ " FINISH CHECKING PASS %s@." pass
139+ end ;
140+ lam
141+ in
142+ let j pass program =
143+ Ext_option. iter diagnostics (fun diagnostics ->
144+ Ir_diagnostics. dump_js diagnostics ~pass program);
145+ program
146+ in
141147 let export_ident_sets = Set_ident. of_list export_idents in
142148 (* To make toplevel happy - reentrant for js-demo *)
143149 let () =
144- if ! Js_config. diagnose then begin
150+ if debug_ir then begin
145151 Ext_list. iter export_idents
146152 (fun id -> Ext_log. dwarn ~__POS__ " export idents: %s/%d" id.name id.stamp)
147153 end ;
@@ -150,9 +156,9 @@ let compile
150156 let lam, may_required_modules = Lam_convert. convert export_ident_sets lam in
151157
152158
153- let lam = _d " initial" lam in
159+ let lam = d " initial" lam in
154160 let lam = Lam_pass_deep_flatten. deep_flatten lam in
155- let lam = _d " flatten0" lam in
161+ let lam = d " flatten0" lam in
156162 let meta : Lam_stats.t =
157163 Lam_stats. make
158164 ~export_idents
@@ -161,19 +167,19 @@ let compile
161167 let lam =
162168 let lam =
163169 lam
164- |> _d " flattern1 "
170+ |> d " flatten1 "
165171 |> Lam_pass_exits. simplify_exits
166- |> _d " simplyf_exits "
172+ |> d " simplify_exits "
167173 |> (fun lam ->
168174 Lam_pass_collect. collect_info meta lam;
169- if ! Js_config. diagnose then
175+ if debug_ir then
170176 Ext_log. dwarn ~__POS__ " Before simplify_alias: %a@." Lam_stats. print
171177 meta;
172178 lam)
173179 |> Lam_pass_remove_alias. simplify_alias meta
174- |> _d " simplify_alias"
180+ |> d " simplify_alias"
175181 |> Lam_pass_deep_flatten. deep_flatten
176- |> _d " flatten2"
182+ |> d " flatten2"
177183 in (* Inling happens*)
178184
179185 let () = Lam_pass_collect. collect_info meta lam in
@@ -182,31 +188,31 @@ let compile
182188 let () = Lam_pass_collect. collect_info meta lam in
183189 let lam =
184190 lam
185- |> _d " alpha_before"
191+ |> d " alpha_before"
186192 |> Lam_pass_alpha_conversion. alpha_conversion meta
187- |> _d " alpha_after"
193+ |> d " alpha_after"
188194 |> Lam_pass_exits. simplify_exits in
189195 let () = Lam_pass_collect. collect_info meta lam in
190196
191197
192198 lam
193- |> _d " simplify_alias_before"
199+ |> d " simplify_alias_before"
194200 |> Lam_pass_remove_alias. simplify_alias meta
195- |> _d " alpha_conversion"
201+ |> d " alpha_conversion"
196202 |> Lam_pass_alpha_conversion. alpha_conversion meta
197- |> _d " before-simplify_lets"
203+ |> d " before-simplify_lets"
198204 (* we should investigate a better way to put different passes : )*)
199205 |> Lam_pass_lets_dce. simplify_lets
200206
201- |> _d " before-simplify-exits"
207+ |> d " before-simplify-exits"
202208 (* |> (fun lam -> Lam_pass_collect.collect_info meta lam
203209 ; Lam_pass_remove_alias.simplify_alias meta lam) *)
204210 (* |> Lam_group_pass.scc_pass
205- |> _d "scc" *)
211+ |> d "scc" *)
206212 |> Lam_pass_exits. simplify_exits
207- |> _d " simplify_lets"
213+ |> d " simplify_lets"
208214 |> (fun lam ->
209- if ! Js_config. diagnose then
215+ if debug_ir then
210216 Ext_log. dwarn ~__POS__ " Before coercion: %a@." Lam_stats. print meta;
211217 lam)
212218 in
@@ -216,19 +222,15 @@ let compile
216222 in
217223
218224let () =
219- if ! Js_config. diagnose then begin
225+ if debug_ir then begin
220226 Ext_log. dwarn ~__POS__ " After coercion: %a@." Lam_stats. print meta;
221- let f =
222- Ext_filename. new_extension ! Location. input_name " .lambda" in
223- Ext_fmt. with_file_as_pp f begin fun fmt ->
224- Format. pp_print_list ~pp_sep: Format. pp_print_newline
225- Lam_group. pp_group fmt (coerced_input.groups)
226- end
227+ Ext_option. iter diagnostics (fun diagnostics ->
228+ Ir_diagnostics. dump_groups diagnostics coerced_input.groups)
227229 end
228230in
229231let maybe_pure = no_side_effects groups in
230232let () =
231- if ! Js_config. diagnose then
233+ if debug_ir then
232234 Ext_log. dwarn ~__POS__ " \n @[[TIME:]Pre-compile: %f@]@."
233235 (Sys. time () *. 1000. )
234236in
@@ -238,7 +240,7 @@ let body =
238240 |> Js_output. output_as_block
239241in
240242let () =
241- if ! Js_config. diagnose then
243+ if debug_ir then
242244 Ext_log. dwarn ~__POS__ " \n @[[TIME:]Post-compile: %f@]@."
243245 (Sys. time () *. 1000. )
244246in
@@ -253,22 +255,22 @@ let js : J.program =
253255 block = body}
254256in
255257js
256- |> _j " initial"
258+ |> j " initial"
257259|> Js_pass_flatten. program
258- |> _j " flatten"
260+ |> j " flatten"
259261|> Js_pass_external_shadow. program
260- |> _j " external_shadow"
262+ |> j " external_shadow"
261263|> Js_pass_tailcall_inline. tailcall_inline
262- |> _j " inline_and_shake"
264+ |> j " inline_and_shake"
263265|> Js_pass_record_rest. program
264- |> _j " record_rest"
266+ |> j " record_rest"
265267|> Js_pass_flatten_and_mark_dead. program
266- |> _j " flatten_and_mark_dead"
268+ |> j " flatten_and_mark_dead"
267269(* |> Js_inline_and_eliminate.inline_and_shake *)
268- (* |> _j "inline_and_shake" *)
270+ (* |> j "inline_and_shake" *)
269271|> (fun js -> ignore @@ Js_pass_scope. program js ; js )
270272|> Js_shake. shake_program
271- |> _j " shake"
273+ |> j " shake"
272274|> ( fun (program : J.program ) ->
273275 let external_module_ids : Lam_module_ident.t list =
274276 if ! Js_config. all_module_aliases then []
0 commit comments