diff options
| author | Xavier Leroy <xavier.leroy@inria.fr> | 1995-07-02 16:47:48 +0000 |
|---|---|---|
| committer | Xavier Leroy <xavier.leroy@inria.fr> | 1995-07-02 16:47:48 +0000 |
| commit | 852c648c4a77ebf391372c93bf8a372e4604b7db (patch) | |
| tree | 1e37c1f23e378563eef17ff34837f81eb3c97895 /tools/dumpapprox.ml | |
| parent | 8b063400b1aa5c14173f7d633d99e664709eb449 (diff) | |
| download | ocaml-852c648c4a77ebf391372c93bf8a372e4604b7db.tar.gz | |
Introduction de dumpapprox pour imprimer les infos d'un .cmx.
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@57 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'tools/dumpapprox.ml')
| -rw-r--r-- | tools/dumpapprox.ml | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/tools/dumpapprox.ml b/tools/dumpapprox.ml new file mode 100644 index 0000000000..f3cf8920c2 --- /dev/null +++ b/tools/dumpapprox.ml @@ -0,0 +1,87 @@ +(* Dump a .cmx file *) + +open Config +open Format +open Clambda +open Compilenv + +let rec print_approx = function + Value_closure(fundesc, approx) -> + open_hovbox 2; + print_string "function "; print_string fundesc.fun_label; + print_space(); print_string "arity "; print_int fundesc.fun_arity; + if fundesc.fun_closed then begin + print_space(); print_string "(closed)" + end; + print_space(); print_string "->"; print_space(); + print_approx approx; + close_box() + | Value_tuple approx -> + open_hvbox 1; + print_string "["; + for i = 0 to Array.length approx - 1 do + if i > 0 then (print_string ";"; print_space()); + print_int i; print_string ": "; print_approx approx.(i) + done; + print_string "]"; + close_box() + | Value_unknown -> + print_string "_" + +let print_infos ui = + print_string "Name: "; print_string ui.ui_name; print_newline(); + open_hovbox 2; + print_string "Interfaces imported:"; + List.iter + (fun (name, crc) -> print_space(); print_string name) + ui.ui_interfaces; + close_box(); print_newline(); + open_hovbox 2; + print_string "Implementations imported:"; + List.iter + (fun (name, crc) -> print_space(); print_string name) + ui.ui_interfaces; + close_box(); print_newline(); + open_hovbox 2; + print_string "Approximation:"; print_space(); print_approx ui.ui_approx; + close_box(); print_newline(); + open_hovbox 2; + print_string "Currying functions:"; + List.iter + (fun arity -> print_space(); print_int arity) + ui.ui_curry_fun; + close_box(); print_newline(); + open_hovbox 2; + print_string "Apply functions:"; + List.iter + (fun arity -> print_space(); print_int arity) + ui.ui_apply_fun; + close_box(); print_newline() + +let read_unit_info filename = + let ic = open_in_bin filename in + try + let buffer = String.create (String.length cmx_magic_number) in + really_input ic buffer 0 (String.length cmx_magic_number); + if buffer <> cmx_magic_number then begin + close_in ic; + prerr_endline "Wrong magic number"; + exit 2 + end; + let ui = (input_value ic : unit_infos) in + let crc = input_binary_int ic in + close_in ic; + ui + with End_of_file | Failure _ -> + close_in ic; + prerr_endline "Error reading file"; + exit 2 + +let main () = + print_infos(read_unit_info Sys.argv.(1)); + exit 0 + +let _ = main () + + + |
