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 {ax,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:
ax Axiom, Parameter or Variable(s), Hypothes,es, Context outside any sectiondef Definitioncoe Coertionthm Theoremsubclass Sub Classcanonstruc Canonical Declarationex Examplescheme Schemeclass Class declarationproj Projection from a structureinst Instancemeth Class Methoddefax Definitional assumptionprfax Logical assumptionprim Primitivevar section Variable reference (Variable,s, Hypothes,es, Context)indrec 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), multiple entries can share the same %bc and %ec %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