Fixed up the SBValue::GetExpressionPath() to be more correct under more
circumstances.
git-svn-id: https://llvm.org/svn/llvm-project/llvdb/trunk@123957 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/source/Symbol/ClangASTContext.cpp b/source/Symbol/ClangASTContext.cpp
index b1cd6c5..9988d08 100644
--- a/source/Symbol/ClangASTContext.cpp
+++ b/source/Symbol/ClangASTContext.cpp
@@ -2373,7 +2373,8 @@
int32_t &child_byte_offset,
uint32_t &child_bitfield_bit_size,
uint32_t &child_bitfield_bit_offset,
- bool &child_is_base_class
+ bool &child_is_base_class,
+ bool &child_is_deref_of_parent
)
{
if (parent_clang_type)
@@ -2389,7 +2390,8 @@
child_byte_offset,
child_bitfield_bit_size,
child_bitfield_bit_offset,
- child_is_base_class);
+ child_is_base_class,
+ child_is_deref_of_parent);
return NULL;
}
@@ -2407,7 +2409,8 @@
int32_t &child_byte_offset,
uint32_t &child_bitfield_bit_size,
uint32_t &child_bitfield_bit_offset,
- bool &child_is_base_class
+ bool &child_is_base_class,
+ bool &child_is_deref_of_parent
)
{
if (parent_clang_type == NULL)
@@ -2612,6 +2615,8 @@
if (transparent_pointers && ClangASTContext::IsAggregateType (pointee_type.getAsOpaquePtr()))
{
+ child_is_deref_of_parent = false;
+ bool tmp_child_is_deref_of_parent = false;
return GetChildClangTypeAtIndex (ast,
parent_name,
pointer_type->getPointeeType().getAsOpaquePtr(),
@@ -2623,10 +2628,12 @@
child_byte_offset,
child_bitfield_bit_size,
child_bitfield_bit_offset,
- child_is_base_class);
+ child_is_base_class,
+ tmp_child_is_deref_of_parent);
}
else
{
+ child_is_deref_of_parent = true;
if (parent_name)
{
child_name.assign(1, '*');
@@ -2681,6 +2688,8 @@
if (transparent_pointers && ClangASTContext::IsAggregateType (pointee_type.getAsOpaquePtr()))
{
+ child_is_deref_of_parent = false;
+ bool tmp_child_is_deref_of_parent = false;
return GetChildClangTypeAtIndex (ast,
parent_name,
pointer_type->getPointeeType().getAsOpaquePtr(),
@@ -2692,10 +2701,13 @@
child_byte_offset,
child_bitfield_bit_size,
child_bitfield_bit_offset,
- child_is_base_class);
+ child_is_base_class,
+ tmp_child_is_deref_of_parent);
}
else
{
+ child_is_deref_of_parent = true;
+
if (parent_name)
{
child_name.assign(1, '*');
@@ -2723,6 +2735,8 @@
clang_type_t pointee_clang_type = pointee_type.getAsOpaquePtr();
if (transparent_pointers && ClangASTContext::IsAggregateType (pointee_clang_type))
{
+ child_is_deref_of_parent = false;
+ bool tmp_child_is_deref_of_parent = false;
return GetChildClangTypeAtIndex (ast,
parent_name,
pointee_clang_type,
@@ -2734,7 +2748,8 @@
child_byte_offset,
child_bitfield_bit_size,
child_bitfield_bit_offset,
- child_is_base_class);
+ child_is_base_class,
+ tmp_child_is_deref_of_parent);
}
else
{
@@ -2769,7 +2784,8 @@
child_byte_offset,
child_bitfield_bit_size,
child_bitfield_bit_offset,
- child_is_base_class);
+ child_is_base_class,
+ child_is_deref_of_parent);
break;
default: