Author: enrico Date: Fri Oct 16 17:51:56 2015 New Revision: 250567 URL: http://llvm.org/viewvc/llvm-project?rev=250567&view=rev Log: Move TypeSummaryImpl over to LLVM-style RTTI for subclassing
Modified: lldb/trunk/include/lldb/DataFormatters/TypeSummary.h lldb/trunk/source/API/SBTypeSummary.cpp lldb/trunk/source/DataFormatters/TypeSummary.cpp Modified: lldb/trunk/include/lldb/DataFormatters/TypeSummary.h URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/DataFormatters/TypeSummary.h?rev=250567&r1=250566&r2=250567&view=diff ============================================================================== --- lldb/trunk/include/lldb/DataFormatters/TypeSummary.h (original) +++ lldb/trunk/include/lldb/DataFormatters/TypeSummary.h Fri Oct 16 17:51:56 2015 @@ -61,6 +61,19 @@ namespace lldb_private { class TypeSummaryImpl { public: + enum class Kind + { + eSummaryString, + eScript, + eCallback + }; + + Kind + GetKind () const + { + return m_kind; + } + class Flags { public: @@ -260,16 +273,6 @@ namespace lldb_private { uint32_t m_flags; }; - typedef enum Type - { - eTypeUnknown, - eTypeString, - eTypeScript, - eTypeCallback - } Type; - - TypeSummaryImpl (const TypeSummaryImpl::Flags& flags); - bool Cascades () const { @@ -397,12 +400,6 @@ namespace lldb_private { virtual std::string GetDescription () = 0; - virtual bool - IsScripted () = 0; - - virtual Type - GetType () = 0; - uint32_t& GetRevision () { @@ -417,7 +414,11 @@ namespace lldb_private { uint32_t m_my_revision; Flags m_flags; + TypeSummaryImpl (Kind kind, + const TypeSummaryImpl::Flags& flags); + private: + Kind m_kind; DISALLOW_COPY_AND_ASSIGN(TypeSummaryImpl); }; @@ -452,16 +453,9 @@ namespace lldb_private { std::string GetDescription() override; - bool - IsScripted() override - { - return false; - } - - Type - GetType() override + static bool classof(const TypeSummaryImpl* S) { - return TypeSummaryImpl::eTypeString; + return S->GetKind() == Kind::eSummaryString; } private: @@ -523,16 +517,9 @@ namespace lldb_private { std::string GetDescription() override; - bool - IsScripted() override - { - return false; - } - - Type - GetType() override + static bool classof(const TypeSummaryImpl* S) { - return TypeSummaryImpl::eTypeCallback; + return S->GetKind() == Kind::eCallback; } typedef std::shared_ptr<CXXFunctionSummaryFormat> SharedPointer; @@ -595,16 +582,9 @@ namespace lldb_private { std::string GetDescription() override; - bool - IsScripted() override - { - return true; - } - - Type - GetType() override + static bool classof(const TypeSummaryImpl* S) { - return TypeSummaryImpl::eTypeScript; + return S->GetKind() == Kind::eScript; } typedef std::shared_ptr<ScriptSummaryFormat> SharedPointer; Modified: lldb/trunk/source/API/SBTypeSummary.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/API/SBTypeSummary.cpp?rev=250567&r1=250566&r2=250567&view=diff ============================================================================== --- lldb/trunk/source/API/SBTypeSummary.cpp (original) +++ lldb/trunk/source/API/SBTypeSummary.cpp Fri Oct 16 17:51:56 2015 @@ -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 c { 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 ch { 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 ch { 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::SBTypeSu 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 w 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(); Modified: lldb/trunk/source/DataFormatters/TypeSummary.cpp URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/DataFormatters/TypeSummary.cpp?rev=250567&r1=250566&r2=250567&view=diff ============================================================================== --- lldb/trunk/source/DataFormatters/TypeSummary.cpp (original) +++ lldb/trunk/source/DataFormatters/TypeSummary.cpp Fri Oct 16 17:51:56 2015 @@ -76,15 +76,17 @@ TypeSummaryOptions::SetCapping (lldb::Ty return *this; } -TypeSummaryImpl::TypeSummaryImpl (const TypeSummaryImpl::Flags& flags) : -m_flags(flags) +TypeSummaryImpl::TypeSummaryImpl (Kind kind, + const TypeSummaryImpl::Flags& flags) : + m_flags(flags), + m_kind(kind) { } StringSummaryFormat::StringSummaryFormat (const TypeSummaryImpl::Flags& flags, const char *format_cstr) : - TypeSummaryImpl(flags), + TypeSummaryImpl(Kind::eSummaryString,flags), m_format_str() { SetSummaryString (format_cstr); @@ -170,7 +172,7 @@ StringSummaryFormat::GetDescription () CXXFunctionSummaryFormat::CXXFunctionSummaryFormat (const TypeSummaryImpl::Flags& flags, Callback impl, const char* description) : -TypeSummaryImpl(flags), + TypeSummaryImpl(Kind::eCallback,flags), m_impl(impl), m_description(description ? description : "") { @@ -208,10 +210,10 @@ CXXFunctionSummaryFormat::GetDescription ScriptSummaryFormat::ScriptSummaryFormat (const TypeSummaryImpl::Flags& flags, const char * function_name, const char * python_script) : -TypeSummaryImpl(flags), -m_function_name(), -m_python_script(), -m_script_function_sp() + TypeSummaryImpl(Kind::eScript,flags), + m_function_name(), + m_python_script(), + m_script_function_sp() { if (function_name) m_function_name.assign(function_name); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits