diff options
author | Enrico Granata <egranata@apple.com> | 2013-10-31 18:57:50 +0000 |
---|---|---|
committer | Enrico Granata <egranata@apple.com> | 2013-10-31 18:57:50 +0000 |
commit | d7373f69cff7df1a9aaa64f18e87964dbb0a7c72 (patch) | |
tree | 77e421d5accf9ac448e1034e23f7ec8e4a6fc0a4 | |
parent | d3cba699c1a9eb7c98b3a96036ecdea0a16cadd2 (diff) | |
download | bcm5719-llvm-d7373f69cff7df1a9aaa64f18e87964dbb0a7c72.tar.gz bcm5719-llvm-d7373f69cff7df1a9aaa64f18e87964dbb0a7c72.zip |
SBValue::GetValueAsUnsigned()/GetValueAsSigned() should not replicate the Scalar manipulation logic found in ValueObject, but rather just call down to it
llvm-svn: 193786
-rw-r--r-- | lldb/include/lldb/Core/ValueObject.h | 3 | ||||
-rw-r--r-- | lldb/source/API/SBValue.cpp | 28 | ||||
-rw-r--r-- | lldb/source/Core/ValueObject.cpp | 21 |
3 files changed, 37 insertions, 15 deletions
diff --git a/lldb/include/lldb/Core/ValueObject.h b/lldb/include/lldb/Core/ValueObject.h index c27490144eb..1ef421676ee 100644 --- a/lldb/include/lldb/Core/ValueObject.h +++ b/lldb/include/lldb/Core/ValueObject.h @@ -505,6 +505,9 @@ public: virtual uint64_t GetValueAsUnsigned (uint64_t fail_value, bool *success = NULL); + virtual int64_t + GetValueAsSigned (int64_t fail_value, bool *success = NULL); + virtual bool SetValueFromCString (const char *value_str, Error& error); diff --git a/lldb/source/API/SBValue.cpp b/lldb/source/API/SBValue.cpp index 68cd56f2998..51b6790dd2b 100644 --- a/lldb/source/API/SBValue.cpp +++ b/lldb/source/API/SBValue.cpp @@ -1048,11 +1048,12 @@ SBValue::GetValueAsSigned(SBError& error, int64_t fail_value) lldb::ValueObjectSP value_sp(GetSP(locker)); if (value_sp) { - Scalar scalar; - if (value_sp->ResolveValue (scalar)) - return scalar.SLongLong (fail_value); - else - error.SetErrorString ("could not resolve value"); + bool success = true; + uint64_t ret_val = fail_value; + ret_val = value_sp->GetValueAsSigned(fail_value, &success); + if (!success) + error.SetErrorString("could not resolve value"); + return ret_val; } else error.SetErrorStringWithFormat ("could not get SBValue: %s", locker.GetError().AsCString()); @@ -1068,11 +1069,12 @@ SBValue::GetValueAsUnsigned(SBError& error, uint64_t fail_value) lldb::ValueObjectSP value_sp(GetSP(locker)); if (value_sp) { - Scalar scalar; - if (value_sp->ResolveValue (scalar)) - return scalar.ULongLong(fail_value); - else + bool success = true; + uint64_t ret_val = fail_value; + ret_val = value_sp->GetValueAsUnsigned(fail_value, &success); + if (!success) error.SetErrorString("could not resolve value"); + return ret_val; } else error.SetErrorStringWithFormat ("could not get SBValue: %s", locker.GetError().AsCString()); @@ -1087,9 +1089,7 @@ SBValue::GetValueAsSigned(int64_t fail_value) lldb::ValueObjectSP value_sp(GetSP(locker)); if (value_sp) { - Scalar scalar; - if (value_sp->ResolveValue (scalar)) - return scalar.SLongLong(fail_value); + return value_sp->GetValueAsSigned(fail_value); } return fail_value; } @@ -1101,9 +1101,7 @@ SBValue::GetValueAsUnsigned(uint64_t fail_value) lldb::ValueObjectSP value_sp(GetSP(locker)); if (value_sp) { - Scalar scalar; - if (value_sp->ResolveValue (scalar)) - return scalar.ULongLong(fail_value); + return value_sp->GetValueAsUnsigned(fail_value); } return fail_value; } diff --git a/lldb/source/Core/ValueObject.cpp b/lldb/source/Core/ValueObject.cpp index e9aa349d8b2..d39d21a2a0b 100644 --- a/lldb/source/Core/ValueObject.cpp +++ b/lldb/source/Core/ValueObject.cpp @@ -1542,6 +1542,27 @@ ValueObject::GetValueAsUnsigned (uint64_t fail_value, bool *success) return fail_value; } +int64_t +ValueObject::GetValueAsSigned (int64_t fail_value, bool *success) +{ + // If our byte size is zero this is an aggregate type that has children + if (!GetClangType().IsAggregateType()) + { + Scalar scalar; + if (ResolveValue (scalar)) + { + if (success) + *success = true; + return scalar.SLongLong(fail_value); + } + // fallthrough, otherwise... + } + + if (success) + *success = false; + return fail_value; +} + // if any more "special cases" are added to ValueObject::DumpPrintableRepresentation() please keep // this call up to date by returning true for your new special cases. We will eventually move // to checking this call result before trying to display special cases |