(* * Copyright (c) 2013-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 (** Module that contains constants and global state used in the frontend *) type clang_lang = C | CPP | ObjC | ObjCPP [@@deriving compare] val string_of_clang_lang : clang_lang -> string val equal_clang_lang : clang_lang -> clang_lang -> bool type exception_details = { msg: string ; position: Logging.ocaml_pos ; source_range: Clang_ast_t.source_range ; ast_node: string option } exception Unimplemented of exception_details val unimplemented : Logging.ocaml_pos -> Clang_ast_t.source_range -> ?ast_node:string -> ('a, Format.formatter, unit, _) format4 -> 'a (** Raise Unimplemented. This is caught at the level of translating a method and makes the frontend give up on that method. *) exception IncorrectAssumption of exception_details val incorrect_assumption : Logging.ocaml_pos -> Clang_ast_t.source_range -> ?ast_node:string -> ('a, Format.formatter, unit, _) format4 -> 'a (** Used to mark places in the frontend that incorrectly assume something to be impossible. TODO(t21762295) get rid of all instances of this. *) type translation_unit_context = {lang: clang_lang; source_file: SourceFile.t} exception Invalid_declaration (** Constants *) val alloc : string val assert_fail : string val assert_rtn : string val biniou_buffer_size : int val builtin_expect : string val builtin_memset_chk : string val builtin_object_size : string val ckcomponent_cl : string val ckcomponentcontroller_cl : string val clang_bin : string -> string (** Script to run our own clang. The argument is expected to be either "" or "++". *) val class_method : string val fbAssertWithSignalAndLogFunctionHelper : string val google_LogMessageFatal : string val google_MakeCheckOpString : string val handleFailureInFunction : string val handleFailureInMethod : string val id_cl : string val infer : string val infer_skip_fun : string val infer_skip_gcc_asm_stmt : string val infer_generic_selection_expr : string val init : string val is_kind_of_class : string val malloc : string val new_str : string val next_object : string val nsproxy_cl : string val nsobject_cl : string val nsstring_cl : string val objc_class : string val objc_object : string val return_param : string val self : string val std_addressof : QualifiedCppName.Match.quals_matcher val string_with_utf8_m : string val this : string val replace_with_deref_first_arg_attr : string val modeled_function_attributes : string list (** Global state *) val enum_map : (Clang_ast_t.pointer option * Exp.t option) ClangPointers.Map.t ref (** Map from enum constants pointers to their predecesor and their sil value *) val global_translation_unit_decls : Clang_ast_t.decl list ref val sil_types_map : Typ.desc Clang_ast_extend.TypePointerMap.t ref (** Map from type pointers (clang pointers and types created later by frontend) to sil types Populated during frontend execution when new type is found *) val procedures_attempted : int ref val procedures_failed : int ref val get_fresh_block_index : unit -> int val reset_block_counter : unit -> unit val reset_global_state : unit -> unit val tableaux_evaluation : bool