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, |