ClangPersistentVariables.h revision 353358
1215116Sdes//===-- ClangPersistentVariables.h ------------------------------*- C++ -*-===// 276259Sgreen// 376259Sgreen// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 476259Sgreen// See https://llvm.org/LICENSE.txt for license information. 576259Sgreen// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 676259Sgreen// 776259Sgreen//===----------------------------------------------------------------------===// 876259Sgreen 976259Sgreen#ifndef liblldb_ClangPersistentVariables_h_ 1076259Sgreen#define liblldb_ClangPersistentVariables_h_ 1176259Sgreen 1276259Sgreen#include "llvm/ADT/DenseMap.h" 1376259Sgreen 1476259Sgreen#include "ClangExpressionVariable.h" 1576259Sgreen#include "ClangModulesDeclVendor.h" 1676259Sgreen 1776259Sgreen#include "lldb/Expression/ExpressionVariable.h" 1876259Sgreen 1976259Sgreennamespace lldb_private { 2076259Sgreen 2176259Sgreen/// \class ClangPersistentVariables ClangPersistentVariables.h 2276259Sgreen/// "lldb/Expression/ClangPersistentVariables.h" Manages persistent values 2376259Sgreen/// that need to be preserved between expression invocations. 2476259Sgreen/// 2576259Sgreen/// A list of variables that can be accessed and updated by any expression. See 2676259Sgreen/// ClangPersistentVariable for more discussion. Also provides an increasing, 2776259Sgreen/// 0-based counter for naming result variables. 28162852Sdesclass ClangPersistentVariables : public PersistentExpressionState { 29162852Sdespublic: 3076259Sgreen ClangPersistentVariables(); 3176259Sgreen 3276259Sgreen ~ClangPersistentVariables() override = default; 33162852Sdes 34162852Sdes // llvm casting support 35162852Sdes static bool classof(const PersistentExpressionState *pv) { 3676259Sgreen return pv->getKind() == PersistentExpressionState::eKindClang; 3776259Sgreen } 3876259Sgreen 3976259Sgreen lldb::ExpressionVariableSP 4076259Sgreen CreatePersistentVariable(const lldb::ValueObjectSP &valobj_sp) override; 4176259Sgreen 4276259Sgreen lldb::ExpressionVariableSP CreatePersistentVariable( 4376259Sgreen ExecutionContextScope *exe_scope, ConstString name, 4476259Sgreen const CompilerType &compiler_type, lldb::ByteOrder byte_order, 4576259Sgreen uint32_t addr_byte_size) override; 46126274Sdes 47126274Sdes void RemovePersistentVariable(lldb::ExpressionVariableSP variable) override; 4876259Sgreen llvm::StringRef 4976259Sgreen GetPersistentVariablePrefix(bool is_error) const override { 5092555Sdes return "$"; 5176259Sgreen } 52106121Sdes 5392555Sdes llvm::Optional<CompilerType> 5476259Sgreen GetCompilerTypeFromPersistentDecl(ConstString type_name) override; 5576259Sgreen 56215116Sdes void RegisterPersistentDecl(ConstString name, clang::NamedDecl *decl); 57215116Sdes 5876259Sgreen clang::NamedDecl *GetPersistentDecl(ConstString name); 5976259Sgreen 6076259Sgreen void AddHandLoadedClangModule(ClangModulesDeclVendor::ModuleID module) { 6176259Sgreen m_hand_loaded_clang_modules.push_back(module); 6276259Sgreen } 6392555Sdes 6476259Sgreen const ClangModulesDeclVendor::ModuleVector &GetHandLoadedClangModules() { 6576259Sgreen return m_hand_loaded_clang_modules; 6692555Sdes } 6792555Sdes 6876259Sgreenprivate: 6992555Sdes uint32_t m_next_persistent_variable_id; ///< The counter used by 7092555Sdes ///GetNextResultName(). 7176259Sgreen 7276259Sgreen typedef llvm::DenseMap<const char *, clang::NamedDecl *> PersistentDeclMap; 7376259Sgreen PersistentDeclMap 7476259Sgreen m_persistent_decls; ///< Persistent entities declared by the user. 7576259Sgreen 7699060Sdes ClangModulesDeclVendor::ModuleVector 7776259Sgreen m_hand_loaded_clang_modules; ///< These are Clang modules we hand-loaded; 7876259Sgreen ///these are the highest- 7976259Sgreen ///< priority source for macros. 8076259Sgreen}; 8176259Sgreen 8276259Sgreen} // namespace lldb_private 8376259Sgreen 8476259Sgreen#endif // liblldb_ClangPersistentVariables_h_ 8576259Sgreen