Module C_typing


module C_typing: sig  end

val fold_constants : Ctt_abstree.expr -> Ctt_abstree.expr
exception TypeError_untyped of C_abstree.expr * string
exception TypeError_typed of Ctt_abstree.expr * string
exception TypeError_typed_t of Ctt_abstree.expr * string * Ctt_abstree.c_type
exception Type_Error_local of string
exception NotConstant
val split_list_at_nth : int -> 'a list -> 'a list * 'a list
val loc_of_p : C_abstree.expr -> Ctt_abstree.location
val make_expr_p : Ctt_abstree.expr_desc ->
Ctt_abstree.c_type -> orig:C_abstree.expr -> Ctt_abstree.expr
val make_expr_t : Ctt_abstree.expr_desc ->
Ctt_abstree.c_type -> orig:Ctt_abstree.expr -> Ctt_abstree.expr
val exp_constant_zero : loc:Ctt_abstree.location -> Ctt_abstree.expr
val exp_constant_one : loc:Ctt_abstree.location -> Ctt_abstree.expr
val exp_constant_one_ptrdiff_t : loc:Ctt_abstree.location -> Ctt_abstree.expr
val make_new_struct_id : unit -> Ctt_abstree.struct_id
val get_struct_desc : env:Ctt_abstree.environment ->
Ctt_abstree.struct_id -> Ctt_abstree.struct_desc
val get_field_type_from_desc : Ctt_abstree.identifier ->
('a * Ctt_abstree.struct_field) list -> Ctt_abstree.c_type
val get_field_type : env:Ctt_abstree.environment ->
Ctt_abstree.c_type -> Ctt_abstree.identifier -> Ctt_abstree.c_type
val lookup_var_type_from_local : (Ctt_abstree.identifier * Ctt_abstree.local_binding) list list ->
Ctt_abstree.identifier -> Ctt_abstree.identifier * Ctt_abstree.variableType
val lookup_var_type_from_global : env:Ctt_abstree.environment ->
Ctt_abstree.identifier -> Ctt_abstree.identifier * Ctt_abstree.variableType
val lookup_var_type : env:Ctt_abstree.environment ->
Ctt_abstree.identifier -> Ctt_abstree.identifier * Ctt_abstree.variableType
val add_global_binding_to_env : env:Ctt_abstree.environment ->
Ctt_abstree.identifier ->
Ctt_abstree.global_storage_class ->
is_tentative:bool -> Ctt_abstree.variableType -> Ctt_abstree.identifier
val var_seqno : int Pervasives.ref
val add_local_binding_to_env : env:Ctt_abstree.environment ->
Ctt_abstree.identifier ->
Ctt_abstree.local_storage_class ->
Ctt_abstree.variableType -> Ctt_abstree.identifier
val extend_local_frame_env : env:Ctt_abstree.environment -> unit
val shrink_local_frame_env : env:Ctt_abstree.environment -> unit
val qual_eq : Ctt_abstree.c_type -> Ctt_abstree.c_type -> bool
val qual_gt : Ctt_abstree.c_type -> Ctt_abstree.c_type -> bool
val qual_lt : Ctt_abstree.c_type -> Ctt_abstree.c_type -> bool
val qual_dcare : 'a -> 'b -> bool
val equal_type : ?check_qual:(Ctt_abstree.c_type -> Ctt_abstree.c_type -> bool) ->
?check_iqual:(Ctt_abstree.c_type -> Ctt_abstree.c_type -> bool) ->
Ctt_abstree.c_type -> Ctt_abstree.c_type -> bool
val type_of : Ctt_abstree.expr -> Ctt_abstree.c_type
val is_constant_zero : Ctt_abstree.expr -> bool
val is_constant_null : Ctt_abstree.expr -> bool
val is_numeric : Ctt_abstree.expr -> bool
val is_pointer_nonnull : Ctt_abstree.expr -> bool
val is_pointer_or_null : Ctt_abstree.expr -> bool
val is_void_pointer : Ctt_abstree.expr -> bool
val coerce_implicit_pointer : Ctt_abstree.expr -> Ctt_abstree.expr
val make_null_pointer : Ctt_abstree.c_type -> orig:Ctt_abstree.expr -> Ctt_abstree.expr
val cast_coerce : Ctt_abstree.expr -> Ctt_abstree.c_type -> Ctt_abstree.expr
val cast_coerce : Ctt_abstree.expr -> Ctt_abstree.c_type -> Ctt_abstree.expr
val subset_qualifiers : sub:Ctt_abstree.c_type -> sup:Ctt_abstree.c_type -> bool
val assign_coerce : ?check_qual:(Ctt_abstree.c_type -> Ctt_abstree.c_type -> bool) ->
?struct_allowed:bool ->
Ctt_abstree.expr -> Ctt_abstree.c_type -> Ctt_abstree.expr
val assign_coerce : ?check_qual:(Ctt_abstree.c_type -> Ctt_abstree.c_type -> bool) ->
?struct_allowed:bool ->
Ctt_abstree.expr -> Ctt_abstree.c_type -> Ctt_abstree.expr
val arithmetic_coerce : Ctt_abstree.expr -> Ctt_abstree.c_type -> Ctt_abstree.expr
val arithmetic_coerce : Ctt_abstree.expr -> Ctt_abstree.c_type -> Ctt_abstree.expr
val ensure_same_type : ?check_qual:(Ctt_abstree.c_type -> Ctt_abstree.c_type -> bool) ->
?check_iqual:(Ctt_abstree.c_type -> Ctt_abstree.c_type -> bool) ->
Ctt_abstree.expr -> Ctt_abstree.expr -> unit
val coerce_merge_numeric : Ctt_abstree.expr -> Ctt_abstree.expr -> Ctt_abstree.expr * Ctt_abstree.expr
val coerce_merge_pointer : Ctt_abstree.expr -> Ctt_abstree.expr -> Ctt_abstree.expr * Ctt_abstree.expr
val coerce_merge : Ctt_abstree.expr -> Ctt_abstree.expr -> Ctt_abstree.expr * Ctt_abstree.expr
val size_of_type : env:Ctt_abstree.environment -> Ctt_abstree.c_type -> Big_int.big_int option
val align_of_type : env:Ctt_abstree.environment -> Ctt_abstree.c_type -> Big_int.big_int option
val is_sized_pointer : env:Ctt_abstree.environment -> Ctt_abstree.expr -> bool
val ensure_numeric : Ctt_abstree.expr -> unit
val ensure_not_void : Ctt_abstree.expr -> unit
val ensure_integer : Ctt_abstree.expr -> unit
val ensure_sized_pointer : env:Ctt_abstree.environment -> Ctt_abstree.expr -> unit
val coerce_to_boolean : Ctt_abstree.expr -> Ctt_abstree.expr
val coerce_at_least_integer : Ctt_abstree.expr -> Ctt_abstree.expr
val promote_KandR : Ctt_abstree.expr -> Ctt_abstree.expr
val resolv_function_type : Ctt_abstree.c_type -> Ctt_abstree.c_type * Ctt_abstree.c_type list * bool
val cvt_binop : C_abstree.binop -> Ctt_abstree.binop
val get_integer_constant_value : Ctt_abstree.expr -> Big_int.big_int
val convert_funcarg_type : Ctt_abstree.c_type -> Ctt_abstree.c_type
val define_enum_item : env:Ctt_abstree.environment ->
Ctt_abstree.identifier -> Big_int.big_int -> unit
val define_enum : env:Ctt_abstree.environment -> Ctt_abstree.identifier -> unit
val declare_enum : env:Ctt_abstree.environment -> Ctt_abstree.identifier -> unit
val make_incomplete_struct_definition : env:Ctt_abstree.environment ->
is_union:Ctt_abstree.union_flag -> Ctt_abstree.struct_id
val declare_struct : env:Ctt_abstree.environment ->
is_union:Ctt_abstree.union_flag ->
Ctt_abstree.identifier -> Ctt_abstree.struct_id
val set_struct_desc : env:Ctt_abstree.environment ->
Ctt_abstree.struct_id -> Ctt_abstree.struct_desc -> unit
val define_named_struct : env:Ctt_abstree.environment ->
is_union:Ctt_abstree.union_flag ->
Ctt_abstree.identifier -> Ctt_abstree.struct_desc -> Ctt_abstree.struct_id
val define_anonymous_struct : env:Ctt_abstree.environment ->
is_union:'a -> Ctt_abstree.struct_desc -> Ctt_abstree.struct_id
val parse_struct_definition : is_union:Ctt_abstree.union_flag ->
env:Ctt_abstree.environment ->
C_abstree.struct_declaration list -> Ctt_abstree.struct_desc
val parse_enum_definition : env:Ctt_abstree.environment -> C_abstree.enumerator list -> unit
val specs_to_type : env:Ctt_abstree.environment ->
C_abstree.specifier_qualifier list ->
C_abstree.storage_class option * Ctt_abstree.c_type
val parse_argtypes_iter : (Ctt_abstree.identifier * Ctt_abstree.c_type) list ->
env:Ctt_abstree.environment ->
C_abstree.parameter_type list ->
(Ctt_abstree.identifier * Ctt_abstree.c_type) list * bool
val parse_argtypes : (Ctt_abstree.identifier * Ctt_abstree.c_type) list ->
env:Ctt_abstree.environment ->
C_abstree.parameter_type list ->
(Ctt_abstree.identifier * Ctt_abstree.c_type) list * bool
val decl_to_type : env:Ctt_abstree.environment ->
C_abstree.abstract_declarator ->
Ctt_abstree.c_type ->
C_abstree.identifier * Ctt_abstree.c_type *
(Ctt_abstree.identifier * Ctt_abstree.c_type) list
val type_of_typename : env:Ctt_abstree.environment -> C_abstree.type_name -> Ctt_abstree.c_type
val add_type_to_expr : env:Ctt_abstree.environment -> C_abstree.expr -> Ctt_abstree.expr
val add_type_to_expr_simple : env:Ctt_abstree.environment -> C_abstree.expr -> Ctt_abstree.expr
val get_return_type : env:Ctt_abstree.environment -> Ctt_abstree.c_type

type initdatum =
| Ilist of initstream
| Isingle of Ctt_abstree.expr
| Istring of Ctt_abstree.expr * string


type initstream = {
   mutable ist_dat : initdatum list;
   ist_loc : Ctt_abstree.location;
}
val peek_stream : initstream -> initdatum
val pop_stream : initstream -> initdatum
val is_next_list_stream : initstream -> bool
val is_next_string_stream : initstream -> bool
val isempty_stream : initstream -> bool
val parse_list_initializations : env:Ctt_abstree.environment ->
initstream ->
Ctt_abstree.c_type ->
Big_int.big_int option -> Ctt_abstree.ctt_initializer list
val parse_struct_initializations : env:Ctt_abstree.environment ->
initstream -> Ctt_abstree.struct_id -> Ctt_abstree.ctt_initializer
val parse_initialization : env:Ctt_abstree.environment ->
C_abstree.c_initializer ->
Ctt_abstree.c_type -> Ctt_abstree.c_type * Ctt_abstree.ctt_initializer
val make_stream : env:Ctt_abstree.environment -> C_abstree.c_initializer -> initdatum
val parse_initialization : env:Ctt_abstree.environment ->
C_abstree.c_initializer ->
Ctt_abstree.c_type -> Ctt_abstree.c_type * Ctt_abstree.ctt_initializer
val parse_local_declarators : Ctt_abstree.local_storage_class ->
Ctt_abstree.c_type ->
(Ctt_abstree.local_storage_class * Ctt_abstree.c_type *
Ctt_abstree.identifier * Ctt_abstree.ctt_initializer option)
list ->
env:Ctt_abstree.environment ->
C_abstree.init_declarator list ->
(Ctt_abstree.local_storage_class * Ctt_abstree.c_type *
Ctt_abstree.identifier * Ctt_abstree.ctt_initializer option)
list
val parse_local_declarations : env:Ctt_abstree.environment ->
C_abstree.declaration list ->
(Ctt_abstree.local_storage_class * Ctt_abstree.c_type *
Ctt_abstree.identifier * Ctt_abstree.ctt_initializer option)
list
val parse_local_declarations : env:Ctt_abstree.environment ->
C_abstree.declaration list ->
(Ctt_abstree.local_storage_class * Ctt_abstree.c_type *
Ctt_abstree.identifier * Ctt_abstree.ctt_initializer option)
list
val add_type_to_statement : env:Ctt_abstree.environment -> C_abstree.statement -> Ctt_abstree.statement
val parse_global_declarators : Ctt_abstree.global_storage_class * bool * bool ->
Ctt_abstree.c_type ->
Ctt_abstree.global_declaration_desc list ->
env:Ctt_abstree.environment ->
C_abstree.init_declarator list -> Ctt_abstree.global_declaration_desc list
val parse_global_declarations : C_abstree.declaration list ->
Ctt_abstree.environment * Ctt_abstree.global_declaration_desc list
val empty_environment : unit -> Ctt_abstree.environment
val parse_global_declarations : C_abstree.declaration list ->
Ctt_abstree.environment * Ctt_abstree.global_declaration_desc list