diff options
author | Xavier Leroy <xavierleroy@users.noreply.github.com> | 2016-07-11 12:08:32 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-07-11 12:08:32 +0200 |
commit | c9cbfda0506dfac791ff58ebb72fe56c333f8ad3 (patch) | |
tree | 592be2bddc8f36e22cb7d4c2c1a2ae05ace50ae8 /driver | |
parent | 4c7650c3eaf4dfbe5971864bf084e76f844051ee (diff) | |
parent | 2ef43e7647ccd65a2a8f1d9fdd067a18e52c39cb (diff) | |
download | compcert-c9cbfda0506dfac791ff58ebb72fe56c333f8ad3.tar.gz compcert-c9cbfda0506dfac791ff58ebb72fe56c333f8ad3.zip |
Merge pull request #105 from m-schmidt/master
Fix parsing and handling of CMinor files
Diffstat (limited to 'driver')
-rw-r--r-- | driver/Driver.ml | 48 |
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 *) |