[Lldb-commits] [lldb] r287320 - Revert "Remove an out param from ValueObject::GetValueForExpressionPath."

Zachary Turner via lldb-commits lldb-commits at lists.llvm.org
Thu Nov 17 22:34:45 PST 2016


Author: zturner
Date: Fri Nov 18 00:34:45 2016
New Revision: 287320

URL: http://llvm.org/viewvc/llvm-project?rev=287320&view=rev
Log:
Revert "Remove an out param from ValueObject::GetValueForExpressionPath."

This reverts commit r287315, as it introduces a bug that breaks
many things.

Modified:
    lldb/trunk/include/lldb/Core/ValueObject.h
    lldb/trunk/source/Core/FormatEntity.cpp
    lldb/trunk/source/Core/ValueObject.cpp
    lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxx.cpp
    lldb/trunk/source/Symbol/Variable.cpp

Modified: lldb/trunk/include/lldb/Core/ValueObject.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ValueObject.h?rev=287320&r1=287319&r2=287320&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Core/ValueObject.h (original)
+++ lldb/trunk/include/lldb/Core/ValueObject.h Fri Nov 18 00:34:45 2016
@@ -394,7 +394,7 @@ public:
       GetExpressionPathFormat = eGetExpressionPathFormatDereferencePointers);
 
   lldb::ValueObjectSP GetValueForExpressionPath(
-      const char *expression,
+      const char *expression, const char **first_unparsed = nullptr,
       ExpressionPathScanEndReason *reason_to_stop = nullptr,
       ExpressionPathEndResultType *final_value_type = nullptr,
       const GetValueForExpressionPathOptions &options =
@@ -1002,7 +1002,8 @@ private:
   virtual CompilerType MaybeCalculateCompleteType();
 
   lldb::ValueObjectSP GetValueForExpressionPath_Impl(
-      const char *expression_cstr, ExpressionPathScanEndReason *reason_to_stop,
+      const char *expression_cstr, const char **first_unparsed,
+      ExpressionPathScanEndReason *reason_to_stop,
       ExpressionPathEndResultType *final_value_type,
       const GetValueForExpressionPathOptions &options,
       ExpressionPathAftermath *final_task_on_target);

Modified: lldb/trunk/source/Core/FormatEntity.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/FormatEntity.cpp?rev=287320&r1=287319&r2=287320&view=diff
==============================================================================
--- lldb/trunk/source/Core/FormatEntity.cpp (original)
+++ lldb/trunk/source/Core/FormatEntity.cpp Fri Nov 18 00:34:45 2016
@@ -614,6 +614,7 @@ static ValueObjectSP ExpandIndexedExpres
   if (log)
     log->Printf("[ExpandIndexedExpression] name to deref: %s",
                 ptr_deref_buffer.c_str());
+  const char *first_unparsed;
   ValueObject::GetValueForExpressionPathOptions options;
   ValueObject::ExpressionPathEndResultType final_value_type;
   ValueObject::ExpressionPathScanEndReason reason_to_stop;
@@ -621,18 +622,20 @@ static ValueObjectSP ExpandIndexedExpres
       (deref_pointer ? ValueObject::eExpressionPathAftermathDereference
                      : ValueObject::eExpressionPathAftermathNothing);
   ValueObjectSP item = valobj->GetValueForExpressionPath(
-      ptr_deref_buffer.c_str(), &reason_to_stop, &final_value_type, options,
-      &what_next);
+      ptr_deref_buffer.c_str(), &first_unparsed, &reason_to_stop,
+      &final_value_type, options, &what_next);
   if (!item) {
     if (log)
-      log->Printf("[ExpandIndexedExpression] ERROR: why stopping = %d,"
+      log->Printf("[ExpandIndexedExpression] ERROR: unparsed portion = %s, why "
+                  "stopping = %d,"
                   " final_value_type %d",
-                  reason_to_stop, final_value_type);
+                  first_unparsed, reason_to_stop, final_value_type);
   } else {
     if (log)
-      log->Printf("[ExpandIndexedExpression] ALL RIGHT: why stopping = %d, "
-                  "final_value_type %d",
-                  reason_to_stop, final_value_type);
+      log->Printf("[ExpandIndexedExpression] ALL RIGHT: unparsed portion = %s, "
+                  "why stopping = %d,"
+                  " final_value_type %d",
+                  first_unparsed, reason_to_stop, final_value_type);
   }
   return item;
 }
