diff --git a/lldb/include/lldb/Symbol/VariableList.h b/lldb/include/lldb/Symbol/VariableList.h index a5189d261202..2ce6146f4627 100644 --- a/lldb/include/lldb/Symbol/VariableList.h +++ b/lldb/include/lldb/Symbol/VariableList.h @@ -62,6 +62,11 @@ public: AppendVariablesIfUnique (const RegularExpression& regex, VariableList &var_list, size_t& total_matches); + + size_t + AppendVariablesWithScope (lldb::ValueType type, + VariableList &var_list, + bool if_unique = true); uint32_t FindIndexForVariable (Variable* variable); diff --git a/lldb/source/Core/Debugger.cpp b/lldb/source/Core/Debugger.cpp index 89c82ea76a5a..9e6fc2369deb 100644 --- a/lldb/source/Core/Debugger.cpp +++ b/lldb/source/Core/Debugger.cpp @@ -2251,16 +2251,7 @@ Debugger::FormatPrompt VariableList args; if (variable_list_sp) - { - const size_t num_variables = variable_list_sp->GetSize(); - for (size_t var_idx = 0; var_idx < num_variables; ++var_idx) - { - VariableSP var_sp (variable_list_sp->GetVariableAtIndex(var_idx)); - if (var_sp->GetScope() == eValueTypeVariableArgument) - args.AddVariable (var_sp); - } - - } + variable_list_sp->AppendVariablesWithScope(eValueTypeVariableArgument, args); if (args.GetSize() > 0) { const char *open_paren = strchr (cstr, '('); @@ -2294,7 +2285,12 @@ Debugger::FormatPrompt if (arg_idx > 0) s.PutCString (", "); if (var_value_sp->GetError().Success()) - s.Printf ("%s=%s", var_name, var_value); + { + if (var_value) + s.Printf ("%s=%s", var_name, var_value); + else + s.Printf ("%s=%s at %s", var_name, var_value_sp->GetTypeName().GetCString(), var_value_sp->GetLocationAsCString()); + } else s.Printf ("%s=", var_name); } diff --git a/lldb/source/Symbol/VariableList.cpp b/lldb/source/Symbol/VariableList.cpp index b34ea3a42c93..3451166e52d4 100644 --- a/lldb/source/Symbol/VariableList.cpp +++ b/lldb/source/Symbol/VariableList.cpp @@ -134,6 +134,27 @@ VariableList::AppendVariablesIfUnique (const RegularExpression& regex, VariableL return var_list.GetSize() - initial_size; } +size_t +VariableList::AppendVariablesWithScope (lldb::ValueType type, + VariableList &var_list, + bool if_unique) +{ + const size_t initial_size = var_list.GetSize(); + iterator pos, end = m_variables.end(); + for (pos = m_variables.begin(); pos != end; ++pos) + { + if ((*pos)->GetScope() == type) + { + if (if_unique) + var_list.AddVariableIfUnique (*pos); + else + var_list.AddVariable(*pos); + } + } + // Return the number of new unique variables added to "var_list" + return var_list.GetSize() - initial_size; +} + uint32_t VariableList::FindIndexForVariable (Variable* variable) {