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

Side by Side Diff: runtime/vm/debugger.cc

Issue 10783038: Don't return private fields from imported libs (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 "vm/code_generator.h" 7 #include "vm/code_generator.h"
8 #include "vm/code_patcher.h" 8 #include "vm/code_patcher.h"
9 #include "vm/compiler.h" 9 #include "vm/compiler.h"
10 #include "vm/dart_entry.h" 10 #include "vm/dart_entry.h"
(...skipping 1125 matching lines...) Expand 10 before | Expand all | Expand 10 after
1136 field_list.Add(field_name); 1136 field_list.Add(field_name);
1137 field_list.Add(field_value); 1137 field_list.Add(field_value);
1138 } 1138 }
1139 } 1139 }
1140 return Array::MakeArray(field_list); 1140 return Array::MakeArray(field_list);
1141 } 1141 }
1142 1142
1143 1143
1144 void Debugger::CollectLibraryFields(const GrowableObjectArray& field_list, 1144 void Debugger::CollectLibraryFields(const GrowableObjectArray& field_list,
1145 const Library& lib, 1145 const Library& lib,
1146 const String& prefix) { 1146 const String& prefix,
1147 bool include_private_fields) {
1147 DictionaryIterator it(lib); 1148 DictionaryIterator it(lib);
1148 Object& entry = Object::Handle(isolate_); 1149 Object& entry = Object::Handle(isolate_);
1149 Field& field = Field::Handle(isolate_); 1150 Field& field = Field::Handle(isolate_);
1150 Class& cls = Class::Handle(isolate_); 1151 Class& cls = Class::Handle(isolate_);
1151 String& field_name = String::Handle(isolate_); 1152 String& field_name = String::Handle(isolate_);
1152 Object& field_value = Object::Handle(isolate_); 1153 Object& field_value = Object::Handle(isolate_);
1153 while (it.HasNext()) { 1154 while (it.HasNext()) {
1154 entry = it.GetNext(); 1155 entry = it.GetNext();
1155 if (entry.IsField()) { 1156 if (entry.IsField()) {
1156 field ^= entry.raw(); 1157 field ^= entry.raw();
1157 cls = field.owner(); 1158 cls = field.owner();
1158 ASSERT(field.is_static()); 1159 ASSERT(field.is_static());
1159 field_name = field.name(); 1160 field_name = field.name();
1161 if ((field_name.CharAt(0) == '_') && !include_private_fields) {
1162 // Skip library-private field.
1163 continue;
1164 }
1160 field_value = GetStaticField(cls, field_name); 1165 field_value = GetStaticField(cls, field_name);
1161 if (!prefix.IsNull()) { 1166 if (!prefix.IsNull()) {
1162 field_name = String::Concat(prefix, field_name); 1167 field_name = String::Concat(prefix, field_name);
1163 } 1168 }
1164 field_list.Add(field_name); 1169 field_list.Add(field_name);
1165 field_list.Add(field_value); 1170 field_list.Add(field_value);
1166 } 1171 }
1167 } 1172 }
1168 } 1173 }
1169 1174
1170 1175
1171 RawArray* Debugger::GetLibraryFields(const Library& lib) { 1176 RawArray* Debugger::GetLibraryFields(const Library& lib) {
1172 const GrowableObjectArray& field_list = 1177 const GrowableObjectArray& field_list =
1173 GrowableObjectArray::Handle(GrowableObjectArray::New(8)); 1178 GrowableObjectArray::Handle(GrowableObjectArray::New(8));
1174 CollectLibraryFields(field_list, lib, String::Handle(isolate_)); 1179 CollectLibraryFields(field_list, lib, String::Handle(isolate_), true);
1175 return Array::MakeArray(field_list); 1180 return Array::MakeArray(field_list);
1176 } 1181 }
1177 1182
1178 1183
1179 RawArray* Debugger::GetGlobalFields(const Library& lib) { 1184 RawArray* Debugger::GetGlobalFields(const Library& lib) {
1180 const GrowableObjectArray& field_list = 1185 const GrowableObjectArray& field_list =
1181 GrowableObjectArray::Handle(GrowableObjectArray::New(8)); 1186 GrowableObjectArray::Handle(GrowableObjectArray::New(8));
1182 String& prefix_name = String::Handle(isolate_); 1187 String& prefix_name = String::Handle(isolate_);
1183 CollectLibraryFields(field_list, lib, prefix_name); 1188 CollectLibraryFields(field_list, lib, prefix_name, true);
1184 Library& imported = Library::Handle(isolate_); 1189 Library& imported = Library::Handle(isolate_);
1185 intptr_t num_imports = lib.num_imports(); 1190 intptr_t num_imports = lib.num_imports();
1186 for (int i = 0; i < num_imports; i++) { 1191 for (int i = 0; i < num_imports; i++) {
1187 imported = lib.ImportAt(i); 1192 imported = lib.ImportAt(i);
1188 ASSERT(!imported.IsNull()); 1193 ASSERT(!imported.IsNull());
1189 CollectLibraryFields(field_list, imported, prefix_name); 1194 CollectLibraryFields(field_list, imported, prefix_name, false);
1190 } 1195 }
1191 LibraryPrefix& prefix = LibraryPrefix::Handle(isolate_); 1196 LibraryPrefix& prefix = LibraryPrefix::Handle(isolate_);
1192 LibraryPrefixIterator it(lib); 1197 LibraryPrefixIterator it(lib);
1193 while (it.HasNext()) { 1198 while (it.HasNext()) {
1194 prefix = it.GetNext(); 1199 prefix = it.GetNext();
1195 prefix_name = prefix.name(); 1200 prefix_name = prefix.name();
1196 ASSERT(!prefix_name.IsNull()); 1201 ASSERT(!prefix_name.IsNull());
1197 prefix_name = String::Concat(prefix_name, 1202 prefix_name = String::Concat(prefix_name,
1198 String::Handle(isolate_, String::New("."))); 1203 String::Handle(isolate_, String::New(".")));
1199 for (int i = 0; i < prefix.num_libs(); i++) { 1204 for (int i = 0; i < prefix.num_libs(); i++) {
1200 imported = prefix.GetLibrary(i); 1205 imported = prefix.GetLibrary(i);
1201 CollectLibraryFields(field_list, imported, prefix_name); 1206 CollectLibraryFields(field_list, imported, prefix_name, false);
1202 } 1207 }
1203 } 1208 }
1204 return Array::MakeArray(field_list); 1209 return Array::MakeArray(field_list);
1205 } 1210 }
1206 1211
1207 1212
1208 void Debugger::VisitObjectPointers(ObjectPointerVisitor* visitor) { 1213 void Debugger::VisitObjectPointers(ObjectPointerVisitor* visitor) {
1209 ASSERT(visitor != NULL); 1214 ASSERT(visitor != NULL);
1210 SourceBreakpoint* bpt = src_breakpoints_; 1215 SourceBreakpoint* bpt = src_breakpoints_;
1211 while (bpt != NULL) { 1216 while (bpt != NULL) {
(...skipping 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
1552 } 1557 }
1553 1558
1554 1559
1555 void Debugger::RegisterCodeBreakpoint(CodeBreakpoint* bpt) { 1560 void Debugger::RegisterCodeBreakpoint(CodeBreakpoint* bpt) {
1556 ASSERT(bpt->next() == NULL); 1561 ASSERT(bpt->next() == NULL);
1557 bpt->set_next(code_breakpoints_); 1562 bpt->set_next(code_breakpoints_);
1558 code_breakpoints_ = bpt; 1563 code_breakpoints_ = bpt;
1559 } 1564 }
1560 1565
1561 } // namespace dart 1566 } // namespace dart
OLDNEW
« runtime/vm/debugger.h ('K') | « runtime/vm/debugger.h ('k') | tools/ddbg.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698