@@ -721,6 +724,7 @@ static bool DumpValue(Stream &s, const S
   int64_t index_lower = -1;
   int64_t index_higher = -1;
   bool is_array_range = false;
+  const char *first_unparsed;
   bool was_plain_var = false;
   bool was_var_format = false;
   bool was_var_indexed = false;
@@ -758,23 +762,25 @@ static bool DumpValue(Stream &s, const S
       log->Printf("[Debugger::FormatPrompt] symbol to expand: %s",
                   expr_path.c_str());
 
-    target =
-        valobj
-            ->GetValueForExpressionPath(expr_path.c_str(), &reason_to_stop,
-                                        &final_value_type, options, &what_next)
-            .get();
+    target = valobj
+                 ->GetValueForExpressionPath(expr_path.c_str(), &first_unparsed,
+                                             &reason_to_stop, &final_value_type,
+                                             options, &what_next)
+                 .get();
 
     if (!target) {
       if (log)
-        log->Printf("[Debugger::FormatPrompt] ERROR: expr = %s, "
-                    "why stopping = %d, final_value_type %d",
-                    expr_path.c_str(), reason_to_stop, final_value_type);
+        log->Printf("[Debugger::FormatPrompt] ERROR: unparsed portion = %s, "
+                    "why stopping = %d,"
+                    " final_value_type %d",
+                    first_unparsed, reason_to_stop, final_value_type);
       return false;
     } else {
       if (log)
-        log->Printf("[Debugger::FormatPrompt] ALL RIGHT: expr = %s, "
-                    "why stopping = %d, final_value_type %d",
-                    expr_path.c_str(), reason_to_stop, final_value_type);
+        log->Printf("[Debugger::FormatPrompt] ALL RIGHT: unparsed portion = "
+                    "%s, why stopping = %d,"
+                    " final_value_type %d",
+                    first_unparsed, reason_to_stop, final_value_type);
       target = target
                    ->GetQualifiedRepresentationIfAvailable(
                        target->GetDynamicValueType(), true)

Modified: lldb/trunk/source/Core/ValueObject.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObject.cpp?rev=287320&r1=287319&r2=287320&view=diff
==============================================================================
--- lldb/trunk/source/Core/ValueObject.cpp (original)
+++ lldb/trunk/source/Core/ValueObject.cpp Fri Nov 18 00:34:45 2016
@@ -1922,7 +1922,7 @@ ValueObject::GetSyntheticExpressionPathC
     // We haven't made a synthetic array member for expression yet, so
     // lets make one and cache it for any future reference.
     synthetic_child_sp = GetValueForExpressionPath(
-        expression, nullptr, nullptr,
+        expression, NULL, NULL, NULL,
         GetValueForExpressionPathOptions().SetSyntheticChildrenTraversal(
             GetValueForExpressionPathOptions::SyntheticChildrenTraversal::
                 None));
@@ -2166,11 +2166,13 @@ void ValueObject::GetExpressionPath(Stre
 }
 
 ValueObjectSP ValueObject::GetValueForExpressionPath(
-    const char *expression, ExpressionPathScanEndReason *reason_to_stop,
+    const char *expression, const char **first_unparsed,
+    ExpressionPathScanEndReason *reason_to_stop,
     ExpressionPathEndResultType *final_value_type,
     const GetValueForExpressionPathOptions &options,
     ExpressionPathAftermath *final_task_on_target) {
 
+  const char *dummy_first_unparsed;
   ExpressionPathScanEndReason dummy_reason_to_stop =
       ValueObject::eExpressionPathScanEndReasonUnknown;
   ExpressionPathEndResultType dummy_final_value_type =
@@ -2179,7 +2181,8 @@ ValueObjectSP ValueObject::GetValueForEx
       ValueObject::eExpressionPathAftermathNothing;
 
   ValueObjectSP ret_val = GetValueForExpressionPath_Impl(
-      expression, reason_to_stop ? reason_to_stop : &dummy_reason_to_stop,
+      expression, first_unparsed ? first_unparsed : &dummy_first_unparsed,
+      reason_to_stop ? reason_to_stop : &dummy_reason_to_stop,
       final_value_type ? final_value_type : &dummy_final_value_type, options,
       final_task_on_target ? final_task_on_target
                            : &dummy_final_task_on_target);
@@ -2234,7 +2237,8 @@ ValueObjectSP ValueObject::GetValueForEx
 }
 
 ValueObjectSP ValueObject::GetValueForExpressionPath_Impl(
-    const char *expression_cstr, ExpressionPathScanEndReason *reason_to_stop,
+    const char *expression_cstr, const char **first_unparsed,
+    ExpressionPathScanEndReason *reason_to_stop,
     ExpressionPathEndResultType *final_result,
     const GetValueForExpressionPathOptions &options,
     ExpressionPathAftermath *what_next) {
@@ -2243,8 +2247,13 @@ ValueObjectSP ValueObject::GetValueForEx
   if (!root.get())
     return ValueObjectSP();
 
+  *first_unparsed = expression_cstr;
+
   while (true) {
 
+    const char *expression_cstr =
+        *first_unparsed; // hide the top level expression_cstr
+
     CompilerType root_compiler_type = root->GetCompilerType();
     CompilerType pointee_compiler_type;
     Flags pointee_compiler_type_info;
@@ -2267,6 +2276,7 @@ ValueObjectSP ValueObject::GetValueForEx
                                                         // non-pointer and I
                                                         // must catch the error
       {
+        *first_unparsed = expression_cstr;
         *reason_to_stop =
             ValueObject::eExpressionPathScanEndReasonArrowInsteadOfDot;
         *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
@@ -2277,12 +2287,14 @@ ValueObjectSP ValueObject::GetValueForEx
                                                        // when this is forbidden
           root_compiler_type_info.Test(eTypeIsPointer) &&
           options.m_no_fragile_ivar) {
+        *first_unparsed = expression_cstr;
         *reason_to_stop =
             ValueObject::eExpressionPathScanEndReasonFragileIVarNotAllowed;
         *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
         return ValueObjectSP();
       }
       if (expression_cstr[1] != '>') {
+        *first_unparsed = expression_cstr;
         *reason_to_stop =
             ValueObject::eExpressionPathScanEndReasonUnexpectedSymbol;
         *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
@@ -2299,6 +2311,7 @@ ValueObjectSP ValueObject::GetValueForEx
                                                         // and I must catch the
                                                         // error
       {
+        *first_unparsed = expression_cstr;
         *reason_to_stop =
             ValueObject::eExpressionPathScanEndReasonDotInsteadOfArrow;
         *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
@@ -2315,6 +2328,7 @@ ValueObjectSP ValueObject::GetValueForEx
 
         if (child_valobj_sp.get()) // we know we are done, so just return
         {
+          *first_unparsed = "";
           *reason_to_stop =
               ValueObject::eExpressionPathScanEndReasonEndOfString;
           *final_result = ValueObject::eExpressionPathEndResultTypePlain;
@@ -2364,11 +2378,13 @@ ValueObjectSP ValueObject::GetValueForEx
         // so we hit the "else" branch, and return an error
         if (child_valobj_sp.get()) // if it worked, just return
         {
+          *first_unparsed = "";
           *reason_to_stop =
               ValueObject::eExpressionPathScanEndReasonEndOfString;
           *final_result = ValueObject::eExpressionPathEndResultTypePlain;
           return child_valobj_sp;
         } else {
+          *first_unparsed = expression_cstr;
           *reason_to_stop =
               ValueObject::eExpressionPathScanEndReasonNoSuchChild;
           *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
@@ -2383,6 +2399,7 @@ ValueObjectSP ValueObject::GetValueForEx
         if (child_valobj_sp.get()) // store the new root and move on
         {
           root = child_valobj_sp;
+          *first_unparsed = next_separator;
           *final_result = ValueObject::eExpressionPathEndResultTypePlain;
           continue;
         } else {
@@ -2431,9 +2448,11 @@ ValueObjectSP ValueObject::GetValueForEx
         if (child_valobj_sp.get()) // if it worked, move on
         {
           root = child_valobj_sp;
+          *first_unparsed = next_separator;
           *final_result = ValueObject::eExpressionPathEndResultTypePlain;
           continue;
         } else {
+          *first_unparsed = expression_cstr;
           *reason_to_stop =
               ValueObject::eExpressionPathScanEndReasonNoSuchChild;
           *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
@@ -2455,6 +2474,7 @@ ValueObjectSP ValueObject::GetValueForEx
               GetValueForExpressionPathOptions::SyntheticChildrenTraversal::
                   None) // ...only chance left is synthetic
           {
+            *first_unparsed = expression_cstr;
             *reason_to_stop =
                 ValueObject::eExpressionPathScanEndReasonRangeOperatorInvalid;
             *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
@@ -2464,6 +2484,7 @@ ValueObjectSP ValueObject::GetValueForEx
                                                       // check that we can
                                                       // expand bitfields
         {
+          *first_unparsed = expression_cstr;
           *reason_to_stop =
               ValueObject::eExpressionPathScanEndReasonRangeOperatorNotAllowed;
           *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
@@ -2474,6 +2495,7 @@ ValueObjectSP ValueObject::GetValueForEx
           ']') // if this is an unbounded range it only works for arrays
       {
         if (!root_compiler_type_info.Test(eTypeIsArray)) {
+          *first_unparsed = expression_cstr;
           *reason_to_stop =
               ValueObject::eExpressionPathScanEndReasonEmptyRangeNotAllowed;
           *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
@@ -2481,6 +2503,7 @@ ValueObjectSP ValueObject::GetValueForEx
         } else // even if something follows, we cannot expand unbounded ranges,
                // just let the caller do it
         {
+          *first_unparsed = expression_cstr + 2;
           *reason_to_stop =
               ValueObject::eExpressionPathScanEndReasonArrayRangeOperatorMet;
           *final_result =
@@ -2492,6 +2515,7 @@ ValueObjectSP ValueObject::GetValueForEx
       const char *close_bracket_position = ::strchr(expression_cstr + 1, ']');
       if (!close_bracket_position) // if there is no ], this is a syntax error
       {
+        *first_unparsed = expression_cstr;
         *reason_to_stop =
             ValueObject::eExpressionPathScanEndReasonUnexpectedSymbol;
         *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
@@ -2507,6 +2531,7 @@ ValueObjectSP ValueObject::GetValueForEx
         if (end != close_bracket_position) // if something weird is in
                                            // our way return an error
         {
+          *first_unparsed = expression_cstr;
           *reason_to_stop =
               ValueObject::eExpressionPathScanEndReasonUnexpectedSymbol;
           *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
@@ -2524,9 +2549,11 @@ ValueObjectSP ValueObject::GetValueForEx
                   root->GetSyntheticValue()->GetChildAtIndex(index, true);
           if (child_valobj_sp) {
             root = child_valobj_sp;
+            *first_unparsed = end + 1; // skip ]
             *final_result = ValueObject::eExpressionPathEndResultTypePlain;
             continue;
           } else {
+            *first_unparsed = expression_cstr;
             *reason_to_stop =
                 ValueObject::eExpressionPathScanEndReasonNoSuchChild;
             *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
@@ -2548,6 +2575,7 @@ ValueObjectSP ValueObject::GetValueForEx
             Error error;
             root = root->Dereference(error);
             if (error.Fail() || !root.get()) {
+              *first_unparsed = expression_cstr;
               *reason_to_stop =
                   ValueObject::eExpressionPathScanEndReasonDereferencingFailed;
               *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
@@ -2571,11 +2599,13 @@ ValueObjectSP ValueObject::GetValueForEx
             } else
               root = root->GetSyntheticArrayMember(index, true);
             if (!root.get()) {
+              *first_unparsed = expression_cstr;
               *reason_to_stop =
                   ValueObject::eExpressionPathScanEndReasonNoSuchChild;
               *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
               return ValueObjectSP();
             } else {
+              *first_unparsed = end + 1; // skip ]
               *final_result = ValueObject::eExpressionPathEndResultTypePlain;
               continue;
             }
@@ -2583,6 +2613,7 @@ ValueObjectSP ValueObject::GetValueForEx
         } else if (root_compiler_type_info.Test(eTypeIsScalar)) {
           root = root->GetSyntheticBitFieldChild(index, index, true);
           if (!root.get()) {
+            *first_unparsed = expression_cstr;
             *reason_to_stop =
                 ValueObject::eExpressionPathScanEndReasonNoSuchChild;
             *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
@@ -2590,6 +2621,7 @@ ValueObjectSP ValueObject::GetValueForEx
           } else // we do not know how to expand members of bitfields, so we
                  // just return and let the caller do any further processing
           {
+            *first_unparsed = end + 1; // skip ]
             *reason_to_stop = ValueObject::
                 eExpressionPathScanEndReasonBitfieldRangeOperatorMet;
             *final_result = ValueObject::eExpressionPathEndResultTypeBitfield;
@@ -2598,11 +2630,13 @@ ValueObjectSP ValueObject::GetValueForEx
         } else if (root_compiler_type_info.Test(eTypeIsVector)) {
           root = root->GetChildAtIndex(index, true);
           if (!root.get()) {
+            *first_unparsed = expression_cstr;
             *reason_to_stop =
                 ValueObject::eExpressionPathScanEndReasonNoSuchChild;
             *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
             return ValueObjectSP();
           } else {
+            *first_unparsed = end + 1; // skip ]
             *final_result = ValueObject::eExpressionPathEndResultTypePlain;
             continue;
           }
@@ -2615,6 +2649,7 @@ ValueObjectSP ValueObject::GetValueForEx
           if (root->HasSyntheticValue())
             root = root->GetSyntheticValue();
           else if (!root->IsSynthetic()) {
+            *first_unparsed = expression_cstr;
             *reason_to_stop =
                 ValueObject::eExpressionPathScanEndReasonSyntheticValueMissing;
             *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
@@ -2624,6 +2659,7 @@ ValueObjectSP ValueObject::GetValueForEx
           // to go
 
           if (!root.get()) {
+            *first_unparsed = expression_cstr;
             *reason_to_stop =
                 ValueObject::eExpressionPathScanEndReasonSyntheticValueMissing;
             *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
@@ -2631,15 +2667,18 @@ ValueObjectSP ValueObject::GetValueForEx
           }
           root = root->GetChildAtIndex(index, true);
           if (!root.get()) {
+            *first_unparsed = expression_cstr;
             *reason_to_stop =
                 ValueObject::eExpressionPathScanEndReasonNoSuchChild;
             *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
             return ValueObjectSP();
           } else {
+            *first_unparsed = end + 1; // skip ]
             *final_result = ValueObject::eExpressionPathEndResultTypePlain;
             continue;
           }
         } else {
+          *first_unparsed = expression_cstr;
           *reason_to_stop =
               ValueObject::eExpressionPathScanEndReasonNoSuchChild;
           *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
@@ -2652,6 +2691,7 @@ ValueObjectSP ValueObject::GetValueForEx
         if (end != separator_position) // if something weird is in our
                                        // way return an error
         {
+          *first_unparsed = expression_cstr;
           *reason_to_stop =
               ValueObject::eExpressionPathScanEndReasonUnexpectedSymbol;
           *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
@@ -2661,6 +2701,7 @@ ValueObjectSP ValueObject::GetValueForEx
         if (end != close_bracket_position) // if something weird is in
                                            // our way return an error
         {
+          *first_unparsed = expression_cstr;
           *reason_to_stop =
               ValueObject::eExpressionPathScanEndReasonUnexpectedSymbol;
           *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
@@ -2675,11 +2716,13 @@ ValueObjectSP ValueObject::GetValueForEx
           root =
               root->GetSyntheticBitFieldChild(index_lower, index_higher, true);
           if (!root.get()) {
+            *first_unparsed = expression_cstr;
             *reason_to_stop =
                 ValueObject::eExpressionPathScanEndReasonNoSuchChild;
             *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
             return ValueObjectSP();
           } else {
+            *first_unparsed = end + 1; // skip ]
             *reason_to_stop = ValueObject::
                 eExpressionPathScanEndReasonBitfieldRangeOperatorMet;
             *final_result = ValueObject::eExpressionPathEndResultTypeBitfield;
@@ -2696,6 +2739,7 @@ ValueObjectSP ValueObject::GetValueForEx
           Error error;
           root = root->Dereference(error);
           if (error.Fail() || !root.get()) {
+            *first_unparsed = expression_cstr;
             *reason_to_stop =
                 ValueObject::eExpressionPathScanEndReasonDereferencingFailed;
             *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;
@@ -2705,6 +2749,7 @@ ValueObjectSP ValueObject::GetValueForEx
             continue;
           }
         } else {
+          *first_unparsed = expression_cstr;
           *reason_to_stop =
               ValueObject::eExpressionPathScanEndReasonArrayRangeOperatorMet;
           *final_result = ValueObject::eExpressionPathEndResultTypeBoundedRange;
@@ -2715,6 +2760,7 @@ ValueObjectSP ValueObject::GetValueForEx
     }
     default: // some non-separator is in the way
     {
+      *first_unparsed = expression_cstr;
       *reason_to_stop =
           ValueObject::eExpressionPathScanEndReasonUnexpectedSymbol;
       *final_result = ValueObject::eExpressionPathEndResultTypeInvalid;

Modified: lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxx.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxx.cpp?rev=287320&r1=287319&r2=287320&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxx.cpp (original)
+++ lldb/trunk/source/Plugins/Language/CPlusPlus/LibCxx.cpp Fri Nov 18 00:34:45 2016
@@ -280,7 +280,7 @@ bool lldb_private::formatters::LibCxxMap
   // die and free their memory
   m_pair_ptr = valobj_sp
                    ->GetValueForExpressionPath(
-                       ".__i_.__ptr_->__value_", nullptr, nullptr,
+                       ".__i_.__ptr_->__value_", nullptr, nullptr, nullptr,
                        ValueObject::GetValueForExpressionPathOptions()
                            .DontCheckDotVsArrowSyntax()
                            .SetSyntheticChildrenTraversal(
@@ -288,18 +288,16 @@ bool lldb_private::formatters::LibCxxMap
                                    SyntheticChildrenTraversal::None),
                        nullptr)
                    .get();
-
+  
   if (!m_pair_ptr) {
-    m_pair_ptr = valobj_sp
-                     ->GetValueForExpressionPath(
-                         ".__i_.__ptr_", nullptr, nullptr,
-                         ValueObject::GetValueForExpressionPathOptions()
-                             .DontCheckDotVsArrowSyntax()
-                             .SetSyntheticChildrenTraversal(
-                                 ValueObject::GetValueForExpressionPathOptions::
-                                     SyntheticChildrenTraversal::None),
-                         nullptr)
-                     .get();
+    m_pair_ptr = valobj_sp->GetValueForExpressionPath(".__i_.__ptr_", nullptr, nullptr, nullptr,
+                                                      ValueObject::GetValueForExpressionPathOptions()
+                                                      .DontCheckDotVsArrowSyntax()
+                                                      .SetSyntheticChildrenTraversal(
+                                                                                     ValueObject::GetValueForExpressionPathOptions::
+                                                                                     SyntheticChildrenTraversal::None),
+                                                      nullptr)
+    .get();
     if (m_pair_ptr) {
       auto __i_(valobj_sp->GetChildMemberWithName(g___i_, true));
       lldb::TemplateArgumentKind kind;

Modified: lldb/trunk/source/Symbol/Variable.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Symbol/Variable.cpp?rev=287320&r1=287319&r2=287320&view=diff
==============================================================================
--- lldb/trunk/source/Symbol/Variable.cpp (original)
+++ lldb/trunk/source/Symbol/Variable.cpp Fri Nov 18 00:34:45 2016
@@ -404,8 +404,16 @@ Error Variable::GetValuesForVariableExpr
                   const char *variable_sub_expr_path =
                       variable_expr_path + variable_name.size();
                   if (*variable_sub_expr_path) {
+                    const char *first_unparsed = nullptr;
+                    ValueObject::ExpressionPathScanEndReason reason_to_stop;
+                    ValueObject::ExpressionPathEndResultType final_value_type;
+                    ValueObject::GetValueForExpressionPathOptions options;
+                    ValueObject::ExpressionPathAftermath final_task_on_target;
+
                     valobj_sp = variable_valobj_sp->GetValueForExpressionPath(
-                        variable_sub_expr_path);
+                        variable_sub_expr_path, &first_unparsed,
+                        &reason_to_stop, &final_value_type, options,
+                        &final_task_on_target);
                     if (!valobj_sp) {
                       error.SetErrorStringWithFormat(
                           "invalid expression path '%s' for variable '%s'",




More information about the lldb-commits mailing list