Loading lldb/include/lldb/Symbol/ClangASTContext.h +5 −3 Original line number Diff line number Diff line Loading @@ -41,15 +41,17 @@ namespace lldb_private { class Declaration; class ClangASTContext : public TypeSystem { // LLVM RTTI support static char ID; public: typedef void (*CompleteTagDeclCallback)(void *baton, clang::TagDecl *); typedef void (*CompleteObjCInterfaceDeclCallback)(void *baton, clang::ObjCInterfaceDecl *); // llvm casting support static bool classof(const TypeSystem *ts) { return ts->getKind() == TypeSystem::eKindClang; } bool isA(const void *ClassID) const override { return ClassID == &ID; } static bool classof(const TypeSystem *ts) { return ts->isA(&ID); } // Constructors and Destructors explicit ClangASTContext(llvm::StringRef triple = ""); Loading lldb/include/lldb/Symbol/TypeSystem.h +3 −40 Original line number Diff line number Diff line Loading @@ -52,47 +52,11 @@ struct LanguageSet { /// Interface for representing the Type Systems in different languages. class TypeSystem : public PluginInterface { public: // Intrusive type system that allows us to use llvm casting. // // To add a new type system: // // 1 - Add a new enumeration for llvm casting below for your TypeSystem // subclass, here we will use eKindFoo // // 2 - Your TypeSystem subclass will inherit from TypeSystem and needs // to implement a static classof() function that returns your // enumeration: // // class Foo : public lldb_private::TypeSystem // { // static bool classof(const TypeSystem *ts) // { // return ts->getKind() == TypeSystem::eKindFoo; // } // }; // // 3 - Contruct your TypeSystem subclass with the enumeration from below // // Foo() : // TypeSystem(TypeSystem::eKindFoo), // ... // { // } // // Then you can use the llvm casting on any "TypeSystem *" to get an instance // of your subclass. enum LLVMCastKind { eKindClang, eKindSwift, kNumKinds }; // Constructors and Destructors TypeSystem(LLVMCastKind kind); ~TypeSystem() override; LLVMCastKind getKind() const { return m_kind; } // LLVM RTTI support virtual bool isA(const void *ClassID) const = 0; static lldb::TypeSystemSP CreateInstance(lldb::LanguageType language, Module *module); Loading Loading @@ -493,8 +457,7 @@ public: virtual bool IsMeaninglessWithoutDynamicResolution(void *type); protected: const LLVMCastKind m_kind; // Support for llvm casting SymbolFile *m_sym_file; SymbolFile *m_sym_file = nullptr; }; class TypeSystemMap { Loading lldb/source/Symbol/ClangASTContext.cpp +5 −6 Original line number Diff line number Diff line Loading @@ -337,6 +337,8 @@ static ClangASTMap &GetASTMap() { return *g_map_ptr; } char ClangASTContext::ID; bool ClangASTContext::IsOperator(llvm::StringRef name, clang::OverloadedOperatorKind &op_kind) { // All operators have to start with "operator". Loading Loading @@ -522,8 +524,7 @@ static void ParseLangArgs(LangOptions &Opts, InputKind IK, const char *triple) { Opts.NoInlineDefine = !Opt; } ClangASTContext::ClangASTContext(llvm::StringRef target_triple) : TypeSystem(TypeSystem::eKindClang) { ClangASTContext::ClangASTContext(llvm::StringRef target_triple) { if (!target_triple.empty()) SetTargetTriple(target_triple); // The caller didn't pass an ASTContext so create a new one for this Loading @@ -531,16 +532,14 @@ ClangASTContext::ClangASTContext(llvm::StringRef target_triple) CreateASTContext(); } ClangASTContext::ClangASTContext(ArchSpec arch) : TypeSystem(TypeSystem::eKindClang) { ClangASTContext::ClangASTContext(ArchSpec arch) { SetTargetTriple(arch.GetTriple().str()); // The caller didn't pass an ASTContext so create a new one for this // ClangASTContext. CreateASTContext(); } ClangASTContext::ClangASTContext(ASTContext &existing_ctxt) : TypeSystem(TypeSystem::eKindClang) { ClangASTContext::ClangASTContext(ASTContext &existing_ctxt) { SetTargetTriple(existing_ctxt.getTargetInfo().getTriple().str()); m_ast_up.reset(&existing_ctxt); Loading lldb/source/Symbol/CompilerDecl.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -7,13 +7,14 @@ //===----------------------------------------------------------------------===// #include "lldb/Symbol/CompilerDecl.h" #include "lldb/Symbol/ClangASTContext.h" #include "lldb/Symbol/CompilerDeclContext.h" #include "lldb/Symbol/TypeSystem.h" using namespace lldb_private; bool CompilerDecl::IsClang() const { return IsValid() && m_type_system->getKind() == TypeSystem::eKindClang; return IsValid() && llvm::isa<ClangASTContext>(m_type_system); } ConstString CompilerDecl::GetName() const { Loading lldb/source/Symbol/CompilerDeclContext.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "lldb/Symbol/CompilerDeclContext.h" #include "lldb/Symbol/ClangASTContext.h" #include "lldb/Symbol/CompilerDecl.h" #include "lldb/Symbol/TypeSystem.h" #include <vector> Loading @@ -24,7 +25,7 @@ CompilerDeclContext::FindDeclByName(ConstString name, } bool CompilerDeclContext::IsClang() const { return IsValid() && m_type_system->getKind() == TypeSystem::eKindClang; return IsValid() && llvm::isa<ClangASTContext>(m_type_system); } ConstString CompilerDeclContext::GetName() const { Loading Loading
lldb/include/lldb/Symbol/ClangASTContext.h +5 −3 Original line number Diff line number Diff line Loading @@ -41,15 +41,17 @@ namespace lldb_private { class Declaration; class ClangASTContext : public TypeSystem { // LLVM RTTI support static char ID; public: typedef void (*CompleteTagDeclCallback)(void *baton, clang::TagDecl *); typedef void (*CompleteObjCInterfaceDeclCallback)(void *baton, clang::ObjCInterfaceDecl *); // llvm casting support static bool classof(const TypeSystem *ts) { return ts->getKind() == TypeSystem::eKindClang; } bool isA(const void *ClassID) const override { return ClassID == &ID; } static bool classof(const TypeSystem *ts) { return ts->isA(&ID); } // Constructors and Destructors explicit ClangASTContext(llvm::StringRef triple = ""); Loading
lldb/include/lldb/Symbol/TypeSystem.h +3 −40 Original line number Diff line number Diff line Loading @@ -52,47 +52,11 @@ struct LanguageSet { /// Interface for representing the Type Systems in different languages. class TypeSystem : public PluginInterface { public: // Intrusive type system that allows us to use llvm casting. // // To add a new type system: // // 1 - Add a new enumeration for llvm casting below for your TypeSystem // subclass, here we will use eKindFoo // // 2 - Your TypeSystem subclass will inherit from TypeSystem and needs // to implement a static classof() function that returns your // enumeration: // // class Foo : public lldb_private::TypeSystem // { // static bool classof(const TypeSystem *ts) // { // return ts->getKind() == TypeSystem::eKindFoo; // } // }; // // 3 - Contruct your TypeSystem subclass with the enumeration from below // // Foo() : // TypeSystem(TypeSystem::eKindFoo), // ... // { // } // // Then you can use the llvm casting on any "TypeSystem *" to get an instance // of your subclass. enum LLVMCastKind { eKindClang, eKindSwift, kNumKinds }; // Constructors and Destructors TypeSystem(LLVMCastKind kind); ~TypeSystem() override; LLVMCastKind getKind() const { return m_kind; } // LLVM RTTI support virtual bool isA(const void *ClassID) const = 0; static lldb::TypeSystemSP CreateInstance(lldb::LanguageType language, Module *module); Loading Loading @@ -493,8 +457,7 @@ public: virtual bool IsMeaninglessWithoutDynamicResolution(void *type); protected: const LLVMCastKind m_kind; // Support for llvm casting SymbolFile *m_sym_file; SymbolFile *m_sym_file = nullptr; }; class TypeSystemMap { Loading
lldb/source/Symbol/ClangASTContext.cpp +5 −6 Original line number Diff line number Diff line Loading @@ -337,6 +337,8 @@ static ClangASTMap &GetASTMap() { return *g_map_ptr; } char ClangASTContext::ID; bool ClangASTContext::IsOperator(llvm::StringRef name, clang::OverloadedOperatorKind &op_kind) { // All operators have to start with "operator". Loading Loading @@ -522,8 +524,7 @@ static void ParseLangArgs(LangOptions &Opts, InputKind IK, const char *triple) { Opts.NoInlineDefine = !Opt; } ClangASTContext::ClangASTContext(llvm::StringRef target_triple) : TypeSystem(TypeSystem::eKindClang) { ClangASTContext::ClangASTContext(llvm::StringRef target_triple) { if (!target_triple.empty()) SetTargetTriple(target_triple); // The caller didn't pass an ASTContext so create a new one for this Loading @@ -531,16 +532,14 @@ ClangASTContext::ClangASTContext(llvm::StringRef target_triple) CreateASTContext(); } ClangASTContext::ClangASTContext(ArchSpec arch) : TypeSystem(TypeSystem::eKindClang) { ClangASTContext::ClangASTContext(ArchSpec arch) { SetTargetTriple(arch.GetTriple().str()); // The caller didn't pass an ASTContext so create a new one for this // ClangASTContext. CreateASTContext(); } ClangASTContext::ClangASTContext(ASTContext &existing_ctxt) : TypeSystem(TypeSystem::eKindClang) { ClangASTContext::ClangASTContext(ASTContext &existing_ctxt) { SetTargetTriple(existing_ctxt.getTargetInfo().getTriple().str()); m_ast_up.reset(&existing_ctxt); Loading
lldb/source/Symbol/CompilerDecl.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -7,13 +7,14 @@ //===----------------------------------------------------------------------===// #include "lldb/Symbol/CompilerDecl.h" #include "lldb/Symbol/ClangASTContext.h" #include "lldb/Symbol/CompilerDeclContext.h" #include "lldb/Symbol/TypeSystem.h" using namespace lldb_private; bool CompilerDecl::IsClang() const { return IsValid() && m_type_system->getKind() == TypeSystem::eKindClang; return IsValid() && llvm::isa<ClangASTContext>(m_type_system); } ConstString CompilerDecl::GetName() const { Loading
lldb/source/Symbol/CompilerDeclContext.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "lldb/Symbol/CompilerDeclContext.h" #include "lldb/Symbol/ClangASTContext.h" #include "lldb/Symbol/CompilerDecl.h" #include "lldb/Symbol/TypeSystem.h" #include <vector> Loading @@ -24,7 +25,7 @@ CompilerDeclContext::FindDeclByName(ConstString name, } bool CompilerDeclContext::IsClang() const { return IsValid() && m_type_system->getKind() == TypeSystem::eKindClang; return IsValid() && llvm::isa<ClangASTContext>(m_type_system); } ConstString CompilerDeclContext::GetName() const { Loading