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