ClangPersistentVariables.h revision 360660
1//===-- ClangPersistentVariables.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 liblldb_ClangPersistentVariables_h_ 10#define liblldb_ClangPersistentVariables_h_ 11 12#include "llvm/ADT/DenseMap.h" 13 14#include "ClangExpressionVariable.h" 15#include "ClangModulesDeclVendor.h" 16 17#include "lldb/Expression/ExpressionVariable.h" 18 19namespace lldb_private { 20 21/// \class ClangPersistentVariables ClangPersistentVariables.h 22/// "lldb/Expression/ClangPersistentVariables.h" Manages persistent values 23/// that need to be preserved between expression invocations. 24/// 25/// A list of variables that can be accessed and updated by any expression. See 26/// ClangPersistentVariable for more discussion. Also provides an increasing, 27/// 0-based counter for naming result variables. 28class ClangPersistentVariables : public PersistentExpressionState { 29public: 30 ClangPersistentVariables(); 31 32 ~ClangPersistentVariables() override = default; 33 34 // llvm casting support 35 static bool classof(const PersistentExpressionState *pv) { 36 return pv->getKind() == PersistentExpressionState::eKindClang; 37 } 38 39 lldb::ExpressionVariableSP 40 CreatePersistentVariable(const lldb::ValueObjectSP &valobj_sp) override; 41 42 lldb::ExpressionVariableSP CreatePersistentVariable( 43 ExecutionContextScope *exe_scope, ConstString name, 44 const CompilerType &compiler_type, lldb::ByteOrder byte_order, 45 uint32_t addr_byte_size) override; 46 47 void RemovePersistentVariable(lldb::ExpressionVariableSP variable) override; 48 llvm::StringRef 49 GetPersistentVariablePrefix(bool is_error) const override { 50 return "$"; 51 } 52 53 llvm::Optional<CompilerType> 54 GetCompilerTypeFromPersistentDecl(ConstString type_name) override; 55 56 void RegisterPersistentDecl(ConstString name, clang::NamedDecl *decl); 57 58 clang::NamedDecl *GetPersistentDecl(ConstString name); 59 60 void AddHandLoadedClangModule(ClangModulesDeclVendor::ModuleID module) { 61 m_hand_loaded_clang_modules.push_back(module); 62 } 63 64 const ClangModulesDeclVendor::ModuleVector &GetHandLoadedClangModules() { 65 return m_hand_loaded_clang_modules; 66 } 67 68private: 69 uint32_t m_next_persistent_variable_id; ///< The counter used by 70 ///GetNextResultName(). 71 72 typedef llvm::DenseMap<const char *, clang::NamedDecl *> PersistentDeclMap; 73 PersistentDeclMap 74 m_persistent_decls; ///< Persistent entities declared by the user. 75 76 ClangModulesDeclVendor::ModuleVector 77 m_hand_loaded_clang_modules; ///< These are Clang modules we hand-loaded; 78 ///these are the highest- 79 ///< priority source for macros. 80}; 81 82} // namespace lldb_private 83 84#endif // liblldb_ClangPersistentVariables_h_ 85