summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lldb/include/lldb/Symbol/CompilerType.h3
-rw-r--r--lldb/include/lldb/Symbol/TypeSystem.h6
-rw-r--r--lldb/include/lldb/lldb-enumerations.h3
-rw-r--r--lldb/source/Core/ValueObjectChild.cpp2
-rw-r--r--lldb/source/Symbol/CompilerType.cpp8
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())
OpenPOWER on IntegriCloud