(****************************************************************************)
(* *)
(* OCaml *)
(* *)
(* INRIA Rocquencourt *)
(* *)
(* Copyright 2006 Institut National de Recherche en Informatique et *)
(* en Automatique. All rights reserved. This file is distributed under *)
(* the terms of the GNU Library General Public License, with the special *)
(* exception on linking described in LICENSE at the top of the Camlp4 *)
(* source tree. *)
(* *)
(****************************************************************************)
(* Authors:
* - Daniel de Rauglaudre: initial version
* - Nicolas Pouillard: refactoring
*)
module Id : Sig.Id = struct
value name = "Camlp4Printers.DumpOCamlAst";
value version = Sys.ocaml_version;
end;
module Make (Syntax : Sig.Camlp4Syntax)
: (Sig.Printer Syntax.Ast).S
= struct
include Syntax;
module Ast2pt = Struct.Camlp4Ast2OCamlAst.Make Ast;
value with_open_out_file x f =
match x with
[ Some file -> do { let oc = open_out_bin file;
f oc;
flush oc;
close_out oc }
| None -> do { set_binary_mode_out stdout True; f stdout; flush stdout } ];
value dump_pt magic fname pt oc = do {
output_string oc magic;
output_value oc (if fname = "-" then "" else fname);
output_value oc pt;
};
value print_interf ?(input_file = "-") ?output_file ast =
let pt = Ast2pt.sig_item ast in
with_open_out_file output_file (dump_pt Camlp4_config.ocaml_ast_intf_magic_number input_file pt);
value print_implem ?(input_file = "-") ?output_file ast =
let pt = Ast2pt.str_item ast in
with_open_out_file output_file (dump_pt Camlp4_config.ocaml_ast_impl_magic_number input_file pt);
end;