aboutsummaryrefslogtreecommitdiffhomepage
path: root/library/lib.mli
diff options
context:
space:
mode:
Diffstat (limited to 'library/lib.mli')
-rw-r--r--library/lib.mli107
1 files changed, 91 insertions, 16 deletions
diff --git a/library/lib.mli b/library/lib.mli
index b86c08f72..90f111c4b 100644
--- a/library/lib.mli
+++ b/library/lib.mli
@@ -10,6 +10,7 @@
(*i*)
open Names
+open Libnames
open Libobject
open Summary
(*i*)
@@ -20,53 +21,127 @@ open Summary
type node =
| Leaf of obj
- | Module of dir_path
- | OpenedSection of dir_path * Summary.frozen
+ | CompilingModule of object_prefix
+ | OpenedModule of object_prefix * Summary.frozen
+ | OpenedModtype of object_prefix * Summary.frozen
+ | OpenedSection of object_prefix * Summary.frozen
| ClosedSection of bool * dir_path * library_segment
| FrozenState of Summary.frozen
-and library_entry = section_path * node
+and library_entry = object_name * node
and library_segment = library_entry list
+type lib_objects = (identifier * obj) list
-(*s Adding operations (which calls the [cache] method, and getting the
+(*s These functions iterate (or map) object functions.
+
+ [subst_segment prefix subst seg] makes an assumption that all
+ objects in [seg] have the same prefix. This prefix is universally
+ changed to [prefix].
+
+ [classify_segment seg] divides segment into objects which responded
+ with [Substitute], [Keep], [Anticipate] respectively, to the
+ [classify_object] function. The order of each returned list is the
+ same as in the input list.
+
+ [change_kns mp lib] only changes the prefix of the [kernel_name]
+ part of the [object_name] of every object to [(mp,empty_dirpath)].
+ The [section_path] part of the [object_name] and the object itself
+ are unchanged.
+*)
+
+
+val open_segment : int -> library_segment -> unit
+val load_segment : int -> library_segment -> unit
+val subst_segment :
+ object_prefix -> substitution -> library_segment -> library_segment
+val classify_segment :
+ library_segment -> library_segment * library_segment * library_segment
+val change_kns : module_path -> library_segment -> library_segment
+
+
+
+val open_objects : int -> object_prefix -> lib_objects -> unit
+val load_objects : int -> object_prefix -> lib_objects -> unit
+val subst_objects :
+ object_prefix -> substitution -> lib_objects -> lib_objects
+val classify_objects :
+ library_segment -> lib_objects * lib_objects * obj list
+
+val segment_of_objects :
+ object_prefix -> lib_objects -> library_segment
+
+(*s Adding operations (which call the [cache] method, and getting the
current list of operations (most recent ones coming first). *)
-val add_leaf : identifier -> obj -> section_path
-val add_absolutely_named_leaf : section_path -> obj -> unit
+val add_leaf : identifier -> obj -> object_name
+val add_absolutely_named_leaf : object_name -> obj -> unit
val add_anonymous_leaf : obj -> unit
+
+(* this operation adds all objects with the same name and calls load_object
+ for each of them *)
+val add_leaves : identifier -> obj list -> object_name
+
val add_frozen_state : unit -> unit
val mark_end_of_command : unit -> unit
(*s The function [contents_after] returns the current library segment,
- starting from a given section path. If not given, the entire segment
- is returned. *)
+ starting from a given section path. If not given, the entire segment
+ is returned. *)
-val contents_after : section_path option -> library_segment
+val contents_after : object_name option -> library_segment
+(* Returns true if we are inside an opened module type *)
+val is_specification : unit -> bool
+
+(* Returns the most recent OpenedThing node *)
+val what_is_opened : unit -> library_entry
(*s Opening and closing a section. *)
-val open_section : identifier -> section_path
-val close_section :
- export:bool -> identifier -> dir_path * library_segment * Summary.frozen
+val open_section : identifier -> object_prefix
+
+val close_section : export:bool -> identifier ->
+ object_prefix * library_segment * Summary.frozen
+
val sections_are_opened : unit -> bool
val make_path : identifier -> section_path
+val make_kn : identifier -> kernel_name
+
val cwd : unit -> dir_path
val sections_depth : unit -> int
val is_section_p : dir_path -> bool
-val start_module : dir_path -> unit
-val end_module : module_ident -> dir_path
-val export_module : dir_path -> library_segment
+(*s Compilation units *)
+
+val start_compilation : dir_path -> module_path -> unit
+val end_compilation : dir_path -> object_prefix * library_segment
+
+val module_dp : unit -> dir_path
+(*s Modules and module types *)
+
+val start_module : module_ident -> module_path -> Summary.frozen -> unit
+val end_module : module_ident
+ -> object_name * object_prefix * Summary.frozen * library_segment
+
+val start_modtype : module_ident -> module_path -> Summary.frozen -> unit
+val end_modtype : module_ident
+ -> object_name * object_prefix * Summary.frozen * library_segment
+
+(* Lib.add_frozen_state must be called after all of the above functions *)
+
+val current_prefix : unit -> module_path * dir_path
(*s Backtracking (undo). *)
-val reset_to : section_path -> unit
+val reset_to : object_name -> unit
val reset_name : identifier -> unit
+
+(* [back n] resets to the place corresponding to the $n$-th call of
+ [mark_end_of_command] (counting backwards) *)
val back : int -> unit
(*s We can get and set the state of the operations (used in [States]). *)