1 //===-- DynamicCheckerFunctions.h -------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLDB_EXPRESSION_DYNAMICCHECKERFUNCTIONS_H 10 #define LLDB_EXPRESSION_DYNAMICCHECKERFUNCTIONS_H 11 12 #include "lldb/lldb-types.h" 13 14 namespace lldb_private { 15 16 class DiagnosticManager; 17 class ExecutionContext; 18 19 /// Encapsulates dynamic check functions used by expressions. 20 /// 21 /// Each of the utility functions encapsulated in this class is responsible 22 /// for validating some data that an expression is about to use. Examples 23 /// are: 24 /// 25 /// a = *b; // check that b is a valid pointer 26 /// [b init]; // check that b is a valid object to send "init" to 27 /// 28 /// The class installs each checker function into the target process and makes 29 /// it available to IRDynamicChecks to use. 30 class DynamicCheckerFunctions { 31 public: 32 enum DynamicCheckerFunctionsKind { 33 DCF_Clang, 34 }; 35 DynamicCheckerFunctions(DynamicCheckerFunctionsKind kind)36 DynamicCheckerFunctions(DynamicCheckerFunctionsKind kind) : m_kind(kind) {} 37 virtual ~DynamicCheckerFunctions() = default; 38 39 /// Install the utility functions into a process. This binds the instance 40 /// of DynamicCheckerFunctions to that process. 41 /// 42 /// \param[in] diagnostic_manager 43 /// A diagnostic manager to report errors to. 44 /// 45 /// \param[in] exe_ctx 46 /// The execution context to install the functions into. 47 /// 48 /// \return 49 /// True on success; false on failure, or if the functions have 50 /// already been installed. 51 virtual bool Install(DiagnosticManager &diagnostic_manager, 52 ExecutionContext &exe_ctx) = 0; 53 virtual bool DoCheckersExplainStop(lldb::addr_t addr, Stream &message) = 0; 54 GetKind()55 DynamicCheckerFunctionsKind GetKind() const { return m_kind; } 56 57 private: 58 const DynamicCheckerFunctionsKind m_kind; 59 }; 60 } // namespace lldb_private 61 62 #endif // LLDB_EXPRESSION_DYNAMICCHECKERFUNCTIONS_H 63