diff options
| author | Enrico Granata <granata.enrico@gmail.com> | 2012-02-17 03:18:30 +0000 |
|---|---|---|
| committer | Enrico Granata <granata.enrico@gmail.com> | 2012-02-17 03:18:30 +0000 |
| commit | 864e3e8413b2ab0fad4432943056be03d60e73fc (patch) | |
| tree | c2e52326a4d6fd1f025d256dcc6dbdc2d452e86e /lldb/source/API/SBValue.cpp | |
| parent | 355efbb2e044126adecdcadca87c8cdfb5c33a85 (diff) | |
| download | bcm5719-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.cpp | 86 |
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) { |

