| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/debugger.h" | 5 #include "vm/debugger.h" |
| 6 | 6 |
| 7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
| 8 | 8 |
| 9 #include "platform/address_sanitizer.h" | 9 #include "platform/address_sanitizer.h" |
| 10 | 10 |
| (...skipping 1357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1368 // of the activation's current scope. | 1368 // of the activation's current scope. |
| 1369 if (!conflict) { | 1369 if (!conflict) { |
| 1370 param_names.Add(name); | 1370 param_names.Add(name); |
| 1371 param_values.Add(value); | 1371 param_values.Add(value); |
| 1372 } | 1372 } |
| 1373 } | 1373 } |
| 1374 } | 1374 } |
| 1375 | 1375 |
| 1376 if (function().is_static()) { | 1376 if (function().is_static()) { |
| 1377 const Class& cls = Class::Handle(function().Owner()); | 1377 const Class& cls = Class::Handle(function().Owner()); |
| 1378 return cls.Evaluate(expr, Array::Handle(Array::MakeArray(param_names)), | 1378 return cls.Evaluate(expr, |
| 1379 Array::Handle(Array::MakeArray(param_values))); | 1379 Array::Handle(Array::MakeFixedLength(param_names)), |
| 1380 Array::Handle(Array::MakeFixedLength(param_values))); |
| 1380 } else { | 1381 } else { |
| 1381 const Object& receiver = Object::Handle(GetReceiver()); | 1382 const Object& receiver = Object::Handle(GetReceiver()); |
| 1382 const Class& method_cls = Class::Handle(function().origin()); | 1383 const Class& method_cls = Class::Handle(function().origin()); |
| 1383 ASSERT(receiver.IsInstance() || receiver.IsNull()); | 1384 ASSERT(receiver.IsInstance() || receiver.IsNull()); |
| 1384 if (!(receiver.IsInstance() || receiver.IsNull())) { | 1385 if (!(receiver.IsInstance() || receiver.IsNull())) { |
| 1385 return Object::null(); | 1386 return Object::null(); |
| 1386 } | 1387 } |
| 1387 const Instance& inst = Instance::Cast(receiver); | 1388 const Instance& inst = Instance::Cast(receiver); |
| 1388 return inst.Evaluate(method_cls, expr, | 1389 return inst.Evaluate(method_cls, expr, |
| 1389 Array::Handle(Array::MakeArray(param_names)), | 1390 Array::Handle(Array::MakeFixedLength(param_names)), |
| 1390 Array::Handle(Array::MakeArray(param_values))); | 1391 Array::Handle(Array::MakeFixedLength(param_values))); |
| 1391 } | 1392 } |
| 1392 UNREACHABLE(); | 1393 UNREACHABLE(); |
| 1393 return Object::null(); | 1394 return Object::null(); |
| 1394 } | 1395 } |
| 1395 | 1396 |
| 1396 | 1397 |
| 1397 const char* ActivationFrame::ToCString() { | 1398 const char* ActivationFrame::ToCString() { |
| 1398 const String& url = String::Handle(SourceUrl()); | 1399 const String& url = String::Handle(SourceUrl()); |
| 1399 intptr_t line = LineNumber(); | 1400 intptr_t line = LineNumber(); |
| 1400 const char* func_name = Debugger::QualifiedFunctionName(function()); | 1401 const char* func_name = Debugger::QualifiedFunctionName(function()); |
| (...skipping 1767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3168 field ^= fields.At(i); | 3169 field ^= fields.At(i); |
| 3169 if (!field.is_static()) { | 3170 if (!field.is_static()) { |
| 3170 field_name = field.name(); | 3171 field_name = field.name(); |
| 3171 field_list.Add(field_name); | 3172 field_list.Add(field_name); |
| 3172 field_value = GetInstanceField(cls, field_name, obj); | 3173 field_value = GetInstanceField(cls, field_name, obj); |
| 3173 field_list.Add(field_value); | 3174 field_list.Add(field_value); |
| 3174 } | 3175 } |
| 3175 } | 3176 } |
| 3176 cls = cls.SuperClass(); | 3177 cls = cls.SuperClass(); |
| 3177 } | 3178 } |
| 3178 return Array::MakeArray(field_list); | 3179 return Array::MakeFixedLength(field_list); |
| 3179 } | 3180 } |
| 3180 | 3181 |
| 3181 | 3182 |
| 3182 RawArray* Debugger::GetStaticFields(const Class& cls) { | 3183 RawArray* Debugger::GetStaticFields(const Class& cls) { |
| 3183 const GrowableObjectArray& field_list = | 3184 const GrowableObjectArray& field_list = |
| 3184 GrowableObjectArray::Handle(GrowableObjectArray::New(8)); | 3185 GrowableObjectArray::Handle(GrowableObjectArray::New(8)); |
| 3185 Array& fields = Array::Handle(cls.fields()); | 3186 Array& fields = Array::Handle(cls.fields()); |
| 3186 Field& field = Field::Handle(); | 3187 Field& field = Field::Handle(); |
| 3187 String& field_name = String::Handle(); | 3188 String& field_name = String::Handle(); |
| 3188 PassiveObject& field_value = PassiveObject::Handle(); | 3189 PassiveObject& field_value = PassiveObject::Handle(); |
| 3189 for (intptr_t i = 0; i < fields.Length(); i++) { | 3190 for (intptr_t i = 0; i < fields.Length(); i++) { |
| 3190 field ^= fields.At(i); | 3191 field ^= fields.At(i); |
| 3191 if (field.is_static()) { | 3192 if (field.is_static()) { |
| 3192 field_name = field.name(); | 3193 field_name = field.name(); |
| 3193 field_value = GetStaticField(cls, field_name); | 3194 field_value = GetStaticField(cls, field_name); |
| 3194 field_list.Add(field_name); | 3195 field_list.Add(field_name); |
| 3195 field_list.Add(field_value); | 3196 field_list.Add(field_value); |
| 3196 } | 3197 } |
| 3197 } | 3198 } |
| 3198 return Array::MakeArray(field_list); | 3199 return Array::MakeFixedLength(field_list); |
| 3199 } | 3200 } |
| 3200 | 3201 |
| 3201 | 3202 |
| 3202 void Debugger::CollectLibraryFields(const GrowableObjectArray& field_list, | 3203 void Debugger::CollectLibraryFields(const GrowableObjectArray& field_list, |
| 3203 const Library& lib, | 3204 const Library& lib, |
| 3204 const String& prefix, | 3205 const String& prefix, |
| 3205 bool include_private_fields) { | 3206 bool include_private_fields) { |
| 3206 DictionaryIterator it(lib); | 3207 DictionaryIterator it(lib); |
| 3207 Zone* zone = Thread::Current()->zone(); | 3208 Zone* zone = Thread::Current()->zone(); |
| 3208 Object& entry = Object::Handle(zone); | 3209 Object& entry = Object::Handle(zone); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 3236 } | 3237 } |
| 3237 } | 3238 } |
| 3238 } | 3239 } |
| 3239 | 3240 |
| 3240 | 3241 |
| 3241 RawArray* Debugger::GetLibraryFields(const Library& lib) { | 3242 RawArray* Debugger::GetLibraryFields(const Library& lib) { |
| 3242 Zone* zone = Thread::Current()->zone(); | 3243 Zone* zone = Thread::Current()->zone(); |
| 3243 const GrowableObjectArray& field_list = | 3244 const GrowableObjectArray& field_list = |
| 3244 GrowableObjectArray::Handle(GrowableObjectArray::New(8)); | 3245 GrowableObjectArray::Handle(GrowableObjectArray::New(8)); |
| 3245 CollectLibraryFields(field_list, lib, String::Handle(zone), true); | 3246 CollectLibraryFields(field_list, lib, String::Handle(zone), true); |
| 3246 return Array::MakeArray(field_list); | 3247 return Array::MakeFixedLength(field_list); |
| 3247 } | 3248 } |
| 3248 | 3249 |
| 3249 | 3250 |
| 3250 RawArray* Debugger::GetGlobalFields(const Library& lib) { | 3251 RawArray* Debugger::GetGlobalFields(const Library& lib) { |
| 3251 Zone* zone = Thread::Current()->zone(); | 3252 Zone* zone = Thread::Current()->zone(); |
| 3252 const GrowableObjectArray& field_list = | 3253 const GrowableObjectArray& field_list = |
| 3253 GrowableObjectArray::Handle(zone, GrowableObjectArray::New(8)); | 3254 GrowableObjectArray::Handle(zone, GrowableObjectArray::New(8)); |
| 3254 String& prefix_name = String::Handle(zone); | 3255 String& prefix_name = String::Handle(zone); |
| 3255 CollectLibraryFields(field_list, lib, prefix_name, true); | 3256 CollectLibraryFields(field_list, lib, prefix_name, true); |
| 3256 Library& imported = Library::Handle(zone); | 3257 Library& imported = Library::Handle(zone); |
| 3257 intptr_t num_imports = lib.num_imports(); | 3258 intptr_t num_imports = lib.num_imports(); |
| 3258 for (intptr_t i = 0; i < num_imports; i++) { | 3259 for (intptr_t i = 0; i < num_imports; i++) { |
| 3259 imported = lib.ImportLibraryAt(i); | 3260 imported = lib.ImportLibraryAt(i); |
| 3260 ASSERT(!imported.IsNull()); | 3261 ASSERT(!imported.IsNull()); |
| 3261 CollectLibraryFields(field_list, imported, prefix_name, false); | 3262 CollectLibraryFields(field_list, imported, prefix_name, false); |
| 3262 } | 3263 } |
| 3263 LibraryPrefix& prefix = LibraryPrefix::Handle(zone); | 3264 LibraryPrefix& prefix = LibraryPrefix::Handle(zone); |
| 3264 LibraryPrefixIterator it(lib); | 3265 LibraryPrefixIterator it(lib); |
| 3265 while (it.HasNext()) { | 3266 while (it.HasNext()) { |
| 3266 prefix = it.GetNext(); | 3267 prefix = it.GetNext(); |
| 3267 prefix_name = prefix.name(); | 3268 prefix_name = prefix.name(); |
| 3268 ASSERT(!prefix_name.IsNull()); | 3269 ASSERT(!prefix_name.IsNull()); |
| 3269 prefix_name = String::Concat(prefix_name, Symbols::Dot()); | 3270 prefix_name = String::Concat(prefix_name, Symbols::Dot()); |
| 3270 for (int32_t i = 0; i < prefix.num_imports(); i++) { | 3271 for (int32_t i = 0; i < prefix.num_imports(); i++) { |
| 3271 imported = prefix.GetLibrary(i); | 3272 imported = prefix.GetLibrary(i); |
| 3272 CollectLibraryFields(field_list, imported, prefix_name, false); | 3273 CollectLibraryFields(field_list, imported, prefix_name, false); |
| 3273 } | 3274 } |
| 3274 } | 3275 } |
| 3275 return Array::MakeArray(field_list); | 3276 return Array::MakeFixedLength(field_list); |
| 3276 } | 3277 } |
| 3277 | 3278 |
| 3278 | 3279 |
| 3279 // static | 3280 // static |
| 3280 void Debugger::VisitObjectPointers(ObjectPointerVisitor* visitor) { | 3281 void Debugger::VisitObjectPointers(ObjectPointerVisitor* visitor) { |
| 3281 ASSERT(visitor != NULL); | 3282 ASSERT(visitor != NULL); |
| 3282 BreakpointLocation* bpt = breakpoint_locations_; | 3283 BreakpointLocation* bpt = breakpoint_locations_; |
| 3283 while (bpt != NULL) { | 3284 while (bpt != NULL) { |
| 3284 bpt->VisitObjectPointers(visitor); | 3285 bpt->VisitObjectPointers(visitor); |
| 3285 bpt = bpt->next(); | 3286 bpt = bpt->next(); |
| (...skipping 1242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4528 | 4529 |
| 4529 void Debugger::RegisterCodeBreakpoint(CodeBreakpoint* bpt) { | 4530 void Debugger::RegisterCodeBreakpoint(CodeBreakpoint* bpt) { |
| 4530 ASSERT(bpt->next() == NULL); | 4531 ASSERT(bpt->next() == NULL); |
| 4531 bpt->set_next(code_breakpoints_); | 4532 bpt->set_next(code_breakpoints_); |
| 4532 code_breakpoints_ = bpt; | 4533 code_breakpoints_ = bpt; |
| 4533 } | 4534 } |
| 4534 | 4535 |
| 4535 #endif // !PRODUCT | 4536 #endif // !PRODUCT |
| 4536 | 4537 |
| 4537 } // namespace dart | 4538 } // namespace dart |
| OLD | NEW |