Last change
on this file since 3089 was
3013,
checked in by sacerdot, 8 years ago
|
Temporary parsing files removed.
|
File size:
1.7 KB
|
Rev | Line | |
---|
[3013] | 1 | let safe_remove name = |
---|
| 2 | try Sys.remove name with Sys_error _ -> () |
---|
[2620] | 3 | |
---|
| 4 | let process ?is_lustre_file ?remove_lustre_externals file = |
---|
| 5 | let temp_dir = Filename.dirname file in |
---|
| 6 | let tmp_file1 = Filename.temp_file ~temp_dir "cparser1" ".c" |
---|
| 7 | and tmp_file2 = Filename.temp_file ~temp_dir "cparser2" ".i" |
---|
| 8 | and prepro_opts = [] in |
---|
| 9 | |
---|
| 10 | (* Add CerCo's primitives *) |
---|
| 11 | let _ = |
---|
| 12 | try |
---|
| 13 | let oc = open_out tmp_file1 in |
---|
| 14 | if is_lustre_file = Some true || remove_lustre_externals = Some true then |
---|
| 15 | output_string oc "#include<string.h>"; |
---|
| 16 | (* FIXME output_string oc Primitive.prototypes ;*) |
---|
| 17 | close_out oc |
---|
| 18 | with Sys_error _ -> failwith "Error adding primitive prototypes." in |
---|
| 19 | let rc = Sys.command |
---|
| 20 | (Printf.sprintf "cat %s >> %s" |
---|
| 21 | (Filename.quote file) (Filename.quote tmp_file1)) in |
---|
| 22 | if rc <> 0 then ( |
---|
[3013] | 23 | safe_remove tmp_file1; |
---|
[2620] | 24 | failwith "Error adding primitive prototypes." |
---|
| 25 | ); |
---|
| 26 | |
---|
| 27 | (* Preprocessing *) |
---|
| 28 | Cparser.Builtins.set Cparser.GCC.builtins; |
---|
| 29 | let rc = Sys.command |
---|
| 30 | (Printf.sprintf "gcc -E -U__GNUC__ %s %s > %s" |
---|
| 31 | (String.concat " " (List.map Filename.quote prepro_opts)) |
---|
| 32 | (Filename.quote tmp_file1) (Filename.quote tmp_file2)) in |
---|
| 33 | if rc <> 0 then ( |
---|
[3013] | 34 | safe_remove tmp_file1; |
---|
| 35 | safe_remove tmp_file2; |
---|
[2620] | 36 | failwith "Error calling gcc." |
---|
| 37 | ); |
---|
| 38 | |
---|
| 39 | (* C to Cil *) |
---|
| 40 | let r = Cparser.Parse.preprocessed_file "CSf" file tmp_file2 in |
---|
| 41 | match r with |
---|
| 42 | | None -> failwith "Error during C parsing." |
---|
| 43 | | Some p -> |
---|
| 44 | (* Cil to Clight *) |
---|
| 45 | (match ClightFromC.convertProgram p with |
---|
| 46 | | None -> failwith "Error during C to Clight pass." |
---|
| 47 | | Some(pp) -> |
---|
[3013] | 48 | safe_remove tmp_file1; |
---|
| 49 | safe_remove tmp_file2; |
---|
[2620] | 50 | if remove_lustre_externals = Some true then failwith "not implemented yet" (*ClightLustre.simplify pp*) |
---|
| 51 | else pp) |
---|
Note: See
TracBrowser
for help on using the repository browser.