summaryrefslogtreecommitdiffstats
path: root/lldb/source/API
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/API')
-rw-r--r--lldb/source/API/SBModule.cpp18
-rw-r--r--lldb/source/API/SBTypeSummary.cpp49
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);
OpenPOWER on IntegriCloud