aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorBernhard Schommer <bernhardschommer@gmail.com>2017-06-28 13:47:52 +0200
committerBernhard Schommer <bernhardschommer@gmail.com>2017-06-28 13:47:52 +0200
commit6bece6366fb66be3d1ac6d2586f3f8643fed97aa (patch)
tree2b0e54966538c8bd4ea0ad99af2e31b28187c24f /lib
parent1530f96aa259f346f235de713ab53b682b6d82f6 (diff)
downloadcompcert-kvx-6bece6366fb66be3d1ac6d2586f3f8643fed97aa.tar.gz
compcert-kvx-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 'lib')
-rw-r--r--lib/Json.ml54
1 files changed, 32 insertions, 22 deletions
diff --git a/lib/Json.ml b/lib/Json.ml
index 22b50a9e..16819e8d 100644
--- a/lib/Json.ml
+++ b/lib/Json.ml
@@ -10,41 +10,51 @@
(* *)
(* *********************************************************************)
-open Printf
+open Format
(* Simple functions for JSON printing *)
(* Print a string as json string *)
-let p_jstring oc s =
+let pp_jstring oc s =
fprintf oc "\"%s\"" s
-(* Print a list as json array *)
-let p_jarray elem oc l =
- match l with
- | [] -> fprintf oc "[]"
- | hd::tail ->
- output_string oc "["; elem oc hd;
- List.iter (fprintf oc ",%a" elem) tail;
- output_string oc "]"
-
(* Print a bool as json bool *)
-let p_jbool oc = fprintf oc "%B"
+let pp_jbool oc = fprintf oc "%B"
(* Print an int as json int *)
-let p_jint oc = fprintf oc "%d"
+let pp_jint oc = fprintf oc "%d"
(* Print an int32 as json int *)
-let p_jint32 oc = fprintf oc "%ld"
+let pp_jint32 oc = fprintf oc "%ld"
+
+(* Print optional value *)
+let pp_jopt pp_elem oc = function
+ | None -> output_string oc "null"
+ | Some i -> pp_elem oc i
+
+let pp_jobject_start pp =
+ fprintf pp "@[<v 1>{"
+
+let pp_jobject_end pp =
+ fprintf pp "@;<0 -1>}@]"
(* Print a member *)
-let p_jmember oc name p_mem mem =
- fprintf oc "\n%a:%a" p_jstring name p_mem mem
+let pp_jmember ?(first=false) pp name pp_mem mem =
+ let sep = if first then "" else "," in
+ fprintf pp "%s@ \"%s\": %a" sep name pp_mem mem
(* Print singleton object *)
-let p_jsingle_object oc name p_mem mem =
- fprintf oc "{%a:%a}" p_jstring name p_mem mem
+let pp_jsingle_object pp name pp_mem mem =
+ pp_jobject_start pp;
+ pp_jmember ~first:true pp name pp_mem mem;
+ pp_jobject_end pp
-(* Print optional value *)
-let p_jopt p_elem oc = function
- | None -> output_string oc "null"
- | Some i -> p_elem oc i
+(* Print a list as json array *)
+let pp_jarray elem pp l =
+ match l with
+ | [] -> fprintf pp "[]";
+ | hd::tail ->
+ fprintf pp "@[<v 1>[";
+ fprintf pp "%a" elem hd;
+ List.iter (fun l -> fprintf pp ",@ %a" elem l) tail;
+ fprintf pp "@;<0 -1>]@]"