forked from OSchip/llvm-project
SBValue::GetValueAsUnsigned()/GetValueAsSigned() should not replicate the Scalar manipulation logic found in ValueObject, but rather just call down to it
llvm-svn: 193786
This commit is contained in:
parent
d3cba699c1
commit
d7373f69cf
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue