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

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

Issue 1865553003: vm-service: Answer fields from superclass to subclass in declaration order (layout order). (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 8 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
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, 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 #include "vm/disassembler.h" 6 #include "vm/disassembler.h"
7 #include "vm/object.h" 7 #include "vm/object.h"
8 #include "vm/object_store.h" 8 #include "vm/object_store.h"
9 #include "vm/stub_code.h" 9 #include "vm/stub_code.h"
10 #include "vm/symbols.h" 10 #include "vm/symbols.h"
(...skipping 1016 matching lines...) Expand 10 before | Expand all | Expand 10 after
1027 } 1027 }
1028 1028
1029 1029
1030 void Instance::PrintSharedInstanceJSON(JSONObject* jsobj, 1030 void Instance::PrintSharedInstanceJSON(JSONObject* jsobj,
1031 bool ref) const { 1031 bool ref) const {
1032 AddCommonObjectProperties(jsobj, "Instance", ref); 1032 AddCommonObjectProperties(jsobj, "Instance", ref);
1033 if (ref) { 1033 if (ref) {
1034 return; 1034 return;
1035 } 1035 }
1036 1036
1037 // Walk the superclass chain, adding all instance fields. 1037 // Add all fields in layout order, from superclass to subclass.
1038 GrowableArray<Class*> classes;
1038 Class& cls = Class::Handle(this->clazz()); 1039 Class& cls = Class::Handle(this->clazz());
1040 do {
1041 cls.Print();
1042 classes.Add(&Class::Handle(cls.raw()));
1043 cls = cls.SuperClass();
1044 } while (!cls.IsNull());
1045
1046 Array& field_array = Array::Handle();
1047 Field& field = Field::Handle();
1048 Instance& field_value = Instance::Handle();
1039 { 1049 {
1040 Instance& fieldValue = Instance::Handle();
1041 JSONArray jsarr(jsobj, "fields"); 1050 JSONArray jsarr(jsobj, "fields");
1042 while (!cls.IsNull()) { 1051 for (intptr_t i = classes.length() - 1; i >= 0; i--) {
1043 const Array& field_array = Array::Handle(cls.fields()); 1052 field_array = classes[i]->fields();
1044 Field& field = Field::Handle();
1045 if (!field_array.IsNull()) { 1053 if (!field_array.IsNull()) {
1046 for (intptr_t i = 0; i < field_array.Length(); i++) { 1054 for (intptr_t j = 0; j < field_array.Length(); j++) {
1047 field ^= field_array.At(i); 1055 field ^= field_array.At(j);
1048 if (!field.is_static()) { 1056 if (!field.is_static()) {
1049 fieldValue ^= GetField(field); 1057 field_value ^= GetField(field);
1050 JSONObject jsfield(&jsarr); 1058 JSONObject jsfield(&jsarr);
1051 jsfield.AddProperty("type", "BoundField"); 1059 jsfield.AddProperty("type", "BoundField");
1052 jsfield.AddProperty("decl", field); 1060 jsfield.AddProperty("decl", field);
1053 jsfield.AddProperty("value", fieldValue); 1061 jsfield.AddProperty("value", field_value);
1054 } 1062 }
1055 } 1063 }
1056 } 1064 }
1057 cls = cls.SuperClass();
1058 } 1065 }
1059 } 1066 }
1060 1067
1061 if (NumNativeFields() > 0) { 1068 if (NumNativeFields() > 0) {
1062 JSONArray jsarr(jsobj, "_nativeFields"); 1069 JSONArray jsarr(jsobj, "_nativeFields");
1063 for (intptr_t i = 0; i < NumNativeFields(); i++) { 1070 for (intptr_t i = 0; i < NumNativeFields(); i++) {
1064 intptr_t value = GetNativeField(i); 1071 intptr_t value = GetNativeField(i);
1065 JSONObject jsfield(&jsarr); 1072 JSONObject jsfield(&jsarr);
1066 jsfield.AddProperty("index", i); 1073 jsfield.AddProperty("index", i);
1067 jsfield.AddProperty("value", value); 1074 jsfield.AddProperty("value", value);
(...skipping 513 matching lines...) Expand 10 before | Expand all | Expand 10 after
1581 jsobj.AddProperty("mirrorReferent", referent_handle); 1588 jsobj.AddProperty("mirrorReferent", referent_handle);
1582 } 1589 }
1583 1590
1584 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { 1591 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const {
1585 Instance::PrintJSONImpl(stream, ref); 1592 Instance::PrintJSONImpl(stream, ref);
1586 } 1593 }
1587 1594
1588 #endif 1595 #endif
1589 1596
1590 } // namespace dart 1597 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698