DumpglobThis file implements the Coq's .glob file format, which provides information about the objects that are defined and referenced from a Coq file.
The .glob file format is notably used by coqdoc and coq2html to generate links and other documentation meta-data.
Note that we consider this format a legacy one, and no stability guarantees are provided as of today, as we search to replace this format with a more structured and strongly-typed API.
However, we do provide up to date documentation about the format of .glob files below.
.glob file format.glob files contain a header, and then a list of entries, with one line per entry.
.glob headerThe header consists of two lines:
DIGEST: %md5sum_of_file F%modpath
where %modpath is the fully-qualified module name of the library that the .glob file refers to. %md5sum_of_file may be NO if -dump-glob file was used.
.glob entriesThere are 2 kinds of .glob entries:
%kind %bc:%ec %secpath %name
where %kind is one of {def,coe,subclass,canonstruc,ex,scheme,proj,inst,meth,defax,prfax,thm,prim,class,var,indrec,rec,corec,ind,variant,coind,constr,not,binder,lib,mod,modtype}, meaning:
def Definitioncoe Coertionthm Theoremsubclass Sub Classcanonstruc Canonical Declarationex Examplescheme Schemeclass Class declarationproj Projection from a structureinst Instancemeth Class Methoddefax Definitional assumptionprfax Logical assumptionprim Primitivevar Variable referenceindrec Inductiverec Inductive (variant)corec Coinductiveind Recordvariant Record (variant)coind Coinductive Recordconstr Constructornot Notationbinder Binderlib Requiremod Module Reference (Import, Module start / end)modtype Module Type%bc and %ec are respectively the start and end byte locations in the file (0-indexed) %secpath the section path (or <> if no section path) and %name the name of the defined object, or also <> in where no name applies.
Section paths are ...
%name is encoded as :entry:scope:notation_key where _ is used to replace spaces in the notation key, %entry is left empty if the notation entry is constr, and similarly %scope is empty if the corresponding notation has no associated scope.:number is added to distinguish uniquely different binding variables of the same name in a file.R%bc:%ec %filepath %secpath %name %kind
where %bc, %ec, %name, and %kind are as the above; %filepath contains the file module path the object that the references lives in, whereas %name may contain non-file non-directory module names.
val push_output : glob_output -> unitpush_output o temporarily overrides the output location to o. The original output can be restored using pop_output
val with_glob_output : glob_output -> ( unit -> 'a ) -> unit -> 'aval add_glob : ?loc:Loc.t -> Names.GlobRef.t -> unitval add_glob_kn : ?loc:Loc.t -> Names.KerName.t -> unitval dump_definition : Names.lident -> bool -> string -> unitval dump_moddef : ?loc:Loc.t -> Names.ModPath.t -> string -> unitval dump_modref : ?loc:Loc.t -> Names.ModPath.t -> string -> unitval dump_reference : ?loc:Loc.t -> string -> string -> string -> unitval dump_secvar : ?loc:Loc.t -> Names.Id.t -> unitval dump_libref : ?loc:Loc.t -> Names.DirPath.t -> string -> unitval dump_notation_location :
(int * int) list ->
Constrexpr.notation ->
(Notation.notation_location * Notation_term.scope_name option) ->
unitval dump_binding : ?loc:Loc.t -> string -> unitval dump_notation :
Constrexpr.notation CAst.t ->
Notation_term.scope_name option ->
bool ->
unitval dump_constraint : Names.lname -> bool -> string -> unitval type_of_global_ref : Names.GlobRef.t -> stringval add_constant_kind : Names.Constant.t -> Decls.logical_kind -> unitRegistration of constant information
val constant_kind : Names.Constant.t -> Decls.logical_kind