Legend:
Library
Module
Module type
Parameter
Class
Class type
Library
Module
Module type
Parameter
Class
Class type
Signature state.
This module provides a record type sig_state
containing all the informations needed for scoping p_terms and printing terms, and functions on this type for manipulating it. In particular, it provides functions open_sign
, add_symbol
, add_binop
, etc. taking a sig_state
as argument and returning a new sig_state
as result. These functions call the corresponding functions of Sign
which should not be called directly but through the current module only, in order to setup the sig_state
properly.
val create_sign : Common.Path.t -> Sign.t
create_sign path
creates a signature with path path
with ghost modules as dependencies.
type sig_state = {
signature : Sign.t;
Current signature.
*)in_scope : Term.sym Lplib.Extra.StrMap.t;
Symbols in scope.
*)alias_path : Common.Path.t Lplib.Extra.StrMap.t;
Alias to path map.
*)path_alias : string Common.Path.Map.t;
Path to alias map.
*)builtins : Term.sym Lplib.Extra.StrMap.t;
Builtins.
*)notations : float Sign.notation Term.SymMap.t;
Notations.
*)open_paths : Common.Path.Set.t;
Open modules.
*)}
State of the signature, including aliasing and accessible symbols.
type t = sig_state
val dummy : sig_state
Dummy sig_state
.
val add_symbol :
sig_state ->
Term.expo ->
Term.prop ->
Term.match_strat ->
bool ->
Common.Pos.strloc ->
Common.Pos.popt ->
Term.term ->
bool list ->
Term.term option ->
sig_state * Term.sym
add_symbol ss expo prop mstrat opaq id pos typ impl def
generates a new signature state from ss
by creating a new symbol with expo e
, property p
, strategy st
, name x
, type a
, implicit arguments impl
and optional definition def
. pos
is the position of the declaration without its definition. This new symbol is returned too.
val add_notation : sig_state -> Term.sym -> float Sign.notation -> sig_state
add_notation ss s n
maps s
notation to n
in ss
.
add_builtin ss n s
generates a new signature state from ss
by mapping the builtin n
to s
.
open_sign ss sign
extends the signature state ss
with every symbol of the signature sign
. This has the effect of putting these symbols in the scope when (possibly masking symbols with the same name). Builtins and notations are also handled in a similar way.
of_sign sign
creates a state from the signature sign
and open it as well as the ghost signatures.
type find_sym =
prt:bool ->
prv:bool ->
sig_state ->
Term.qident Common.Pos.loc ->
Term.sym
find_sym
is the type of functions used to return the symbol corresponding to a qualified / non qualified name
val find_sym : find_sym
find_sym ~prt ~prv b st qid
returns the symbol corresponding to the possibly qualified identifier qid
, or raises Fatal
. The boolean b
indicates if the error message should mention variables when qid
is unqualified. ~prt
indicates whether Term.expo.Protec
symbols from other modules are allowed. ~prv
indicates whether Term.expo.Privat
symbols are allowed.