Skip to content

Commit 413bd76

Browse files
bschommerxavierleroy
authored andcommitted
Simplify handling of file suffixes.
Since we are sure that all files passed have a valid extension we can use the OCaml function Filename.remove_extension and don't need to pass the suffixes. Bug 33218
1 parent 713b45c commit 413bd76

File tree

4 files changed

+28
-30
lines changed

4 files changed

+28
-30
lines changed

driver/Driver.ml

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,18 @@ let sdump_suffix = ref ".json"
3030
let nolink () =
3131
!option_c || !option_S || !option_E || !option_interp
3232

33-
let object_filename sourcename suff =
33+
let object_filename sourcename =
3434
if nolink () then
35-
output_filename ~final: !option_c sourcename suff ".o"
35+
output_filename ~final: !option_c sourcename ~suffix:".o"
3636
else
3737
tmp_file ".o"
3838

3939
(* From CompCert C AST to asm *)
4040

41-
let compile_c_file sourcename ~sourcesuffix ifile ofile =
41+
let compile_c_file sourcename ifile ofile =
4242
(* Prepare to dump Clight, RTL, etc, if requested *)
4343
let set_dest dst opt ext =
44-
dst := if !opt then Some (output_filename sourcename sourcesuffix ext)
44+
dst := if !opt then Some (output_filename sourcename ~suffix:ext)
4545
else None in
4646
set_dest Cprint.destination option_dparse ".parsed.c";
4747
set_dest PrintCsyntax.destination option_dcmedium ".compcert.c";
@@ -73,23 +73,23 @@ let compile_c_file sourcename ~sourcesuffix ifile ofile =
7373

7474
(* From C source to asm *)
7575

76-
let compile_i_file sourcename ~sourcesuffix preproname =
76+
let compile_i_file sourcename preproname =
7777
if !option_interp then begin
7878
Machine.config := Machine.compcert_interpreter !Machine.config;
7979
let csyntax = parse_c_file sourcename preproname in
8080
Interp.execute csyntax;
8181
""
8282
end else if !option_S then begin
83-
compile_c_file sourcename ~sourcesuffix:sourcesuffix preproname
84-
(output_filename ~final:true sourcename sourcesuffix ".s");
83+
compile_c_file sourcename preproname
84+
(output_filename ~final:true sourcename ~suffix:".s");
8585
""
8686
end else begin
8787
let asmname =
8888
if !option_dasm
89-
then output_filename sourcename sourcesuffix ".s"
89+
then output_filename sourcename ~suffix:".s"
9090
else tmp_file ".s" in
91-
compile_c_file sourcename ~sourcesuffix:sourcesuffix preproname asmname;
92-
let objname = object_filename sourcename sourcesuffix in
91+
compile_c_file sourcename preproname asmname;
92+
let objname = object_filename sourcename in
9393
assemble asmname objname;
9494
objname
9595
end
@@ -103,24 +103,24 @@ let process_c_file sourcename =
103103
""
104104
end else begin
105105
let preproname = if !option_dprepro then
106-
output_filename sourcename ".c" ".i"
106+
output_filename sourcename ~suffix:".i"
107107
else
108108
tmp_file ".i" in
109109
preprocess sourcename preproname;
110-
compile_i_file sourcename ~sourcesuffix:".c" preproname
110+
compile_i_file sourcename preproname
111111
end
112112

113113
(* Processing of a .i / .p file (preprocessed C) *)
114114

115-
let process_i_file sourcename ~sourcesuffix =
115+
let process_i_file sourcename =
116116
ensure_inputfile_exists sourcename;
117-
compile_i_file sourcename ~sourcesuffix:sourcesuffix sourcename
117+
compile_i_file sourcename sourcename
118118

119119
(* Processing of .S and .s files *)
120120

121121
let process_s_file sourcename =
122122
ensure_inputfile_exists sourcename;
123-
let objname = object_filename sourcename ".s" in
123+
let objname = object_filename sourcename in
124124
assemble sourcename objname;
125125
objname
126126

