Skip to content

Commit eac23a9

Browse files
committed
fix(windows): don't write binary on stdout
1 parent 28972a1 commit eac23a9

File tree

4 files changed

+48
-27
lines changed

4 files changed

+48
-27
lines changed

jscomp/core/dune

+24-3
Original file line numberDiff line numberDiff line change
@@ -156,23 +156,44 @@
156156
(action
157157
(with-stdout-to
158158
%{targets}
159-
(run ./gen/gen_traversal.exe --input %{deps} --mode record-iter))))
159+
(run
160+
./gen/gen_traversal.exe
161+
--input
162+
%{deps}
163+
--output
164+
%{targets}
165+
--mode
166+
record-iter))))
160167

161168
(rule
162169
(targets js_record_map.ml)
163170
(deps j.mli)
164171
(action
165172
(with-stdout-to
166173
%{targets}
167-
(run ./gen/gen_traversal.exe --input %{deps} --mode record-map))))
174+
(run
175+
./gen/gen_traversal.exe
176+
--input
177+
%{deps}
178+
--output
179+
%{targets}
180+
--mode
181+
record-map))))
168182

169183
(rule
170184
(targets js_record_fold.ml)
171185
(deps j.mli)
172186
(action
173187
(with-stdout-to
174188
%{targets}
175-
(run ./gen/gen_traversal.exe --input %{deps} --mode record-fold))))
189+
(run
190+
./gen/gen_traversal.exe
191+
--input
192+
%{deps}
193+
--output
194+
%{targets}
195+
--mode
196+
record-fold))))
176197

177198
(rule
178199
(targets git_commit.ml)

jscomp/core/gen/gen_traversal.ml

+20-20
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,24 @@
11
let parse fname =
2-
let module In_ch = struct
3-
let create ?(binary = true) file =
4-
let flags = [ Open_rdonly ] in
5-
let flags = if binary then Open_binary :: flags else flags in
6-
open_in_gen flags 0o000 file
7-
8-
let with_file ?binary filename ~f =
9-
let t = create ?binary filename in
10-
Fun.protect ~finally:(fun () -> close_in t) (fun () -> f t)
11-
end in
12-
In_ch.with_file fname ~f:(fun ch ->
13-
let lexbuf = Lexing.from_channel ch in
2+
let t = open_in_bin fname in
3+
Fun.protect
4+
~finally:(fun () -> close_in t)
5+
(fun () ->
6+
let lexbuf = Lexing.from_channel t in
147
let ast = Parse.interface lexbuf in
158
ast)
169

17-
let write_ast oc ~input_name ast =
18-
output_string oc Config.ast_impl_magic_number;
19-
output_value oc input_name;
20-
output_value oc (Ppxlib_ast.Selected_ast.To_ocaml.copy_structure ast)
10+
let write_ast ~input_name output_name ast =
11+
let oc = open_out_bin output_name in
12+
Fun.protect
13+
~finally:(fun () -> close_out oc)
14+
(fun () ->
15+
output_string oc Config.ast_impl_magic_number;
16+
output_value oc input_name;
17+
output_value oc (Ppxlib_ast.Selected_ast.To_ocaml.copy_structure ast))
2118

2219
type mode = Record_iter | Record_map | Record_fold
2320

24-
let main mode input =
21+
let main mode input output =
2522
let ast = parse input in
2623
let typedefs = Node_types.get_type_defs ast in
2724
let new_ast =
@@ -30,8 +27,7 @@ let main mode input =
3027
| Record_map -> Record_map.make typedefs
3128
| Record_fold -> Record_fold.make typedefs
3229
in
33-
let oc = stdout in
34-
write_ast oc ~input_name:input new_ast
30+
write_ast ~input_name:input output new_ast
3531

3632
let mode =
3733
let open Cmdliner in
@@ -59,12 +55,16 @@ let input =
5955
let open Cmdliner in
6056
Arg.(required & opt (some string) None & info [ "input" ] ~docv:"FILE")
6157

58+
let output =
59+
let open Cmdliner in
60+
Arg.(required & opt (some string) None & info [ "output" ] ~docv:"FILE")
61+
6262
let () =
6363
let open Cmdliner in
6464
let cmd =
6565
let doc = "Record iter / map / fold code generator" in
6666
let info = Cmd.info "main" ~version:"v0.0.0" ~doc in
67-
let term = Term.(const main $ mode $ input) in
67+
let term = Term.(const main $ mode $ input $ output) in
6868
Cmd.v info term
6969
in
7070
exit (Cmd.eval cmd)

jscomp/melstd/dune

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
(action
1212
(with-stdout-to
1313
%{targets}
14-
(run ./gen/build_reserved.exe %{deps}))))
14+
(run ./gen/build_reserved.exe %{deps} %{targets}))))
1515

1616
(rule
1717
(targets hash_set_string.ml)

jscomp/melstd/gen/build_reserved.ml

+3-3
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ let write_ast oc ast =
227227
output_value oc "reserved_keywords.ml";
228228
output_value oc (Ppxlib_ast.Selected_ast.To_ocaml.copy_structure ast)
229229

230-
let main keyword_file =
230+
let main keyword_file output_name =
231231
let ast =
232232
let keywords_array =
233233
let ss = Reserved_words.all_from_file keyword_file in
@@ -243,7 +243,7 @@ let main keyword_file =
243243
in
244244
keywords_array :: binary_search
245245
in
246-
let oc = stdout in
246+
let oc = open_out_bin output_name in
247247
write_ast oc ast;
248248
close_out oc
249249

@@ -253,4 +253,4 @@ for i = 0 to Array.length Sys.argv - 1 do
253253
print_endline ">"; print_string Sys.argv.(i)
254254
done
255255
;; *)
256-
let () = main Sys.argv.(1)
256+
let () = main Sys.argv.(1) Sys.argv.(2)

0 commit comments

Comments
 (0)