ocaml/typing/cmt_format.mli

113 lines
3.8 KiB
OCaml

(***********************************************************************)
(* *)
(* OCaml *)
(* *)
(* Fabrice Le Fessant, INRIA Saclay *)
(* *)
(* Copyright 2012 Institut National de Recherche en Informatique et *)
(* en Automatique. All rights reserved. This file is distributed *)
(* under the terms of the Q Public License version 1.0. *)
(* *)
(***********************************************************************)
(** cmt and cmti files format. *)
(** The layout of a cmt file is as follows:
<cmt> := \{<cmi>\} <cmt magic> \{cmt infos\} \{<source info>\}
where <cmi> is the cmi file format:
<cmi> := <cmi magic> <cmi info>.
More precisely, the optional <cmi> part must be present if and only if
the file is:
- a cmti, or
- a cmt, for a ml file which has no corresponding mli (hence no
corresponding cmti).
Thus, we provide a common reading function for cmi and cmt(i)
files which returns an option for each of the three parts: cmi
info, cmt info, source info. *)
open Typedtree
type binary_annots =
| Packed of Types.signature * string list
| Implementation of structure
| Interface of signature
| Partial_implementation of binary_part array
| Partial_interface of binary_part array
and binary_part =
| Partial_structure of structure
| Partial_structure_item of structure_item
| Partial_expression of expression
| Partial_pattern of pattern
| Partial_class_expr of class_expr
| Partial_signature of signature
| Partial_signature_item of signature_item
| Partial_module_type of module_type
type cmt_infos = {
cmt_modname : string;
cmt_annots : binary_annots;
cmt_comments : (string * Location.t) list;
cmt_args : string array;
cmt_sourcefile : string option;
cmt_builddir : string;
cmt_loadpath : string list;
cmt_source_digest : string option;
cmt_initial_env : Env.t;
cmt_imports : (string * Digest.t) list;
cmt_interface_digest : Digest.t option;
cmt_use_summaries : bool;
}
type error =
Not_a_typedtree of string
exception Error of error
(** [read filename] opens filename, and extract both the cmi_infos, if
it exists, and the cmt_infos, if it exists. Thus, it can be used
with .cmi, .cmt and .cmti files.
.cmti files always contain a cmi_infos at the beginning. .cmt files
only contain a cmi_infos at the beginning if there is no associated
.cmti file.
*)
val read : string -> Cmi_format.cmi_infos option * cmt_infos option
val read_cmt : string -> cmt_infos
val read_cmi : string -> Cmi_format.cmi_infos
(** [save_cmt modname filename binary_annots sourcefile initial_env sg]
writes a cmt(i) file. *)
val save_cmt :
string -> (* filename.cmt to generate *)
string -> (* module name *)
binary_annots ->
string option -> (* source file *)
Env.t -> (* initial env *)
Types.signature option -> (* if a .cmi was generated,
the signature saved there *)
unit
(* Miscellaneous functions *)
val read_magic_number : in_channel -> string
val add_saved_type : binary_part -> unit
val get_saved_types : unit -> binary_part list
val set_saved_types : binary_part list -> unit
(*
val is_magic_number : string -> bool
val read : in_channel -> Env.cmi_infos option * t
val write_magic_number : out_channel -> unit
val write : out_channel -> t -> unit
val find : string list -> string -> string
val read_signature : 'a -> string -> Types.signature * 'b list * 'c list
*)