//===-- TypeSystem.h ------------------------------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef LLDB_SYMBOL_TYPESYSTEM_H #define LLDB_SYMBOL_TYPESYSTEM_H #include <functional> #include <mutex> #include <optional> #include <string> #include "llvm/ADT/APFloat.h" #include "llvm/ADT/APSInt.h" #include "llvm/ADT/DenseMap.h" #include "llvm/ADT/SmallBitVector.h" #include "llvm/Support/Casting.h" #include "llvm/Support/Error.h" #include "llvm/Support/JSON.h" #include "lldb/Core/PluginInterface.h" #include "lldb/Expression/Expression.h" #include "lldb/Symbol/CompilerDecl.h" #include "lldb/Symbol/CompilerDeclContext.h" #include "lldb/Symbol/Type.h" #include "lldb/Utility/Scalar.h" #include "lldb/lldb-forward.h" #include "lldb/lldb-private.h" #include "lldb/lldb-types.h" class PDBASTParser; namespace lldb_private { namespace plugin { namespace dwarf { class DWARFDIE; class DWARFASTParser; } // namespace dwarf } // namespace plugin namespace npdb { class PdbAstBuilder; } // namespace npdb /// Interface for representing a type system. /// /// Implemented by language plugins to define the type system for a given /// language. /// /// This interface extensively used opaque pointers to prevent that generic /// LLDB code has dependencies on language plugins. The type and semantics of /// these opaque pointers are defined by the TypeSystem implementation inside /// the respective language plugin. Opaque pointers from one TypeSystem /// instance should never be passed to a different TypeSystem instance (even /// when the language plugin for both TypeSystem instances is the same). /// /// Most of the functions in this class should not be called directly but only /// called by their respective counterparts in CompilerType, CompilerDecl and /// CompilerDeclContext. /// /// \see lldb_private::CompilerType /// \see lldb_private::CompilerDecl /// \see lldb_private::CompilerDeclContext class TypeSystem : public PluginInterface, public std::enable_shared_from_this<TypeSystem> { … }; class TypeSystemMap { … }; } // namespace lldb_private #endif // LLDB_SYMBOL_TYPESYSTEM_H