diff options
Diffstat (limited to 'lldb/source/API')
-rw-r--r-- | lldb/source/API/SBModule.cpp | 18 | ||||
-rw-r--r-- | lldb/source/API/SBTypeSummary.cpp | 49 |
2 files changed, 48 insertions, 19 deletions
diff --git a/lldb/source/API/SBModule.cpp b/lldb/source/API/SBModule.cpp index 44ac2d3b1e8..446a69331d9 100644 --- a/lldb/source/API/SBModule.cpp +++ b/lldb/source/API/SBModule.cpp @@ -542,17 +542,15 @@ SBModule::GetVersion (uint32_t *versions, uint32_t num_versions) { ModuleSP module_sp (GetSP ()); if (module_sp) + return module_sp->GetVersion(versions, num_versions); + else { - ObjectFile *obj_file = module_sp->GetObjectFile(); - if (obj_file) - return obj_file->GetVersion (versions, num_versions); - } - - if (versions && num_versions) - { - for (uint32_t i=0; i<num_versions; ++i) - versions[i] = UINT32_MAX; + if (versions && num_versions) + { + for (uint32_t i=0; i<num_versions; ++i) + versions[i] = UINT32_MAX; + } + return 0; } - return 0; } diff --git a/lldb/source/API/SBTypeSummary.cpp b/lldb/source/API/SBTypeSummary.cpp index 86cb89b40b3..4108da05962 100644 --- a/lldb/source/API/SBTypeSummary.cpp +++ b/lldb/source/API/SBTypeSummary.cpp @@ -99,6 +99,9 @@ SBTypeSummary::IsSummaryString() if (!IsValid()) return false; + if (m_opaque_sp->GetType() == lldb_private::TypeSummaryImpl::eTypeCallback) + return false; + return !m_opaque_sp->IsScripted(); } @@ -107,6 +110,8 @@ SBTypeSummary::GetData () { if (!IsValid()) return NULL; + if (m_opaque_sp->GetType() == lldb_private::TypeSummaryImpl::eTypeCallback) + return NULL; if (m_opaque_sp->IsScripted()) { ScriptSummaryFormat* script_summary_ptr = (ScriptSummaryFormat*)m_opaque_sp.get(); @@ -144,7 +149,7 @@ SBTypeSummary::SetSummaryString (const char* data) { if (!IsValid()) return; - if (m_opaque_sp->IsScripted()) + if (m_opaque_sp->IsScripted() || (m_opaque_sp->GetType() == lldb_private::TypeSummaryImpl::eTypeCallback)) ChangeSummaryType(false); ((StringSummaryFormat*)m_opaque_sp.get())->SetSummaryString(data); } @@ -205,6 +210,16 @@ SBTypeSummary::IsEqualTo (lldb::SBTypeSummary &rhs) { if (IsValid() == false) return !rhs.IsValid(); + + if (m_opaque_sp->GetType() != rhs.m_opaque_sp->GetType()) + return false; + + if (m_opaque_sp->GetType() == lldb_private::TypeSummaryImpl::eTypeCallback) + { + 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->m_impl == other_cxx->m_impl); + } if (m_opaque_sp->IsScripted() != rhs.m_opaque_sp->IsScripted()) return false; @@ -255,12 +270,20 @@ SBTypeSummary::CopyOnWrite_Impl() { if (!IsValid()) return false; + if (m_opaque_sp.unique()) return true; TypeSummaryImplSP new_sp; - if (m_opaque_sp->IsScripted()) + if (m_opaque_sp->GetType() == lldb_private::TypeSummaryImpl::eTypeCallback) + { + 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()) { ScriptSummaryFormat* current_summary_ptr = (ScriptSummaryFormat*)m_opaque_sp.get(); new_sp = TypeSummaryImplSP(new ScriptSummaryFormat(GetOptions(), @@ -284,15 +307,23 @@ SBTypeSummary::ChangeSummaryType (bool want_script) if (!IsValid()) return false; - if (want_script == m_opaque_sp->IsScripted()) - return CopyOnWrite_Impl(); - TypeSummaryImplSP new_sp; - if (want_script) - new_sp = TypeSummaryImplSP(new ScriptSummaryFormat(GetOptions(), "", "")); - else - new_sp = TypeSummaryImplSP(new StringSummaryFormat(GetOptions(), "")); + if (want_script == m_opaque_sp->IsScripted()) + { + if (m_opaque_sp->GetType() == lldb_private::TypeSummaryImpl::eTypeCallback && !want_script) + new_sp = TypeSummaryImplSP(new StringSummaryFormat(GetOptions(), "")); + else + return CopyOnWrite_Impl(); + } + + if (!new_sp) + { + if (want_script) + new_sp = TypeSummaryImplSP(new ScriptSummaryFormat(GetOptions(), "", "")); + else + new_sp = TypeSummaryImplSP(new StringSummaryFormat(GetOptions(), "")); + } SetSP(new_sp); |