diff options
author | Bernhard Schommer <bernhardschommer@gmail.com> | 2017-06-28 13:47:52 +0200 |
---|---|---|
committer | Bernhard Schommer <bernhardschommer@gmail.com> | 2017-06-28 13:47:52 +0200 |
commit | 6bece6366fb66be3d1ac6d2586f3f8643fed97aa (patch) | |
tree | 2b0e54966538c8bd4ea0ad99af2e31b28187c24f /driver | |
parent | 1530f96aa259f346f235de713ab53b682b6d82f6 (diff) | |
download | compcert-6bece6366fb66be3d1ac6d2586f3f8643fed97aa.tar.gz compcert-6bece6366fb66be3d1ac6d2586f3f8643fed97aa.zip |
Formatted json printing.
Instead of just dumping the json output it is now a little bit
formatted for better reading.
Furthermore the AsmToJson function for the non powerpc targets now
prints the json value "null" sucht that the resulting json file is
valid json.
Diffstat (limited to 'driver')
-rw-r--r-- | driver/Driver.ml | 31 |
1 files changed, 23 insertions, 8 deletions
diff --git a/driver/Driver.ml b/driver/Driver.ml index 97082720..dfbac67f 100644 --- a/driver/Driver.ml +++ b/driver/Driver.ml @@ -18,6 +18,7 @@ open Driveraux open Frontend open Assembler open Linker +open Json (* Optional sdump suffix *) let sdump_suffix = ref ".json" @@ -29,15 +30,29 @@ let jdump_magic_number = "CompCertJDUMP" ^ Version.version let dump_jasm asm sourcename destfile = let oc = open_out_bin destfile in - let print_args oc = - output_string oc Sys.executable_name; + let pp = Format.formatter_of_out_channel oc in + let get_args () = + let buf = Buffer.create 100 in + Buffer.add_string buf Sys.executable_name; for i = 1 to (Array.length !argv - 1) do - fprintf oc " %s" (Responsefile.gnu_quote !argv.(i)) - done in - let dump_compile_info oc = - fprintf oc "{\n\"directory\":\"%s\",\n\"command\":\"%t\",\n\"file\":\"%s\"\n}" (Sys.getcwd ()) print_args sourcename in - fprintf oc "{\n\"Version\":\"%s\",\n\"System\":\"%s\"\n,\"Compile Info\" : %t,\n\"Compilation Unit\":\"%s\",\n\"Asm Ast\":%a}" - jdump_magic_number Configuration.system dump_compile_info sourcename AsmToJSON.p_program asm; + Buffer.add_string buf " "; + Buffer.add_string buf (Responsefile.gnu_quote !argv.(i)); + done; + Buffer.contents buf in + let dump_compile_info pp () = + pp_jobject_start pp; + pp_jmember ~first:true pp "directory" pp_jstring (Sys.getcwd ()); + pp_jmember pp "command" pp_jstring (get_args ()); + pp_jmember pp "file" pp_jstring sourcename; + pp_jobject_end pp in + pp_jobject_start pp; + pp_jmember ~first:true pp "Version" pp_jstring jdump_magic_number; + pp_jmember pp "System" pp_jstring Configuration.system; + pp_jmember pp "Compile Info" dump_compile_info (); + pp_jmember pp "Compilation Unit" pp_jstring sourcename; + pp_jmember pp "Asm Ast" AsmToJSON.pp_program asm; + pp_jobject_end pp; + Format.pp_print_flush pp (); close_out oc |