(* * Copyright (c) 2015-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. *) open! IStd (** Attributes of a procedure. *) type objc_accessor_type = Objc_getter of Typ.Struct.field | Objc_setter of Typ.Struct.field val kind_of_objc_accessor_type : objc_accessor_type -> string type var_data = { name: Mangled.t ; typ: Typ.t ; modify_in_block: bool (** __block attribute of Objective-C variables, means that it will be modified inside a block *) ; is_constexpr: bool } type t = { access: PredSymb.access (** visibility access *) ; captured: (Mangled.t * Typ.t) list (** name and type of variables captured in blocks *) ; mutable did_preanalysis: bool (** true if we performed preanalysis on the CFG for this proc *) ; exceptions: string list (** exceptions thrown by the procedure *) ; formals: (Mangled.t * Typ.t) list (** name and type of formal parameters *) ; const_formals: int list (** list of indices of formals that are const-qualified *) ; func_attributes: PredSymb.func_attribute list ; is_abstract: bool (** the procedure is abstract *) ; is_bridge_method: bool (** the procedure is a bridge method *) ; is_defined: bool (** true if the procedure is defined, and not just declared *) ; is_cpp_noexcept_method: bool (** the procedure is an C++ method annotated with "noexcept" *) ; is_java_synchronized_method: bool (** the procedure is a Java synchronized method *) ; is_model: bool (** the procedure is a model *) ; is_specialized: bool (** the procedure is a clone specialized for dynamic dispatch handling *) ; is_synthetic_method: bool (** the procedure is a synthetic method *) ; is_variadic: bool (** the procedure is variadic, only supported for Clang procedures *) ; clang_method_kind: ClangMethodKind.t (** the kind of method the procedure is *) ; loc: Location.t (** location of this procedure in the source code *) ; translation_unit: SourceFile.t (** source file where the procedure was captured *) ; mutable locals: var_data list (** name, type and attributes of local variables *) ; method_annotation: Annot.Method.t (** annotations for all methods *) ; objc_accessor: objc_accessor_type option (** type of ObjC accessor, if any *) ; proc_name: Typ.Procname.t (** name of the procedure *) ; ret_type: Typ.t (** return type *) ; has_added_return_param: bool (** whether or not a return param was added *) } val default : SourceFile.t -> Typ.Procname.t -> t (** Create a proc_attributes with default values. *) val pp : Format.formatter -> t -> unit module SQLite : SqliteUtils.Data with type t = t