From 99448c636759490c72f556ec8792eed868e955ae Mon Sep 17 00:00:00 2001 From: Enrico Granata Date: Mon, 9 Nov 2015 23:07:55 +0000 Subject: [PATCH] Rework the way in which ValueObjectChild decides how to update itself; this is a slight refactoring that I need as part of a larger master plan. As such, should be NFC llvm-svn: 252529 --- lldb/include/lldb/Symbol/CompilerType.h | 3 +++ lldb/include/lldb/Symbol/TypeSystem.h | 6 ++++++ lldb/include/lldb/lldb-enumerations.h | 3 ++- lldb/source/Core/ValueObjectChild.cpp | 2 +- lldb/source/Symbol/CompilerType.cpp | 8 ++++++++ 5 files changed, 20 insertions(+), 2 deletions(-) diff --git a/lldb/include/lldb/Symbol/CompilerType.h b/lldb/include/lldb/Symbol/CompilerType.h index 64585888b119..4f3ecc54ba1a 100644 --- a/lldb/include/lldb/Symbol/CompilerType.h +++ b/lldb/include/lldb/Symbol/CompilerType.h @@ -179,6 +179,9 @@ public: bool IsReferenceType(CompilerType *pointee_type = nullptr, bool* is_rvalue = nullptr) const; + + bool + ShouldTreatScalarValueAsAddress () const; bool IsScalarType () const; diff --git a/lldb/include/lldb/Symbol/TypeSystem.h b/lldb/include/lldb/Symbol/TypeSystem.h index 9d066548bcb5..63dc210b8d02 100644 --- a/lldb/include/lldb/Symbol/TypeSystem.h +++ b/lldb/include/lldb/Symbol/TypeSystem.h @@ -496,6 +496,12 @@ public: virtual bool IsReferenceType (lldb::opaque_compiler_type_t type, CompilerType *pointee_type, bool* is_rvalue) = 0; + virtual bool + ShouldTreatScalarValueAsAddress (lldb::opaque_compiler_type_t type) + { + return IsPointerOrReferenceType(type, nullptr); + } + virtual UserExpression * GetUserExpression (const char *expr, const char *expr_prefix, diff --git a/lldb/include/lldb/lldb-enumerations.h b/lldb/include/lldb/lldb-enumerations.h index 230638b3b0ec..541bae023255 100644 --- a/lldb/include/lldb/lldb-enumerations.h +++ b/lldb/include/lldb/lldb-enumerations.h @@ -960,7 +960,8 @@ namespace lldb { eTypeIsInteger = (1u << 18), eTypeIsFloat = (1u << 19), eTypeIsComplex = (1u << 20), - eTypeIsSigned = (1u << 21) + eTypeIsSigned = (1u << 21), + eTypeInstanceIsPointer = (1u << 22) }; FLAGS_ENUM(CommandFlags) diff --git a/lldb/source/Core/ValueObjectChild.cpp b/lldb/source/Core/ValueObjectChild.cpp index 619ffdc055d2..e7a2e3da933a 100644 --- a/lldb/source/Core/ValueObjectChild.cpp +++ b/lldb/source/Core/ValueObjectChild.cpp @@ -146,7 +146,7 @@ ValueObjectChild::UpdateValue () Value::ValueType value_type = parent->GetValue().GetValueType(); m_value.SetValueType (value_type); - if (parent->GetCompilerType().IsPointerOrReferenceType ()) + if (parent->GetCompilerType().ShouldTreatScalarValueAsAddress()) { lldb::addr_t addr = parent->GetPointerValue (); m_value.GetScalar() = addr; diff --git a/lldb/source/Symbol/CompilerType.cpp b/lldb/source/Symbol/CompilerType.cpp index bdf2157dd339..000a949626c5 100644 --- a/lldb/source/Symbol/CompilerType.cpp +++ b/lldb/source/Symbol/CompilerType.cpp @@ -226,6 +226,14 @@ CompilerType::IsReferenceType (CompilerType *pointee_type, bool* is_rvalue) cons return false; } +bool +CompilerType::ShouldTreatScalarValueAsAddress () const +{ + if (IsValid()) + return m_type_system->ShouldTreatScalarValueAsAddress(m_type); + return false; +} + bool CompilerType::IsFloatingPointType (uint32_t &count, bool &is_complex) const {