Chromium Code Reviews| Index: runtime/vm/debugger.cc |
| diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc |
| index 2bd07a4ba09af7f89d7ad6a6f8d5fb33a313a8b6..2e68d750ebd704f1a62deaa1f7fc4dfc83015275 100644 |
| --- a/runtime/vm/debugger.cc |
| +++ b/runtime/vm/debugger.cc |
| @@ -1284,13 +1284,12 @@ static bool IsPrivateVariableName(const String& var_name) { |
| } |
| -RawObject* ActivationFrame::Evaluate(const String& expr) { |
| +RawObject* ActivationFrame::Evaluate(const String& expr, |
| + const GrowableObjectArray& param_names, |
| + const GrowableObjectArray& param_values) { |
| GetDescIndices(); |
| - const GrowableObjectArray& param_names = |
| - GrowableObjectArray::Handle(GrowableObjectArray::New()); |
| - const GrowableObjectArray& param_values = |
| - GrowableObjectArray::Handle(GrowableObjectArray::New()); |
| String& name = String::Handle(); |
| + String& existing_name = String::Handle(); |
| Object& value = Instance::Handle(); |
| intptr_t num_variables = desc_indices_.length(); |
| for (intptr_t i = 0; i < num_variables; i++) { |
| @@ -1300,8 +1299,18 @@ RawObject* ActivationFrame::Evaluate(const String& expr) { |
| if (IsPrivateVariableName(name)) { |
| name = String::ScrubName(name); |
| } |
| - param_names.Add(name); |
| - param_values.Add(value); |
| + bool conflict = false; |
| + for (intptr_t j = 0; j < param_names.Length(); j++) { |
| + existing_name ^= param_names.At(j); |
| + if (name.Equals(existing_name)) { |
| + conflict = true; |
| + break; |
| + } |
| + } |
| + if (!conflict) { |
| + param_names.Add(name); |
| + param_values.Add(value); |
| + } |
|
siva
2017/05/18 20:56:48
if there are conflicts what happens do we get an e
rmacnak
2017/05/19 00:56:44
This code says if there is a local 'x' and value i
|
| } |
| } |
| @@ -1655,8 +1664,7 @@ void Debugger::Shutdown() { |
| } |
| -void Debugger::OnIsolateRunnable() { |
| -} |
| +void Debugger::OnIsolateRunnable() {} |
| static RawFunction* ResolveLibraryFunction(const Library& library, |