diff options
author | Enrico Granata <egranata@apple.com> | 2015-03-12 22:30:58 +0000 |
---|---|---|
committer | Enrico Granata <egranata@apple.com> | 2015-03-12 22:30:58 +0000 |
commit | 448b766afdd1f2d7b6fe54ed049d5e576752fb15 (patch) | |
tree | 4aba727e9f0f2b6bd4de7457e817e8540169ea9e | |
parent | 4f2d55f93afffeed6c7d7cf0a5d6dbf057fc6694 (diff) | |
download | lldb-448b766afdd1f2d7b6fe54ed049d5e576752fb15.tar.gz |
This fixes the build I previously broke - and actually makes the test case work just like I promised
git-svn-id: https://llvm.org/svn/llvm-project/lldb/trunk@232115 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | source/Core/ValueObject.cpp | 98 |
1 files changed, 74 insertions, 24 deletions
diff --git a/source/Core/ValueObject.cpp b/source/Core/ValueObject.cpp index f1af96a76..29a4d403f 100644 --- a/source/Core/ValueObject.cpp +++ b/source/Core/ValueObject.cpp @@ -2289,7 +2289,7 @@ ValueObject::GetSyntheticExpressionPathChild(const char* expression, bool can_cr // lets make one and cache it for any future reference. synthetic_child_sp = GetValueForExpressionPath(expression, NULL, NULL, NULL, - GetValueForExpressionPathOptions().DontAllowSyntheticChildren()); + GetValueForExpressionPathOptions().SetSyntheticChildrenTraversal(GetValueForExpressionPathOptions::SyntheticChildrenTraversal::None)); // Cache the value if we got one back... if (synthetic_child_sp.get()) @@ -2820,19 +2820,43 @@ ValueObject::GetValueForExpressionPath_Impl(const char* expression_cstr, *final_result = ValueObject::eExpressionPathEndResultTypePlain; return child_valobj_sp; } - else if (options.m_no_synthetic_children == false) // let's try with synthetic children + else { - if (root->IsSynthetic()) + switch (options.m_synthetic_children_traversal) { - *first_unparsed = expression_cstr; - *reason_to_stop = ValueObject::eExpressionPathScanEndReasonNoSuchSyntheticChild; - *final_result = ValueObject::eExpressionPathEndResultTypeInvalid; - return ValueObjectSP(); + case GetValueForExpressionPathOptions::SyntheticChildrenTraversal::None: + break; + case GetValueForExpressionPathOptions::SyntheticChildrenTraversal::FromSynthetic: + if (root->IsSynthetic()) + { + child_valobj_sp = root->GetNonSyntheticValue(); + if (child_valobj_sp.get()) + child_valobj_sp = child_valobj_sp->GetChildMemberWithName(child_name, true); + } + break; + case GetValueForExpressionPathOptions::SyntheticChildrenTraversal::ToSynthetic: + if (!root->IsSynthetic()) + { + child_valobj_sp = root->GetSyntheticValue(); + if (child_valobj_sp.get()) + child_valobj_sp = child_valobj_sp->GetChildMemberWithName(child_name, true); + } + break; + case GetValueForExpressionPathOptions::SyntheticChildrenTraversal::Both: + if (root->IsSynthetic()) + { + child_valobj_sp = root->GetNonSyntheticValue(); + if (child_valobj_sp.get()) + child_valobj_sp = child_valobj_sp->GetChildMemberWithName(child_name, true); + } + else + { + child_valobj_sp = root->GetSyntheticValue(); + if (child_valobj_sp.get()) + child_valobj_sp = child_valobj_sp->GetChildMemberWithName(child_name, true); + } + break; } - - child_valobj_sp = root->GetSyntheticValue(); - if (child_valobj_sp.get()) - child_valobj_sp = child_valobj_sp->GetChildMemberWithName(child_name, true); } // if we are here and options.m_no_synthetic_children is true, child_valobj_sp is going to be a NULL SP, @@ -2863,19 +2887,43 @@ ValueObject::GetValueForExpressionPath_Impl(const char* expression_cstr, *final_result = ValueObject::eExpressionPathEndResultTypePlain; continue; } - else if (options.m_no_synthetic_children == false) // let's try with synthetic children + else { - if (root->IsSynthetic()) + switch (options.m_synthetic_children_traversal) { - *first_unparsed = expression_cstr; - *reason_to_stop = ValueObject::eExpressionPathScanEndReasonNoSuchChild; - *final_result = ValueObject::eExpressionPathEndResultTypeInvalid; - return ValueObjectSP(); + case GetValueForExpressionPathOptions::SyntheticChildrenTraversal::None: + break; + case GetValueForExpressionPathOptions::SyntheticChildrenTraversal::FromSynthetic: + if (root->IsSynthetic()) + { + child_valobj_sp = root->GetNonSyntheticValue(); + if (child_valobj_sp.get()) + child_valobj_sp = child_valobj_sp->GetChildMemberWithName(child_name, true); + } + break; + case GetValueForExpressionPathOptions::SyntheticChildrenTraversal::ToSynthetic: + if (!root->IsSynthetic()) + { + child_valobj_sp = root->GetSyntheticValue(); + if (child_valobj_sp.get()) + child_valobj_sp = child_valobj_sp->GetChildMemberWithName(child_name, true); + } + break; + case GetValueForExpressionPathOptions::SyntheticChildrenTraversal::Both: + if (root->IsSynthetic()) + { + child_valobj_sp = root->GetNonSyntheticValue(); + if (child_valobj_sp.get()) + child_valobj_sp = child_valobj_sp->GetChildMemberWithName(child_name, true); + } + else + { + child_valobj_sp = root->GetSyntheticValue(); + if (child_valobj_sp.get()) + child_valobj_sp = child_valobj_sp->GetChildMemberWithName(child_name, true); + } + break; } - - child_valobj_sp = root->GetSyntheticValue(true); - if (child_valobj_sp) - child_valobj_sp = child_valobj_sp->GetChildMemberWithName(child_name, true); } // if we are here and options.m_no_synthetic_children is true, child_valobj_sp is going to be a NULL SP, @@ -2903,7 +2951,7 @@ ValueObject::GetValueForExpressionPath_Impl(const char* expression_cstr, { if (!root_clang_type_info.Test(eTypeIsScalar)) // if this is not even a scalar... { - if (options.m_no_synthetic_children) // ...only chance left is synthetic + if (options.m_synthetic_children_traversal == GetValueForExpressionPathOptions::SyntheticChildrenTraversal::None) // ...only chance left is synthetic { *first_unparsed = expression_cstr; *reason_to_stop = ValueObject::eExpressionPathScanEndReasonRangeOperatorInvalid; @@ -3022,7 +3070,8 @@ ValueObject::GetValueForExpressionPath_Impl(const char* expression_cstr, if (root->GetClangType().GetMinimumLanguage() == eLanguageTypeObjC && pointee_clang_type_info.AllClear(eTypeIsPointer) && root->HasSyntheticValue() - && options.m_no_synthetic_children == false) + && (options.m_synthetic_children_traversal == GetValueForExpressionPathOptions::SyntheticChildrenTraversal::ToSynthetic || + options.m_synthetic_children_traversal == GetValueForExpressionPathOptions::SyntheticChildrenTraversal::Both)) { root = root->GetSyntheticValue()->GetChildAtIndex(index, true); } @@ -3078,7 +3127,8 @@ ValueObject::GetValueForExpressionPath_Impl(const char* expression_cstr, continue; } } - else if (options.m_no_synthetic_children == false) + else if (options.m_synthetic_children_traversal == GetValueForExpressionPathOptions::SyntheticChildrenTraversal::ToSynthetic || + options.m_synthetic_children_traversal == GetValueForExpressionPathOptions::SyntheticChildrenTraversal::Both) { if (root->HasSyntheticValue()) root = root->GetSyntheticValue(); |