summaryrefslogtreecommitdiffstats
path: root/lldb/source/API/SBValue.cpp
diff options
context:
space:
mode:
authorEnrico Granata <granata.enrico@gmail.com>2012-02-17 03:18:30 +0000
committerEnrico Granata <granata.enrico@gmail.com>2012-02-17 03:18:30 +0000
commit864e3e8413b2ab0fad4432943056be03d60e73fc (patch)
treec2e52326a4d6fd1f025d256dcc6dbdc2d452e86e /lldb/source/API/SBValue.cpp
parent355efbb2e044126adecdcadca87c8cdfb5c33a85 (diff)
downloadbcm5719-llvm-864e3e8413b2ab0fad4432943056be03d60e73fc.tar.gz
bcm5719-llvm-864e3e8413b2ab0fad4432943056be03d60e73fc.zip
Adding formatters for several useful Objective-C/Cocoa data types. The new categories are not enabled at startup, but can be manually activated if desired.
Adding new API calls to SBValue to be able to retrieve the associated formatters Some refactoring to FormatNavigator::Get() in order to shrink its size down to more manageable terms (a future, massive, refactoring effort will still be needed) Test cases added for the above llvm-svn: 150784
Diffstat (limited to 'lldb/source/API/SBValue.cpp')
-rw-r--r--lldb/source/API/SBValue.cpp86
1 files changed, 86 insertions, 0 deletions
diff --git a/lldb/source/API/SBValue.cpp b/lldb/source/API/SBValue.cpp
index 2369d6ba980..7eb56a806a3 100644
--- a/lldb/source/API/SBValue.cpp
+++ b/lldb/source/API/SBValue.cpp
@@ -8,10 +8,16 @@
//===----------------------------------------------------------------------===//
#include "lldb/API/SBValue.h"
+
#include "lldb/API/SBStream.h"
+#include "lldb/API/SBTypeFilter.h"
+#include "lldb/API/SBTypeFormat.h"
+#include "lldb/API/SBTypeSummary.h"
+#include "lldb/API/SBTypeSynthetic.h"
#include "lldb/Breakpoint/Watchpoint.h"
#include "lldb/Core/DataExtractor.h"
+#include "lldb/Core/DataVisualization.h"
#include "lldb/Core/Log.h"
#include "lldb/Core/Module.h"
#include "lldb/Core/Scalar.h"
@@ -371,6 +377,86 @@ SBValue::SetValueFromCString (const char *value_str)
return success;
}
+lldb::SBTypeFormat
+SBValue::GetTypeFormat ()
+{
+ lldb::SBTypeFormat format;
+ lldb::ValueObjectSP value_sp(GetSP());
+ if (value_sp)
+ {
+ Mutex::Locker api_locker (value_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
+ if (value_sp->UpdateValueIfNeeded(true))
+ {
+ lldb::TypeFormatImplSP format_sp = value_sp->GetValueFormat();
+ if (format_sp)
+ format.SetSP(format_sp);
+ }
+ }
+ return format;
+}
+
+lldb::SBTypeSummary
+SBValue::GetTypeSummary ()
+{
+ lldb::SBTypeSummary summary;
+ lldb::ValueObjectSP value_sp(GetSP());
+ if (value_sp)
+ {
+ Mutex::Locker api_locker (value_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
+ if (value_sp->UpdateValueIfNeeded(true))
+ {
+ lldb::TypeSummaryImplSP summary_sp = value_sp->GetSummaryFormat();
+ if (summary_sp)
+ summary.SetSP(summary_sp);
+ }
+ }
+ return summary;
+}
+
+lldb::SBTypeFilter
+SBValue::GetTypeFilter ()
+{
+ lldb::SBTypeFilter filter;
+ lldb::ValueObjectSP value_sp(GetSP());
+ if (value_sp)
+ {
+ Mutex::Locker api_locker (value_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
+ if (value_sp->UpdateValueIfNeeded(true))
+ {
+ lldb::SyntheticChildrenSP synthetic_sp = value_sp->GetSyntheticChildren();
+
+ if (synthetic_sp && !synthetic_sp->IsScripted())
+ {
+ TypeFilterImplSP filter_sp = std::tr1::static_pointer_cast<TypeFilterImpl>(synthetic_sp);
+ filter.SetSP(filter_sp);
+ }
+ }
+ }
+ return filter;
+}
+
+lldb::SBTypeSynthetic
+SBValue::GetTypeSynthetic ()
+{
+ lldb::SBTypeSynthetic synthetic;
+ lldb::ValueObjectSP value_sp(GetSP());
+ if (value_sp)
+ {
+ Mutex::Locker api_locker (value_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex());
+ if (value_sp->UpdateValueIfNeeded(true))
+ {
+ lldb::SyntheticChildrenSP children_sp = value_sp->GetSyntheticChildren();
+
+ if (children_sp && children_sp->IsScripted())
+ {
+ TypeSyntheticImplSP synth_sp = std::tr1::static_pointer_cast<TypeSyntheticImpl>(children_sp);
+ synthetic.SetSP(synth_sp);
+ }
+ }
+ }
+ return synthetic;
+}
+
lldb::SBValue
SBValue::CreateChildAtOffset (const char *name, uint32_t offset, SBType type)
{
OpenPOWER on IntegriCloud