Refactor the tracing code, store the whole tree structure in a javascript array and...
[tatoo.git] / src / pretty.ml
index 6d1dd46..b39375a 100644 (file)
@@ -128,21 +128,36 @@ let pp_print_list ?(sep=dummy_printer) printer fmt l =
   match l with
     [] -> ()
   | [ e ] -> printer fmt e
-  | e :: es -> printer fmt e; List.iter
+  | e :: es -> printer fmt e;
+    List.iter
     (fun x ->
       sep fmt ();
       fprintf fmt "%a" printer x) es
 
+
+let pp_print_range ?(sep=dummy_printer) printer fmt (first, last) =
+  for i = first to last - 1 do
+    printer fmt i;
+    sep fmt ();
+  done;
+  if first <= last then printer fmt last
+
 let pp_print_array ?(sep=dummy_printer) printer fmt a =
-  pp_print_list ~sep:sep printer fmt (Array.to_list a)
+  pp_print_range ~sep:sep (fun fmt i -> printer fmt a.(i)) fmt
+    (0, (Array.length a - 1))
 
-let print_list ?(sep=" ") printer fmt l =
+let with_printer (f : ?sep:('a) -> 'b) strsep pr fmt =
   let sep_printer fmt () =
-    pp_print_string fmt sep
+    pp_print_string fmt strsep
   in
-  pp_print_list ~sep:sep_printer printer fmt l
+  fun x -> f ~sep:sep_printer pr fmt x
 
-let print_array ?(sep=" ") printer fmt a =
-  print_list ~sep:sep printer fmt (Array.to_list a)
 
+let print_list ?(sep=" ") printer fmt l =
+  with_printer pp_print_list sep printer fmt l
+
+let print_array ?(sep=" ") printer fmt a =
+  with_printer pp_print_array sep printer fmt a
 
+let print_range ?(sep=" ") printer fmt r =
+  with_printer pp_print_range sep printer fmt r