Solidity_checker_TYPES
type env = {
upper_env : env option;
mutable ident_map : (ident_desc * origin) list Solidity_common.IdentMap.t;
mutable using_for : (env * type_ list) Solidity_common.AbsLongIdentMap.t;
}
and ident_desc =
| Alias of alias_desc
| Module of module_desc
| Contract of contract_desc
| Type of type_desc
| Variable of variable_desc
| Function of function_desc
| Modifier of modifier_desc
| Event of event_desc
| Field of field_desc
| Constr of constr_desc
and alias_desc = {
alias_abs_name : Solidity_common.absolute Solidity_common.LongIdent.t;
alias_pos : Solidity_common.pos;
alias_target_id : Solidity_common.Ident.t;
alias_target_file : string;
alias_target_env : env;
mutable alias_targets : (ident_desc * origin) list;
}
and module_desc = {
module_abs_name : Solidity_common.absolute Solidity_common.LongIdent.t;
module_pos : Solidity_common.pos;
module_file : string;
module_env : env;
}
and enum_desc = {
enum_abs_name : Solidity_common.absolute Solidity_common.LongIdent.t;
enum_pos : Solidity_common.pos;
enum_values : (Solidity_common.Ident.t * int) list;
}
and constr_desc = {
constr_enum_desc : enum_desc;
constr_name : Solidity_common.Ident.t;
constr_value : int;
constr_type : type_;
}
and struct_desc = {
struct_abs_name : Solidity_common.absolute Solidity_common.LongIdent.t;
mutable struct_fields : (Solidity_common.Ident.t * type_) list;
mutable has_mapping : bool;
struct_def : Solidity_ast.struct_definition;
}
and field_desc = {
field_struct_desc : struct_desc;
field_name : Solidity_common.Ident.t;
field_type : type_;
}
and contract_desc = {
contract_abs_name : Solidity_common.absolute Solidity_common.LongIdent.t;
contract_env : env;
mutable contract_hierarchy : (Solidity_common.absolute
Solidity_common.LongIdent.t
* contract_desc)
list;
contract_def : Solidity_ast.contract_definition;
}
and variable_desc = {
variable_abs_name : Solidity_common.absolute Solidity_common.LongIdent.t;
mutable variable_type : type_;
variable_visibility : Solidity_ast.visibility;
variable_mutability : Solidity_ast.var_mutability;
variable_local : bool;
mutable variable_override : Solidity_common.absolute
Solidity_common.LongIdent.t
list
option;
mutable variable_getter : function_desc option;
variable_is_primitive : bool;
variable_def : Solidity_ast.state_variable_definition option;
mutable variable_ops : (function_desc * variable_operation) list;
}
and function_desc = {
function_abs_name : Solidity_common.absolute Solidity_common.LongIdent.t;
mutable function_params : (type_ * Solidity_common.Ident.t option) list;
mutable function_returns : (type_ * Solidity_common.Ident.t option) list;
function_returns_lvalue : bool;
function_visibility : Solidity_ast.visibility;
function_mutability : Solidity_ast.fun_mutability;
mutable function_override : Solidity_common.absolute
Solidity_common.LongIdent.t
list
option;
mutable function_selector : string option;
function_is_method : bool;
function_is_primitive : bool;
function_def : Solidity_ast.function_definition option;
mutable function_ops : (variable_desc * variable_operation) list;
mutable function_purity : function_purity;
}
and modifier_desc = {
modifier_abs_name : Solidity_common.absolute Solidity_common.LongIdent.t;
mutable modifier_params : (type_ * Solidity_common.Ident.t option) list;
modifier_def : Solidity_ast.modifier_definition;
}
and event_desc = {
event_abs_name : Solidity_common.absolute Solidity_common.LongIdent.t;
mutable event_params : (type_ * Solidity_common.Ident.t option) list;
event_def : Solidity_ast.event_definition;
}
and function_options = {
kind : fun_kind;
value : bool;
gas : bool;
salt : bool;
fields : Solidity_common.StringSet.t;
}
and type_ =
| TBool
| TInt of int
| TUint of int
| TFixed of int * int
| TUfixed of int * int
| TAddress of bool
| TFixBytes of int
| TBytes of location
| TString of location
| TEnum of Solidity_common.absolute Solidity_common.LongIdent.t * enum_desc
| TStruct of Solidity_common.absolute Solidity_common.LongIdent.t
* struct_desc
* location
| TContract of Solidity_common.absolute Solidity_common.LongIdent.t
* contract_desc
* bool
| TArray of type_ * Z.t option * location
| TMapping of type_ * type_ * location
| TFunction of function_desc * function_options
| TAbstract of abstract_type
| TOptional of type_
| TAny
| TDots
| TModifier of modifier_desc
| TEvent of event_desc
| TTuple of type_ option list
| TArraySlice of type_ * location
| TType of type_
| TMagic of magic_type
| TModule of Solidity_common.absolute Solidity_common.LongIdent.t * module_desc
| TRationalConst of Q.t * int option
| TLiteralString of string
and magic_type =
| TMetaType of type_
| TBlock
| TMsg
| TTx
| TAbi
| TTvm
| TStatic of (Solidity_common.Ident.t option * type_) list
| TMath
| TRnd
type options = {
allow_empty : bool;
call_args : args option;
fun_returns : type_ list;
in_loop : bool;
in_function : function_desc option;
in_modifier : bool;
current_hierarchy : Solidity_common.absolute Solidity_common.LongIdent.t list;
current_contract : contract_desc option;
}