| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |