diff options
-rw-r--r-- | lldb/include/lldb/Symbol/CompilerType.h | 3 | ||||
-rw-r--r-- | lldb/include/lldb/Symbol/TypeSystem.h | 6 | ||||
-rw-r--r-- | lldb/include/lldb/lldb-enumerations.h | 3 | ||||
-rw-r--r-- | lldb/source/Core/ValueObjectChild.cpp | 2 | ||||
-rw-r--r-- | 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 64585888b11..4f3ecc54ba1 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 9d066548bcb..63dc210b8d0 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 230638b3b0e..541bae02325 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 619ffdc055d..e7a2e3da933 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 bdf2157dd33..000a949626c 100644 --- a/lldb/source/Symbol/CompilerType.cpp +++ b/lldb/source/Symbol/CompilerType.cpp @@ -227,6 +227,14 @@ CompilerType::IsReferenceType (CompilerType *pointee_type, bool* is_rvalue) cons } 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 { if (IsValid()) |