@@ -132,7 +132,7 @@ let process_S_file sourcename =
132132
end else begin
133133
let preproname = tmp_file ".s" in
134134
preprocess sourcename preproname;
135-
let objname = object_filename sourcename ".S" in
135+
let objname = object_filename sourcename in
136136
assemble preproname objname;
137137
objname
138138
end
@@ -379,11 +379,9 @@ let cmdline_actions =
379379
Suffix ".c", Self (fun s ->
380380
push_action process_c_file s; incr num_source_files; incr num_input_files);
381381
Suffix ".i", Self (fun s ->
382-
push_action (process_i_file ~sourcesuffix:".i") s;
383-
incr num_source_files; incr num_input_files);
382+
push_action process_i_file s; incr num_source_files; incr num_input_files);
384383
Suffix ".p", Self (fun s ->
385-
push_action (process_i_file ~sourcesuffix:".p") s;
386-
incr num_source_files; incr num_input_files);
384+
push_action process_i_file s; incr num_source_files; incr num_input_files);
387385
Suffix ".s", Self (fun s ->
388386
push_action process_s_file s; incr num_source_files; incr num_input_files);
389387
Suffix ".S", Self (fun s ->

driver/Driveraux.ml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,12 @@ let command_error n exc =
8989
and if this is the final destination file (not a dump file).
9090
Otherwise, we generate a file in the current directory. *)
9191

92-
let output_filename ?(final = false) source_file source_suffix output_suffix =
92+
let output_filename ?(final = false) source_file ~suffix =
9393
match !option_o with
9494
| Some file when final -> file
9595
| _ ->
96-
Filename.basename (Filename.chop_suffix source_file source_suffix)
97-
^ output_suffix
96+
Filename.basename (Filename.remove_extension source_file)
97+
^ suffix
9898

9999
(* A variant of [output_filename] where the default output name is fixed *)
100100

driver/Driveraux.mli

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ val tmp_file: string -> string
2727
The file will be removed when the program exits.
2828
Return the absolute path to the file. *)
2929

30-
val output_filename: ?final:bool -> string -> string -> string -> string
30+
val output_filename: ?final:bool -> string -> suffix:string -> string
3131
(** Determine names for output files. We use -o option if specified
3232
and if this is the final destination file (not a dump file).
3333
Otherwise, we generate a file in the current directory. *)

export/ExportDriver.ml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ let export_clight sourcename csyntax ofile =
6767

6868
let compile_c_file sourcename ifile ofile =
6969
let set_dest dst opt ext =
70-
dst := if !opt then Some (output_filename sourcename ".c" ext)
70+
dst := if !opt then Some (output_filename sourcename ~suffix:ext)
7171
else None in
7272
set_dest Cprint.destination option_dparse ".parsed.c";
7373
set_dest PrintCsyntax.destination option_dcmedium ".compcert.c";
@@ -77,20 +77,20 @@ let compile_c_file sourcename ifile ofile =
7777
| Mode_Csyntax -> export_csyntax sourcename cs ofile
7878
| Mode_Clight -> export_clight sourcename cs ofile
7979

80-
let output_filename sourcename suff =
81-
let prefixname = Filename.chop_suffix sourcename suff in
80+
let output_filename sourcename =
81+
let prefixname = Filename.remove_extension sourcename in
8282
output_filename_default (prefixname ^ ".v")
8383

8484
(* Processing of a .c file *)
8585

8686
let process_c_file sourcename =
8787
ensure_inputfile_exists sourcename;
88-
let ofile = output_filename sourcename ".c" in
88+
let ofile = output_filename sourcename in
8989
if !option_E then begin
9090
preprocess sourcename "-"
9191
end else begin
9292
let preproname = if !option_dprepro then
93-
Driveraux.output_filename sourcename ".c" ".i"
93+
Driveraux.output_filename sourcename ~suffix:".i"
9494
else
9595
Driveraux.tmp_file ".i" in
9696
preprocess sourcename preproname;
@@ -101,7 +101,7 @@ let process_c_file sourcename =
101101

102102
let process_i_file sourcename =
103103
ensure_inputfile_exists sourcename;
104-
let ofile = output_filename sourcename ".i" in
104+
let ofile = output_filename sourcename in
105105
compile_c_file sourcename sourcename ofile
106106

107107
let usage_string =

0 commit comments

Comments
 (0)