aboutsummaryrefslogtreecommitdiffstats
path: root/driver/Driver.ml
diff options
context:
space:
mode:
authorBernhard Schommer <bernhardschommer@gmail.com>2016-07-11 12:22:20 +0200
committerBernhard Schommer <bernhardschommer@gmail.com>2016-07-11 12:22:20 +0200
commit38829eb86eac1c9c3071decbaf9108e6c5737df9 (patch)
treefae620cd713ee520dfb201f4d76531bb518f141a /driver/Driver.ml
parent3872ce9f9806d9af334b1fde092145edf664d170 (diff)
parentc9cbfda0506dfac791ff58ebb72fe56c333f8ad3 (diff)
downloadcompcert-38829eb86eac1c9c3071decbaf9108e6c5737df9.tar.gz
compcert-38829eb86eac1c9c3071decbaf9108e6c5737df9.zip
Merge branch 'master' of github.com:AbsInt/CompCert
Diffstat (limited to 'driver/Driver.ml')
-rw-r--r--driver/Driver.ml48
1 files changed, 27 insertions, 21 deletions
diff --git a/driver/Driver.ml b/driver/Driver.ml
index 7311215d..a0ec07f1 100644
--- a/driver/Driver.ml
+++ b/driver/Driver.ml
@@ -86,29 +86,35 @@ let compile_cminor_file ifile ofile =
Sections.initialize();
let ic = open_in ifile in
let lb = Lexing.from_channel ic in
- try
- match Compiler.transf_cminor_program
- (CMtypecheck.type_program
- (CMparser.prog CMlexer.token lb)) with
+ (* Parse cminor *)
+ let cm =
+ try CMtypecheck.type_program (CMparser.prog CMlexer.token lb)
+ with Parsing.Parse_error ->
+ eprintf "File %s, character %d: Syntax error\n"
+ ifile (Lexing.lexeme_start lb);
+ exit 2
+ | CMlexer.Error msg ->
+ eprintf "File %s, character %d: %s\n"
+ ifile (Lexing.lexeme_start lb) msg;
+ exit 2
+ | CMtypecheck.Error msg ->
+ eprintf "File %s, type-checking error:\n%s"
+ ifile msg;
+ exit 2 in
+ (* Convert to Asm *)
+ let asm =
+ match Compiler.apply_partial
+ (Compiler.transf_cminor_program cm)
+ Asmexpand.expand_program with
+ | Errors.OK asm ->
+ asm
| Errors.Error msg ->
eprintf "%s: %a" ifile print_error msg;
- exit 2
- | Errors.OK p ->
- let oc = open_out ofile in
- PrintAsm.print_program oc p;
- close_out oc
- with Parsing.Parse_error ->
- eprintf "File %s, character %d: Syntax error\n"
- ifile (Lexing.lexeme_start lb);
- exit 2
- | CMlexer.Error msg ->
- eprintf "File %s, character %d: %s\n"
- ifile (Lexing.lexeme_start lb) msg;
- exit 2
- | CMtypecheck.Error msg ->
- eprintf "File %s, type-checking error:\n%s"
- ifile msg;
- exit 2
+ exit 2 in
+ (* Print Asm in text form *)
+ let oc = open_out ofile in
+ PrintAsm.print_program oc asm;
+ close_out oc
(* Processing of a .c file *)