Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(534)

Unified Diff: runtime/vm/debugger.cc

Issue 10657048: Debugger support to display global variables (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: runtime/vm/debugger.cc
===================================================================
--- runtime/vm/debugger.cc (revision 9118)
+++ runtime/vm/debugger.cc (working copy)
@@ -173,6 +173,13 @@
}
+RawLibrary* ActivationFrame::Library() {
+ const Function& func = DartFunction();
+ const Class& cls = Class::Handle(func.owner());
+ return cls.library();
+}
+
+
void ActivationFrame::GetPcDescriptors() {
if (pc_desc_.IsNull()) {
const Function& func = DartFunction();
@@ -1101,15 +1108,15 @@
}
-RawArray* Debugger::GetLibraryFields(const Library& lib) {
- const GrowableObjectArray& field_list =
- GrowableObjectArray::Handle(GrowableObjectArray::New(8));
+void Debugger::CollectLibraryFields(const GrowableObjectArray& field_list,
+ const Library& lib,
+ const String& prefix) {
DictionaryIterator it(lib);
- Object& entry = Object::Handle();
- Field& field = Field::Handle();
- Class& cls = Class::Handle();
- String& field_name = String::Handle();
- Object& field_value = Object::Handle();
+ Object& entry = Object::Handle(isolate_);
srdjan 2012/06/26 17:08:26 Why all this isolates_ passing? Is there a perform
hausner 2012/06/26 17:32:12 As discussed offline, it has a tiny impact on perf
+ Field& field = Field::Handle(isolate_);
+ Class& cls = Class::Handle(isolate_);
+ String& field_name = String::Handle(isolate_);
+ Object& field_value = Object::Handle(isolate_);
while (it.HasNext()) {
entry = it.GetNext();
if (entry.IsField()) {
@@ -1118,14 +1125,53 @@
ASSERT(field.is_static());
field_name = field.name();
field_value = GetStaticField(cls, field_name);
+ if (!prefix.IsNull()) {
+ field_name = String::Concat(prefix, field_name);
+ }
field_list.Add(field_name);
field_list.Add(field_value);
}
}
+}
+
+
+RawArray* Debugger::GetLibraryFields(const Library& lib) {
+ const GrowableObjectArray& field_list =
+ GrowableObjectArray::Handle(GrowableObjectArray::New(8));
+ CollectLibraryFields(field_list, lib, String::Handle(isolate_));
return Array::MakeArray(field_list);
}
+RawArray* Debugger::GetGlobalFields(const Library& lib) {
+ const GrowableObjectArray& field_list =
+ GrowableObjectArray::Handle(GrowableObjectArray::New(8));
srdjan 2012/06/26 17:08:26 Why 8? Maybe better to not pass the length if you
hausner 2012/06/26 17:32:12 No particular reason. It just eliminates the first
+ String& prefix_name = String::Handle(isolate_);
+ CollectLibraryFields(field_list, lib, prefix_name);
+ Library& imported = Library::Handle(isolate_);
+ intptr_t num_imports = lib.num_imports();
+ for (int i = 0; i < num_imports; i++) {
+ imported = lib.ImportAt(i);
+ ASSERT(!imported.IsNull());
+ CollectLibraryFields(field_list, imported, prefix_name);
+ }
+ LibraryPrefix& prefix = LibraryPrefix::Handle(isolate_);
+ LibraryPrefixIterator it(lib);
+ while (it.HasNext()) {
+ prefix = it.GetNext();
+ prefix_name = prefix.name();
+ ASSERT(!prefix_name.IsNull());
+ prefix_name = String::Concat(prefix_name,
+ String::Handle(isolate_, String::New(".")));
+ for (int i = 0; i < prefix.num_libs(); i++) {
+ imported = prefix.GetLibrary(i);
+ CollectLibraryFields(field_list, imported, prefix_name);
+ }
+ }
+ return Array::MakeArray(field_list);
+}
+
+
void Debugger::VisitObjectPointers(ObjectPointerVisitor* visitor) {
ASSERT(visitor != NULL);
SourceBreakpoint* bpt = src_breakpoints_;
« no previous file with comments | « runtime/vm/debugger.h ('k') | runtime/vm/debugger_api_impl.cc » ('j') | runtime/vm/object.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698