diff options
| author | Enrico Granata <egranata@apple.com> | 2015-10-16 22:51:56 +0000 |
|---|---|---|
| committer | Enrico Granata <egranata@apple.com> | 2015-10-16 22:51:56 +0000 |
| commit | da7cb14236c679449e341e94ffa73feaa272b5ca (patch) | |
| tree | 0b2b562e4264f661900b66778ccebcf892141455 /lldb/source/API | |
| parent | 6455852a2894553a62e04f0b0d6496c1d493ab7a (diff) | |
| download | bcm5719-llvm-da7cb14236c679449e341e94ffa73feaa272b5ca.tar.gz bcm5719-llvm-da7cb14236c679449e341e94ffa73feaa272b5ca.zip | |
Move TypeSummaryImpl over to LLVM-style RTTI for subclassing
llvm-svn: 250567
Diffstat (limited to 'lldb/source/API')
| -rw-r--r-- | lldb/source/API/SBTypeSummary.cpp | 94 |
1 files changed, 40 insertions, 54 deletions
diff --git a/lldb/source/API/SBTypeSummary.cpp b/lldb/source/API/SBTypeSummary.cpp index 2e279ab41e3..08d8b96560a 100644 --- a/lldb/source/API/SBTypeSummary.cpp +++ b/lldb/source/API/SBTypeSummary.cpp @@ -12,6 +12,8 @@ #include "lldb/API/SBValue.h" #include "lldb/DataFormatters/DataVisualization.h" +#include "llvm/Support/Casting.h" + using namespace lldb; using namespace lldb_private; @@ -164,9 +166,8 @@ SBTypeSummary::IsFunctionCode() { if (!IsValid()) return false; - if (m_opaque_sp->IsScripted()) + if (ScriptSummaryFormat* script_summary_ptr = llvm::dyn_cast<ScriptSummaryFormat>(m_opaque_sp.get())) { - ScriptSummaryFormat* script_summary_ptr = (ScriptSummaryFormat*)m_opaque_sp.get(); const char* ftext = script_summary_ptr->GetPythonScript(); return (ftext && *ftext != 0); } @@ -178,9 +179,8 @@ SBTypeSummary::IsFunctionName() { if (!IsValid()) return false; - if (m_opaque_sp->IsScripted()) + if (ScriptSummaryFormat* script_summary_ptr = llvm::dyn_cast<ScriptSummaryFormat>(m_opaque_sp.get())) { - ScriptSummaryFormat* script_summary_ptr = (ScriptSummaryFormat*)m_opaque_sp.get(); const char* ftext = script_summary_ptr->GetPythonScript(); return (!ftext || *ftext == 0); } @@ -193,10 +193,7 @@ SBTypeSummary::IsSummaryString() if (!IsValid()) return false; - if (m_opaque_sp->GetType() == lldb_private::TypeSummaryImpl::eTypeCallback) - return false; - - return !m_opaque_sp->IsScripted(); + return m_opaque_sp->GetKind() == TypeSummaryImpl::Kind::eSummaryString; } const char* @@ -204,22 +201,17 @@ SBTypeSummary::GetData () { if (!IsValid()) return NULL; - if (m_opaque_sp->GetType() == lldb_private::TypeSummaryImpl::eTypeCallback) - return NULL; - if (m_opaque_sp->IsScripted()) + if (ScriptSummaryFormat* script_summary_ptr = llvm::dyn_cast<ScriptSummaryFormat>(m_opaque_sp.get())) { - ScriptSummaryFormat* script_summary_ptr = (ScriptSummaryFormat*)m_opaque_sp.get(); const char* fname = script_summary_ptr->GetFunctionName(); const char* ftext = script_summary_ptr->GetPythonScript(); if (ftext && *ftext) return ftext; return fname; } - else - { - StringSummaryFormat* string_summary_ptr = (StringSummaryFormat*)m_opaque_sp.get(); + else if (StringSummaryFormat* string_summary_ptr = llvm::dyn_cast<StringSummaryFormat>(m_opaque_sp.get())) return string_summary_ptr->GetSummaryString(); - } + return nullptr; } uint32_t @@ -243,9 +235,10 @@ SBTypeSummary::SetSummaryString (const char* data) { if (!IsValid()) return; - if (m_opaque_sp->IsScripted() || (m_opaque_sp->GetType() == lldb_private::TypeSummaryImpl::eTypeCallback)) + if (!llvm::isa<StringSummaryFormat>(m_opaque_sp.get())) ChangeSummaryType(false); - ((StringSummaryFormat*)m_opaque_sp.get())->SetSummaryString(data); + if (StringSummaryFormat* string_summary_ptr = llvm::dyn_cast<StringSummaryFormat>(m_opaque_sp.get())) + string_summary_ptr->SetSummaryString(data); } void @@ -253,9 +246,10 @@ SBTypeSummary::SetFunctionName (const char* data) { if (!IsValid()) return; - if (!m_opaque_sp->IsScripted()) + if (!llvm::isa<ScriptSummaryFormat>(m_opaque_sp.get())) ChangeSummaryType(true); - ((ScriptSummaryFormat*)m_opaque_sp.get())->SetFunctionName(data); + if (ScriptSummaryFormat* script_summary_ptr = llvm::dyn_cast<ScriptSummaryFormat>(m_opaque_sp.get())) + script_summary_ptr->SetFunctionName(data); } void @@ -263,9 +257,10 @@ SBTypeSummary::SetFunctionCode (const char* data) { if (!IsValid()) return; - if (!m_opaque_sp->IsScripted()) + if (!llvm::isa<ScriptSummaryFormat>(m_opaque_sp.get())) ChangeSummaryType(true); - ((ScriptSummaryFormat*)m_opaque_sp.get())->SetPythonScript(data); + if (ScriptSummaryFormat* script_summary_ptr = llvm::dyn_cast<ScriptSummaryFormat>(m_opaque_sp.get())) + script_summary_ptr->SetPythonScript(data); } bool @@ -314,33 +309,26 @@ SBTypeSummary::IsEqualTo (lldb::SBTypeSummary &rhs) if (IsValid() == false) return !rhs.IsValid(); - if (m_opaque_sp->GetType() != rhs.m_opaque_sp->GetType()) + if (m_opaque_sp->GetKind() != rhs.m_opaque_sp->GetKind()) return false; - if (m_opaque_sp->GetType() == lldb_private::TypeSummaryImpl::eTypeCallback) + switch (m_opaque_sp->GetKind()) { - lldb_private::CXXFunctionSummaryFormat *self_cxx = (lldb_private::CXXFunctionSummaryFormat*)m_opaque_sp.get(); - lldb_private::CXXFunctionSummaryFormat *other_cxx = (lldb_private::CXXFunctionSummaryFormat*)rhs.m_opaque_sp.get(); - return (self_cxx == other_cxx); + case TypeSummaryImpl::Kind::eCallback: + return llvm::dyn_cast<CXXFunctionSummaryFormat>(m_opaque_sp.get()) == llvm::dyn_cast<CXXFunctionSummaryFormat>(rhs.m_opaque_sp.get()); + case TypeSummaryImpl::Kind::eScript: + if (IsFunctionCode() != rhs.IsFunctionCode()) + return false; + if (IsFunctionName() != rhs.IsFunctionName()) + return false; + return GetOptions() == rhs.GetOptions(); + case TypeSummaryImpl::Kind::eSummaryString: + if (IsSummaryString() != rhs.IsSummaryString()) + return false; + return GetOptions() == rhs.GetOptions(); } - if (m_opaque_sp->IsScripted() != rhs.m_opaque_sp->IsScripted()) - return false; - - if (IsFunctionCode() != rhs.IsFunctionCode()) - return false; - - if (IsSummaryString() != rhs.IsSummaryString()) - return false; - - if (IsFunctionName() != rhs.IsFunctionName()) - return false; - - if ( GetData() == NULL || rhs.GetData() == NULL || strcmp(GetData(), rhs.GetData()) ) - return false; - - return GetOptions() == rhs.GetOptions(); - + return false; } bool @@ -379,29 +367,27 @@ SBTypeSummary::CopyOnWrite_Impl() TypeSummaryImplSP new_sp; - if (m_opaque_sp->GetType() == lldb_private::TypeSummaryImpl::eTypeCallback) + if (CXXFunctionSummaryFormat* current_summary_ptr = llvm::dyn_cast<CXXFunctionSummaryFormat>(m_opaque_sp.get())) { - CXXFunctionSummaryFormat* current_summary_ptr = (CXXFunctionSummaryFormat*)m_opaque_sp.get(); new_sp = TypeSummaryImplSP(new CXXFunctionSummaryFormat(GetOptions(), current_summary_ptr->m_impl, current_summary_ptr->m_description.c_str())); } - else if (m_opaque_sp->IsScripted()) + else if (ScriptSummaryFormat* current_summary_ptr = llvm::dyn_cast<ScriptSummaryFormat>(m_opaque_sp.get())) { - ScriptSummaryFormat* current_summary_ptr = (ScriptSummaryFormat*)m_opaque_sp.get(); new_sp = TypeSummaryImplSP(new ScriptSummaryFormat(GetOptions(), current_summary_ptr->GetFunctionName(), current_summary_ptr->GetPythonScript())); } - else { - StringSummaryFormat* current_summary_ptr = (StringSummaryFormat*)m_opaque_sp.get(); + else if (StringSummaryFormat* current_summary_ptr = llvm::dyn_cast<StringSummaryFormat>(m_opaque_sp.get())) + { new_sp = TypeSummaryImplSP(new StringSummaryFormat(GetOptions(), current_summary_ptr->GetSummaryString())); } - + SetSP(new_sp); - return true; + return nullptr != new_sp.get(); } bool @@ -412,9 +398,9 @@ SBTypeSummary::ChangeSummaryType (bool want_script) TypeSummaryImplSP new_sp; - if (want_script == m_opaque_sp->IsScripted()) + if (want_script == (m_opaque_sp->GetKind() == TypeSummaryImpl::Kind::eScript)) { - if (m_opaque_sp->GetType() == lldb_private::TypeSummaryImpl::eTypeCallback && !want_script) + if (m_opaque_sp->GetKind() == lldb_private::TypeSummaryImpl::Kind::eCallback && !want_script) new_sp = TypeSummaryImplSP(new StringSummaryFormat(GetOptions(), "")); else return CopyOnWrite_Impl(); |

