diff options
| author | Enrico Granata <granata.enrico@gmail.com> | 2011-08-04 01:41:02 +0000 |
|---|---|---|
| committer | Enrico Granata <granata.enrico@gmail.com> | 2011-08-04 01:41:02 +0000 |
| commit | 6fd87d5d33c677badffcab70b60e8dcc169de07e (patch) | |
| tree | cbfbcdc89fc62be7c2d37d5e33883d9704ab8e08 /lldb/source/API/SBValue.cpp | |
| parent | b224db72b02a17981bec61c71c02566b542f9667 (diff) | |
| download | bcm5719-llvm-6fd87d5d33c677badffcab70b60e8dcc169de07e.tar.gz bcm5719-llvm-6fd87d5d33c677badffcab70b60e8dcc169de07e.zip | |
APIs to GetValueAsSigned/Unsigned() in SBValue now also accept an SBError parameter to give more info about any problem
The synthetic children providers now use the new (safer) APIs to get the values of objects
As a side effect, fixed an issue in ValueObject where ResolveValue() was not always updating the value before reading it
llvm-svn: 136861
Diffstat (limited to 'lldb/source/API/SBValue.cpp')
| -rw-r--r-- | lldb/source/API/SBValue.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/lldb/source/API/SBValue.cpp b/lldb/source/API/SBValue.cpp index d874cc2fabc..820121132ee 100644 --- a/lldb/source/API/SBValue.cpp +++ b/lldb/source/API/SBValue.cpp @@ -619,6 +619,48 @@ SBValue::GetValueForExpressionPath(const char* expr_path) } int64_t +SBValue::GetValueAsSigned(SBError& error, int64_t fail_value) +{ + if (m_opaque_sp) + { + if (m_opaque_sp->GetUpdatePoint().GetTargetSP()) + { + Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex()); + Scalar scalar; + if (m_opaque_sp->ResolveValue (scalar)) + return scalar.GetRawBits64(fail_value); + else + error.SetErrorString("could not get value"); + } + else + error.SetErrorString("could not get target"); + } + error.SetErrorString("invalid SBValue"); + return fail_value; +} + +uint64_t +SBValue::GetValueAsUnsigned(SBError& error, uint64_t fail_value) +{ + if (m_opaque_sp) + { + if (m_opaque_sp->GetUpdatePoint().GetTargetSP()) + { + Mutex::Locker api_locker (m_opaque_sp->GetUpdatePoint().GetTargetSP()->GetAPIMutex()); + Scalar scalar; + if (m_opaque_sp->ResolveValue (scalar)) + return scalar.GetRawBits64(fail_value); + else + error.SetErrorString("could not get value"); + } + else + error.SetErrorString("could not get target"); + } + error.SetErrorString("invalid SBValue"); + return fail_value; +} + +int64_t SBValue::GetValueAsSigned(int64_t fail_value) { if (m_opaque_sp) |

