diff options
Diffstat (limited to 'contrib/llvm/tools/lldb/source/Target/LanguageRuntime.cpp')
-rw-r--r-- | contrib/llvm/tools/lldb/source/Target/LanguageRuntime.cpp | 144 |
1 files changed, 18 insertions, 126 deletions
diff --git a/contrib/llvm/tools/lldb/source/Target/LanguageRuntime.cpp b/contrib/llvm/tools/lldb/source/Target/LanguageRuntime.cpp index 9c7b441..b1e2b3e 100644 --- a/contrib/llvm/tools/lldb/source/Target/LanguageRuntime.cpp +++ b/contrib/llvm/tools/lldb/source/Target/LanguageRuntime.cpp @@ -1,4 +1,4 @@ -//===-- LanguageRuntime.cpp -------------------------------------------------*- C++ -*-===// +//===-- LanguageRuntime.cpp -------------------------------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // @@ -7,7 +7,13 @@ // //===----------------------------------------------------------------------===// +// C Includes +// C++ Includes +// Other libraries and framework includes +// Project includes #include "lldb/Target/LanguageRuntime.h" +#include "Plugins/Language/CPlusPlus/CPlusPlusLanguage.h" +#include "Plugins/Language/ObjC/ObjCLanguage.h" #include "lldb/Target/ObjCLanguageRuntime.h" #include "lldb/Target/Target.h" #include "lldb/Core/PluginManager.h" @@ -17,7 +23,6 @@ using namespace lldb; using namespace lldb_private; - class ExceptionSearchFilter : public SearchFilter { public: @@ -33,8 +38,7 @@ public: UpdateModuleListIfNeeded (); } - virtual - ~ExceptionSearchFilter() {}; + ~ExceptionSearchFilter() override = default; bool ModulePasses (const lldb::ModuleSP &module_sp) override @@ -52,7 +56,6 @@ public: if (m_filter_sp) return m_filter_sp->ModulePasses (spec); return false; - } void @@ -133,11 +136,8 @@ public: { } - virtual - ~ExceptionBreakpointResolver() - { - } - + ~ExceptionBreakpointResolver() override = default; + Searcher::CallbackReturn SearchCallback (SearchFilter &filter, SymbolContext &context, @@ -163,10 +163,12 @@ public: void GetDescription (Stream *s) override { - s->Printf ("Exception breakpoint (catch: %s throw: %s)", - m_catch_bp ? "on" : "off", - m_throw_bp ? "on" : "off"); - + Language *language_plugin = Language::FindPlugin(m_language); + if (language_plugin) + language_plugin->GetExceptionResolverDescription(m_catch_bp, m_throw_bp, *s); + else + Language::GetDefaultExceptionResolverDescription(m_catch_bp, m_throw_bp, *s); + SetActualResolver(); if (m_actual_resolver_sp) { @@ -187,6 +189,7 @@ public: static inline bool classof(const BreakpointResolver *V) { return V->getResolverID() == BreakpointResolver::ExceptionResolver; } + protected: BreakpointResolverSP CopyForBreakpoint (Breakpoint &breakpoint) override @@ -244,7 +247,6 @@ protected: bool m_throw_bp; }; - LanguageRuntime* LanguageRuntime::FindPlugin (Process *process, lldb::LanguageType language) { @@ -264,20 +266,12 @@ LanguageRuntime::FindPlugin (Process *process, lldb::LanguageType language) return NULL; } -//---------------------------------------------------------------------- -// Constructor -//---------------------------------------------------------------------- LanguageRuntime::LanguageRuntime(Process *process) : m_process (process) { } -//---------------------------------------------------------------------- -// Destructor -//---------------------------------------------------------------------- -LanguageRuntime::~LanguageRuntime() -{ -} +LanguageRuntime::~LanguageRuntime() = default; Breakpoint::BreakpointPreconditionSP LanguageRuntime::CreateExceptionPrecondition (lldb::LanguageType language, @@ -321,105 +315,6 @@ LanguageRuntime::CreateExceptionBreakpoint (Target &target, return exc_breakpt_sp; } -struct language_name_pair { - const char *name; - LanguageType type; -}; - -struct language_name_pair language_names[] = -{ - // To allow GetNameForLanguageType to be a simple array lookup, the first - // part of this array must follow enum LanguageType exactly. - { "unknown", eLanguageTypeUnknown }, - { "c89", eLanguageTypeC89 }, - { "c", eLanguageTypeC }, - { "ada83", eLanguageTypeAda83 }, - { "c++", eLanguageTypeC_plus_plus }, - { "cobol74", eLanguageTypeCobol74 }, - { "cobol85", eLanguageTypeCobol85 }, - { "fortran77", eLanguageTypeFortran77 }, - { "fortran90", eLanguageTypeFortran90 }, - { "pascal83", eLanguageTypePascal83 }, - { "modula2", eLanguageTypeModula2 }, - { "java", eLanguageTypeJava }, - { "c99", eLanguageTypeC99 }, - { "ada95", eLanguageTypeAda95 }, - { "fortran95", eLanguageTypeFortran95 }, - { "pli", eLanguageTypePLI }, - { "objective-c", eLanguageTypeObjC }, - { "objective-c++", eLanguageTypeObjC_plus_plus }, - { "upc", eLanguageTypeUPC }, - { "d", eLanguageTypeD }, - { "python", eLanguageTypePython }, - { "opencl", eLanguageTypeOpenCL }, - { "go", eLanguageTypeGo }, - { "modula3", eLanguageTypeModula3 }, - { "haskell", eLanguageTypeHaskell }, - { "c++03", eLanguageTypeC_plus_plus_03 }, - { "c++11", eLanguageTypeC_plus_plus_11 }, - { "ocaml", eLanguageTypeOCaml }, - { "rust", eLanguageTypeRust }, - { "c11", eLanguageTypeC11 }, - { "swift", eLanguageTypeSwift }, - { "julia", eLanguageTypeJulia }, - { "dylan", eLanguageTypeDylan }, - { "c++14", eLanguageTypeC_plus_plus_14 }, - { "fortran03", eLanguageTypeFortran03 }, - { "fortran08", eLanguageTypeFortran08 }, - // Vendor Extensions - { "mipsassem", eLanguageTypeMipsAssembler }, - { "renderscript", eLanguageTypeExtRenderScript}, - // Now synonyms, in arbitrary order - { "objc", eLanguageTypeObjC }, - { "objc++", eLanguageTypeObjC_plus_plus } -}; - -static uint32_t num_languages = sizeof(language_names) / sizeof (struct language_name_pair); - -LanguageType -LanguageRuntime::GetLanguageTypeFromString (const char *string) -{ - for (uint32_t i = 0; i < num_languages; i++) - { - if (strcasecmp (language_names[i].name, string) == 0) - return (LanguageType) language_names[i].type; - } - return eLanguageTypeUnknown; -} - -const char * -LanguageRuntime::GetNameForLanguageType (LanguageType language) -{ - if (language < num_languages) - return language_names[language].name; - else - return language_names[eLanguageTypeUnknown].name; -} - -void -LanguageRuntime::PrintAllLanguages (Stream &s, const char *prefix, const char *suffix) -{ - for (uint32_t i = 1; i < num_languages; i++) - { - s.Printf("%s%s%s", prefix, language_names[i].name, suffix); - } -} - -bool -LanguageRuntime::LanguageIsCPlusPlus (LanguageType language) -{ - switch (language) - { - case eLanguageTypeC_plus_plus: - case eLanguageTypeC_plus_plus_03: - case eLanguageTypeC_plus_plus_11: - case eLanguageTypeC_plus_plus_14: - return true; - default: - return false; - } -} - void LanguageRuntime::InitializeCommands (CommandObject* parent) { @@ -452,6 +347,3 @@ LanguageRuntime::CreateExceptionSearchFilter () { return m_process->GetTarget().GetSearchFilterForModule(NULL); } - - - |