| 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/object.h" | 5 #include "vm/object.h" |
| 6 | 6 |
| 7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
| 8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
| 9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
| 10 #include "vm/cpu.h" | 10 #include "vm/cpu.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 #include "vm/disassembler.h" | 25 #include "vm/disassembler.h" |
| 26 #include "vm/double_conversion.h" | 26 #include "vm/double_conversion.h" |
| 27 #include "vm/exceptions.h" | 27 #include "vm/exceptions.h" |
| 28 #include "vm/flow_graph_builder.h" | 28 #include "vm/flow_graph_builder.h" |
| 29 #include "vm/flow_graph_compiler.h" | 29 #include "vm/flow_graph_compiler.h" |
| 30 #include "vm/growable_array.h" | 30 #include "vm/growable_array.h" |
| 31 #include "vm/hash_table.h" | 31 #include "vm/hash_table.h" |
| 32 #include "vm/heap.h" | 32 #include "vm/heap.h" |
| 33 #include "vm/intermediate_language.h" | 33 #include "vm/intermediate_language.h" |
| 34 #include "vm/intrinsifier.h" | 34 #include "vm/intrinsifier.h" |
| 35 #include "vm/object_id_ring.h" | |
| 36 #include "vm/object_store.h" | 35 #include "vm/object_store.h" |
| 37 #include "vm/parser.h" | 36 #include "vm/parser.h" |
| 38 #include "vm/report.h" | 37 #include "vm/report.h" |
| 39 #include "vm/reusable_handles.h" | 38 #include "vm/reusable_handles.h" |
| 40 #include "vm/runtime_entry.h" | 39 #include "vm/runtime_entry.h" |
| 41 #include "vm/scopes.h" | 40 #include "vm/scopes.h" |
| 42 #include "vm/stack_frame.h" | 41 #include "vm/stack_frame.h" |
| 43 #include "vm/symbols.h" | 42 #include "vm/symbols.h" |
| 44 #include "vm/tags.h" | 43 #include "vm/tags.h" |
| 45 #include "vm/timer.h" | 44 #include "vm/timer.h" |
| (...skipping 1548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1594 } | 1593 } |
| 1595 } else { | 1594 } else { |
| 1596 PrintJSONImpl(stream, ref); | 1595 PrintJSONImpl(stream, ref); |
| 1597 } | 1596 } |
| 1598 } | 1597 } |
| 1599 | 1598 |
| 1600 | 1599 |
| 1601 void Object::PrintJSONImpl(JSONStream* stream, bool ref) const { | 1600 void Object::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 1602 JSONObject jsobj(stream); | 1601 JSONObject jsobj(stream); |
| 1603 AddTypeProperties(&jsobj, "Object", JSONType(), ref); | 1602 AddTypeProperties(&jsobj, "Object", JSONType(), ref); |
| 1604 ObjectIdRing* ring = Isolate::Current()->object_id_ring(); | 1603 jsobj.AddServiceId("id", *this); |
| 1605 const intptr_t id = ring->GetIdForObject(raw()); | |
| 1606 jsobj.AddPropertyF("id", "objects/%" Pd "", id); | |
| 1607 if (ref) { | 1604 if (ref) { |
| 1608 return; | 1605 return; |
| 1609 } | 1606 } |
| 1610 Class& cls = Class::Handle(this->clazz()); | 1607 Class& cls = Class::Handle(this->clazz()); |
| 1611 jsobj.AddProperty("class", cls); | 1608 jsobj.AddProperty("class", cls); |
| 1612 jsobj.AddProperty("size", raw()->Size()); | 1609 jsobj.AddProperty("size", raw()->Size()); |
| 1613 } | 1610 } |
| 1614 | 1611 |
| 1615 | 1612 |
| 1616 RawString* Object::DictionaryName() const { | 1613 RawString* Object::DictionaryName() const { |
| (...skipping 2796 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4413 | 4410 |
| 4414 void TypeArguments::PrintJSONImpl(JSONStream* stream, bool ref) const { | 4411 void TypeArguments::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 4415 JSONObject jsobj(stream); | 4412 JSONObject jsobj(stream); |
| 4416 // The index in the canonical_type_arguments table cannot be used as part of | 4413 // The index in the canonical_type_arguments table cannot be used as part of |
| 4417 // the object id (as in typearguments/id), because the indices are not | 4414 // the object id (as in typearguments/id), because the indices are not |
| 4418 // preserved when the table grows and the entries get rehashed. Use the ring. | 4415 // preserved when the table grows and the entries get rehashed. Use the ring. |
| 4419 Isolate* isolate = Isolate::Current(); | 4416 Isolate* isolate = Isolate::Current(); |
| 4420 ObjectStore* object_store = isolate->object_store(); | 4417 ObjectStore* object_store = isolate->object_store(); |
| 4421 const Array& table = Array::Handle(object_store->canonical_type_arguments()); | 4418 const Array& table = Array::Handle(object_store->canonical_type_arguments()); |
| 4422 ASSERT(table.Length() > 0); | 4419 ASSERT(table.Length() > 0); |
| 4423 ObjectIdRing* ring = Isolate::Current()->object_id_ring(); | |
| 4424 const intptr_t id = ring->GetIdForObject(raw()); | |
| 4425 AddTypeProperties(&jsobj, "TypeArguments", JSONType(), ref); | 4420 AddTypeProperties(&jsobj, "TypeArguments", JSONType(), ref); |
| 4426 jsobj.AddPropertyF("id", "objects/%" Pd "", id); | 4421 jsobj.AddServiceId("id", *this); |
| 4427 const String& user_name = String::Handle(PrettyName()); | 4422 const String& user_name = String::Handle(PrettyName()); |
| 4428 const String& vm_name = String::Handle(Name()); | 4423 const String& vm_name = String::Handle(Name()); |
| 4429 AddNameProperties(&jsobj, user_name, vm_name); | 4424 AddNameProperties(&jsobj, user_name, vm_name); |
| 4430 if (ref) { | 4425 if (ref) { |
| 4431 return; | 4426 return; |
| 4432 } | 4427 } |
| 4433 { | 4428 { |
| 4434 JSONArray jsarr(&jsobj, "types"); | 4429 JSONArray jsarr(&jsobj, "types"); |
| 4435 AbstractType& type_arg = AbstractType::Handle(); | 4430 AbstractType& type_arg = AbstractType::Handle(); |
| 4436 for (intptr_t i = 0; i < Length(); i++) { | 4431 for (intptr_t i = 0; i < Length(); i++) { |
| (...skipping 2366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6803 const char* function_name = String::Handle(name()).ToCString(); | 6798 const char* function_name = String::Handle(name()).ToCString(); |
| 6804 intptr_t len = OS::SNPrint(NULL, 0, kFormat, function_name, | 6799 intptr_t len = OS::SNPrint(NULL, 0, kFormat, function_name, |
| 6805 static_str, abstract_str, kind_str, const_str) + 1; | 6800 static_str, abstract_str, kind_str, const_str) + 1; |
| 6806 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); | 6801 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 6807 OS::SNPrint(chars, len, kFormat, function_name, | 6802 OS::SNPrint(chars, len, kFormat, function_name, |
| 6808 static_str, abstract_str, kind_str, const_str); | 6803 static_str, abstract_str, kind_str, const_str); |
| 6809 return chars; | 6804 return chars; |
| 6810 } | 6805 } |
| 6811 | 6806 |
| 6812 | 6807 |
| 6813 static const char* GetFunctionServiceId(const Function& f, const Class& cls) { | 6808 static void AddFunctionServiceId(const JSONObject& jsobj, |
| 6814 Zone* zone = Isolate::Current()->current_zone(); | 6809 const Function& f, |
| 6810 const Class& cls) { |
| 6815 // Special kinds of functions use indices in their respective lists. | 6811 // Special kinds of functions use indices in their respective lists. |
| 6816 intptr_t id = -1; | 6812 intptr_t id = -1; |
| 6817 const char* selector = NULL; | 6813 const char* selector = NULL; |
| 6818 if (f.IsNonImplicitClosureFunction()) { | 6814 if (f.IsNonImplicitClosureFunction()) { |
| 6819 id = cls.FindClosureIndex(f); | 6815 id = cls.FindClosureIndex(f); |
| 6820 selector = "closures"; | 6816 selector = "closures"; |
| 6821 } else if (f.IsImplicitClosureFunction()) { | 6817 } else if (f.IsImplicitClosureFunction()) { |
| 6822 id = cls.FindImplicitClosureFunctionIndex(f); | 6818 id = cls.FindImplicitClosureFunctionIndex(f); |
| 6823 selector = "implicit_closures"; | 6819 selector = "implicit_closures"; |
| 6824 } else if (f.IsNoSuchMethodDispatcher() || f.IsInvokeFieldDispatcher()) { | 6820 } else if (f.IsNoSuchMethodDispatcher() || f.IsInvokeFieldDispatcher()) { |
| 6825 id = cls.FindInvocationDispatcherFunctionIndex(f); | 6821 id = cls.FindInvocationDispatcherFunctionIndex(f); |
| 6826 selector = "dispatchers"; | 6822 selector = "dispatchers"; |
| 6827 } | 6823 } |
| 6828 if (id != -1) { | 6824 if (id != -1) { |
| 6829 ASSERT(selector != NULL); | 6825 ASSERT(selector != NULL); |
| 6830 return zone->PrintToString("classes/%" Pd "/%s/%" Pd "", | 6826 jsobj.AddPropertyF("id", "classes/%" Pd "/%s/%" Pd "", |
| 6831 cls.id(), selector, id); | 6827 cls.id(), selector, id); |
| 6828 return; |
| 6832 } | 6829 } |
| 6833 // Regular functions known to their owner use their name (percent-encoded). | 6830 // Regular functions known to their owner use their name (percent-encoded). |
| 6834 String& name = String::Handle(f.name()); | 6831 String& name = String::Handle(f.name()); |
| 6835 if (cls.LookupFunction(name) == f.raw()) { | 6832 if (cls.LookupFunction(name) == f.raw()) { |
| 6836 name = String::EncodeIRI(name); | 6833 name = String::EncodeIRI(name); |
| 6837 return zone->PrintToString("classes/%" Pd "/functions/%s", | 6834 jsobj.AddPropertyF("id", "classes/%" Pd "/functions/%s", |
| 6838 cls.id(), name.ToCString()); | 6835 cls.id(), name.ToCString()); |
| 6836 return; |
| 6839 } | 6837 } |
| 6840 // Oddball functions (not known to their owner) fall back to use the object | 6838 // Oddball functions (not known to their owner) fall back to use the object |
| 6841 // id ring. Current known examples are signature functions of closures | 6839 // id ring. Current known examples are signature functions of closures |
| 6842 // and stubs like 'megamorphic_miss'. | 6840 // and stubs like 'megamorphic_miss'. |
| 6843 ObjectIdRing* ring = Isolate::Current()->object_id_ring(); | 6841 jsobj.AddServiceId("id", f); |
| 6844 id = ring->GetIdForObject(f.raw()); | |
| 6845 return zone->PrintToString("objects/%" Pd "", id); | |
| 6846 } | 6842 } |
| 6847 | 6843 |
| 6848 | 6844 |
| 6849 void Function::PrintJSONImpl(JSONStream* stream, bool ref) const { | 6845 void Function::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 6850 Class& cls = Class::Handle(Owner()); | 6846 Class& cls = Class::Handle(Owner()); |
| 6851 ASSERT(!cls.IsNull()); | 6847 ASSERT(!cls.IsNull()); |
| 6852 Error& err = Error::Handle(); | 6848 Error& err = Error::Handle(); |
| 6853 err ^= cls.EnsureIsFinalized(Isolate::Current()); | 6849 err ^= cls.EnsureIsFinalized(Isolate::Current()); |
| 6854 ASSERT(err.IsNull()); | 6850 ASSERT(err.IsNull()); |
| 6855 JSONObject jsobj(stream); | 6851 JSONObject jsobj(stream); |
| 6856 AddTypeProperties(&jsobj, "Function", JSONType(), ref); | 6852 AddTypeProperties(&jsobj, "Function", JSONType(), ref); |
| 6857 jsobj.AddProperty("id", GetFunctionServiceId(*this, cls)); | 6853 AddFunctionServiceId(jsobj, *this, cls); |
| 6858 const String& user_name = String::Handle(PrettyName()); | 6854 const String& user_name = String::Handle(PrettyName()); |
| 6859 const String& vm_name = String::Handle(name()); | 6855 const String& vm_name = String::Handle(name()); |
| 6860 AddNameProperties(&jsobj, user_name, vm_name); | 6856 AddNameProperties(&jsobj, user_name, vm_name); |
| 6861 const Function& parent = Function::Handle(parent_function()); | 6857 const Function& parent = Function::Handle(parent_function()); |
| 6862 if (!parent.IsNull()) { | 6858 if (!parent.IsNull()) { |
| 6863 jsobj.AddProperty("owner", parent); | 6859 jsobj.AddProperty("owner", parent); |
| 6864 } else if (cls.IsTopLevel()) { | 6860 } else if (cls.IsTopLevel()) { |
| 6865 const Library& library = Library::Handle(cls.library()); | 6861 const Library& library = Library::Handle(cls.library()); |
| 6866 jsobj.AddProperty("owner", library); | 6862 jsobj.AddProperty("owner", library); |
| 6867 } else { | 6863 } else { |
| (...skipping 1123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7991 const char* TokenStream::ToCString() const { | 7987 const char* TokenStream::ToCString() const { |
| 7992 return "TokenStream"; | 7988 return "TokenStream"; |
| 7993 } | 7989 } |
| 7994 | 7990 |
| 7995 | 7991 |
| 7996 void TokenStream::PrintJSONImpl(JSONStream* stream, bool ref) const { | 7992 void TokenStream::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 7997 JSONObject jsobj(stream); | 7993 JSONObject jsobj(stream); |
| 7998 AddTypeProperties(&jsobj, "Object", JSONType(), ref); | 7994 AddTypeProperties(&jsobj, "Object", JSONType(), ref); |
| 7999 // TODO(johnmccutchan): Generate a stable id. TokenStreams hang off | 7995 // TODO(johnmccutchan): Generate a stable id. TokenStreams hang off |
| 8000 // a Script object but do not have a back reference to generate a stable id. | 7996 // a Script object but do not have a back reference to generate a stable id. |
| 8001 ObjectIdRing* ring = Isolate::Current()->object_id_ring(); | 7997 jsobj.AddServiceId("id", *this); |
| 8002 const intptr_t id = ring->GetIdForObject(raw()); | |
| 8003 jsobj.AddPropertyF("id", "objects/%" Pd "", id); | |
| 8004 if (ref) { | 7998 if (ref) { |
| 8005 return; | 7999 return; |
| 8006 } | 8000 } |
| 8007 Class& cls = Class::Handle(this->clazz()); | 8001 Class& cls = Class::Handle(this->clazz()); |
| 8008 jsobj.AddProperty("class", cls); | 8002 jsobj.AddProperty("class", cls); |
| 8009 jsobj.AddProperty("size", raw()->Size()); | 8003 jsobj.AddProperty("size", raw()->Size()); |
| 8010 const String& private_key = String::Handle(PrivateKey()); | 8004 const String& private_key = String::Handle(PrivateKey()); |
| 8011 jsobj.AddProperty("privateKey", private_key); | 8005 jsobj.AddProperty("privateKey", private_key); |
| 8012 // TODO(johnmccutchan): Add support for printing LiteralTokens and add | 8006 // TODO(johnmccutchan): Add support for printing LiteralTokens and add |
| 8013 // them to members array. | 8007 // them to members array. |
| (...skipping 2680 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10694 iter.TryIndex()); | 10688 iter.TryIndex()); |
| 10695 } | 10689 } |
| 10696 return buffer; | 10690 return buffer; |
| 10697 } | 10691 } |
| 10698 | 10692 |
| 10699 | 10693 |
| 10700 void PcDescriptors::PrintToJSONObject(JSONObject* jsobj, bool ref) const { | 10694 void PcDescriptors::PrintToJSONObject(JSONObject* jsobj, bool ref) const { |
| 10701 AddTypeProperties(jsobj, "Object", JSONType(), ref); | 10695 AddTypeProperties(jsobj, "Object", JSONType(), ref); |
| 10702 // TODO(johnmccutchan): Generate a stable id. PcDescriptors hang off a Code | 10696 // TODO(johnmccutchan): Generate a stable id. PcDescriptors hang off a Code |
| 10703 // object but do not have a back reference to generate an ID. | 10697 // object but do not have a back reference to generate an ID. |
| 10704 ObjectIdRing* ring = Isolate::Current()->object_id_ring(); | 10698 jsobj->AddServiceId("id", *this); |
| 10705 const intptr_t id = ring->GetIdForObject(raw()); | |
| 10706 jsobj->AddPropertyF("id", "objects/%" Pd "", id); | |
| 10707 if (ref) { | 10699 if (ref) { |
| 10708 return; | 10700 return; |
| 10709 } | 10701 } |
| 10710 Class& cls = Class::Handle(this->clazz()); | 10702 Class& cls = Class::Handle(this->clazz()); |
| 10711 jsobj->AddProperty("class", cls); | 10703 jsobj->AddProperty("class", cls); |
| 10712 jsobj->AddProperty("size", raw()->Size()); | 10704 jsobj->AddProperty("size", raw()->Size()); |
| 10713 JSONArray members(jsobj, "members"); | 10705 JSONArray members(jsobj, "members"); |
| 10714 Iterator iter(*this, RawPcDescriptors::kAnyKind); | 10706 Iterator iter(*this, RawPcDescriptors::kAnyKind); |
| 10715 while (iter.MoveNext()) { | 10707 while (iter.MoveNext()) { |
| 10716 JSONObject descriptor(&members); | 10708 JSONObject descriptor(&members); |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 10977 return buffer; | 10969 return buffer; |
| 10978 } | 10970 } |
| 10979 | 10971 |
| 10980 | 10972 |
| 10981 void LocalVarDescriptors::PrintJSONImpl(JSONStream* stream, | 10973 void LocalVarDescriptors::PrintJSONImpl(JSONStream* stream, |
| 10982 bool ref) const { | 10974 bool ref) const { |
| 10983 JSONObject jsobj(stream); | 10975 JSONObject jsobj(stream); |
| 10984 AddTypeProperties(&jsobj, "Object", JSONType(), ref); | 10976 AddTypeProperties(&jsobj, "Object", JSONType(), ref); |
| 10985 // TODO(johnmccutchan): Generate a stable id. LocalVarDescriptors hang off | 10977 // TODO(johnmccutchan): Generate a stable id. LocalVarDescriptors hang off |
| 10986 // a Code object but do not have a back reference to generate an ID. | 10978 // a Code object but do not have a back reference to generate an ID. |
| 10987 ObjectIdRing* ring = Isolate::Current()->object_id_ring(); | 10979 jsobj.AddServiceId("id", *this); |
| 10988 const intptr_t id = ring->GetIdForObject(raw()); | |
| 10989 jsobj.AddPropertyF("id", "objects/%" Pd "", id); | |
| 10990 if (ref) { | 10980 if (ref) { |
| 10991 return; | 10981 return; |
| 10992 } | 10982 } |
| 10993 Class& cls = Class::Handle(this->clazz()); | 10983 Class& cls = Class::Handle(this->clazz()); |
| 10994 jsobj.AddProperty("class", cls); | 10984 jsobj.AddProperty("class", cls); |
| 10995 jsobj.AddProperty("size", raw()->Size()); | 10985 jsobj.AddProperty("size", raw()->Size()); |
| 10996 JSONArray members(&jsobj, "members"); | 10986 JSONArray members(&jsobj, "members"); |
| 10997 String& var_name = String::Handle(); | 10987 String& var_name = String::Handle(); |
| 10998 for (intptr_t i = 0; i < Length(); i++) { | 10988 for (intptr_t i = 0; i < Length(); i++) { |
| 10999 RawLocalVarDescriptors::VarInfo info; | 10989 RawLocalVarDescriptors::VarInfo info; |
| (...skipping 1876 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 12876 IndentN(indent); | 12866 IndentN(indent); |
| 12877 OS::PrintErr("}\n"); | 12867 OS::PrintErr("}\n"); |
| 12878 } | 12868 } |
| 12879 | 12869 |
| 12880 | 12870 |
| 12881 void Context::PrintJSONImpl(JSONStream* stream, bool ref) const { | 12871 void Context::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 12882 JSONObject jsobj(stream); | 12872 JSONObject jsobj(stream); |
| 12883 // TODO(turnidge): Should the user level type for Context be Context | 12873 // TODO(turnidge): Should the user level type for Context be Context |
| 12884 // or Object? | 12874 // or Object? |
| 12885 AddTypeProperties(&jsobj, "Context", JSONType(), ref); | 12875 AddTypeProperties(&jsobj, "Context", JSONType(), ref); |
| 12886 ObjectIdRing* ring = Isolate::Current()->object_id_ring(); | 12876 jsobj.AddServiceId("id", *this); |
| 12887 const intptr_t id = ring->GetIdForObject(raw()); | |
| 12888 jsobj.AddPropertyF("id", "objects/%" Pd "", id); | |
| 12889 | 12877 |
| 12890 jsobj.AddProperty("length", num_variables()); | 12878 jsobj.AddProperty("length", num_variables()); |
| 12891 | 12879 |
| 12892 if (ref) { | 12880 if (ref) { |
| 12893 return; | 12881 return; |
| 12894 } | 12882 } |
| 12895 | 12883 |
| 12896 Class& cls = Class::Handle(this->clazz()); | 12884 Class& cls = Class::Handle(this->clazz()); |
| 12897 jsobj.AddProperty("class", cls); | 12885 jsobj.AddProperty("class", cls); |
| 12898 | 12886 |
| (...skipping 1181 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 14080 return; | 14068 return; |
| 14081 } else if (raw() == Object::transition_sentinel().raw()) { | 14069 } else if (raw() == Object::transition_sentinel().raw()) { |
| 14082 jsobj.AddProperty("type", "Sentinel"); | 14070 jsobj.AddProperty("type", "Sentinel"); |
| 14083 jsobj.AddProperty("id", "objects/being-initialized"); | 14071 jsobj.AddProperty("id", "objects/being-initialized"); |
| 14084 jsobj.AddProperty("valueAsString", "<being initialized>"); | 14072 jsobj.AddProperty("valueAsString", "<being initialized>"); |
| 14085 return; | 14073 return; |
| 14086 } | 14074 } |
| 14087 | 14075 |
| 14088 AddTypeProperties(&jsobj, "Instance", JSONType(), ref); | 14076 AddTypeProperties(&jsobj, "Instance", JSONType(), ref); |
| 14089 PrintSharedInstanceJSON(&jsobj, ref); | 14077 PrintSharedInstanceJSON(&jsobj, ref); |
| 14090 ObjectIdRing* ring = Isolate::Current()->object_id_ring(); | 14078 jsobj.AddServiceId("id", *this); |
| 14091 const intptr_t id = ring->GetIdForObject(raw()); | |
| 14092 if (IsClosure()) { | 14079 if (IsClosure()) { |
| 14093 const Function& closureFunc = Function::Handle(Closure::function(*this)); | 14080 const Function& closureFunc = Function::Handle(Closure::function(*this)); |
| 14094 jsobj.AddProperty("closureFunc", closureFunc); | 14081 jsobj.AddProperty("closureFunc", closureFunc); |
| 14095 const Context& closureCtxt = Context::Handle(Closure::context(*this)); | 14082 const Context& closureCtxt = Context::Handle(Closure::context(*this)); |
| 14096 jsobj.AddProperty("closureCtxt", closureCtxt); | 14083 jsobj.AddProperty("closureCtxt", closureCtxt); |
| 14097 } | 14084 } |
| 14098 jsobj.AddPropertyF("id", "objects/%" Pd "", id); | |
| 14099 if (ref) { | 14085 if (ref) { |
| 14100 return; | 14086 return; |
| 14101 } | 14087 } |
| 14102 } | 14088 } |
| 14103 | 14089 |
| 14104 | 14090 |
| 14105 bool AbstractType::IsResolved() const { | 14091 bool AbstractType::IsResolved() const { |
| 14106 // AbstractType is an abstract class. | 14092 // AbstractType is an abstract class. |
| 14107 UNREACHABLE(); | 14093 UNREACHABLE(); |
| 14108 return false; | 14094 return false; |
| (...skipping 1081 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15190 AddTypeProperties(&jsobj, "Type", JSONType(), ref); | 15176 AddTypeProperties(&jsobj, "Type", JSONType(), ref); |
| 15191 PrintSharedInstanceJSON(&jsobj, ref); | 15177 PrintSharedInstanceJSON(&jsobj, ref); |
| 15192 if (IsCanonical()) { | 15178 if (IsCanonical()) { |
| 15193 const Class& type_cls = Class::Handle(type_class()); | 15179 const Class& type_cls = Class::Handle(type_class()); |
| 15194 intptr_t id = type_cls.FindCanonicalTypeIndex(*this); | 15180 intptr_t id = type_cls.FindCanonicalTypeIndex(*this); |
| 15195 ASSERT(id >= 0); | 15181 ASSERT(id >= 0); |
| 15196 intptr_t cid = type_cls.id(); | 15182 intptr_t cid = type_cls.id(); |
| 15197 jsobj.AddPropertyF("id", "classes/%" Pd "/types/%" Pd "", cid, id); | 15183 jsobj.AddPropertyF("id", "classes/%" Pd "/types/%" Pd "", cid, id); |
| 15198 jsobj.AddProperty("typeClass", type_cls); | 15184 jsobj.AddProperty("typeClass", type_cls); |
| 15199 } else { | 15185 } else { |
| 15200 ObjectIdRing* ring = Isolate::Current()->object_id_ring(); | 15186 jsobj.AddServiceId("id", *this); |
| 15201 const intptr_t id = ring->GetIdForObject(raw()); | |
| 15202 jsobj.AddPropertyF("id", "objects/%" Pd "", id); | |
| 15203 } | 15187 } |
| 15204 const String& user_name = String::Handle(PrettyName()); | 15188 const String& user_name = String::Handle(PrettyName()); |
| 15205 const String& vm_name = String::Handle(Name()); | 15189 const String& vm_name = String::Handle(Name()); |
| 15206 AddNameProperties(&jsobj, user_name, vm_name); | 15190 AddNameProperties(&jsobj, user_name, vm_name); |
| 15207 if (ref) { | 15191 if (ref) { |
| 15208 return; | 15192 return; |
| 15209 } | 15193 } |
| 15210 const TypeArguments& typeArgs = TypeArguments::Handle(arguments()); | 15194 const TypeArguments& typeArgs = TypeArguments::Handle(arguments()); |
| 15211 if (!typeArgs.IsNull()) { | 15195 if (!typeArgs.IsNull()) { |
| 15212 jsobj.AddProperty("typeArguments", typeArgs); | 15196 jsobj.AddProperty("typeArguments", typeArgs); |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15375 OS::SNPrint(chars, len, format, type_cstr); | 15359 OS::SNPrint(chars, len, format, type_cstr); |
| 15376 return chars; | 15360 return chars; |
| 15377 } | 15361 } |
| 15378 } | 15362 } |
| 15379 | 15363 |
| 15380 | 15364 |
| 15381 void TypeRef::PrintJSONImpl(JSONStream* stream, bool ref) const { | 15365 void TypeRef::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 15382 JSONObject jsobj(stream); | 15366 JSONObject jsobj(stream); |
| 15383 AddTypeProperties(&jsobj, "TypeRef", JSONType(), ref); | 15367 AddTypeProperties(&jsobj, "TypeRef", JSONType(), ref); |
| 15384 PrintSharedInstanceJSON(&jsobj, ref); | 15368 PrintSharedInstanceJSON(&jsobj, ref); |
| 15385 ObjectIdRing* ring = Isolate::Current()->object_id_ring(); | 15369 jsobj.AddServiceId("id", *this); |
| 15386 const intptr_t id = ring->GetIdForObject(raw()); | |
| 15387 jsobj.AddPropertyF("id", "objects/%" Pd "", id); | |
| 15388 const String& user_name = String::Handle(PrettyName()); | 15370 const String& user_name = String::Handle(PrettyName()); |
| 15389 const String& vm_name = String::Handle(Name()); | 15371 const String& vm_name = String::Handle(Name()); |
| 15390 AddNameProperties(&jsobj, user_name, vm_name); | 15372 AddNameProperties(&jsobj, user_name, vm_name); |
| 15391 if (ref) { | 15373 if (ref) { |
| 15392 return; | 15374 return; |
| 15393 } | 15375 } |
| 15394 jsobj.AddProperty("refType", AbstractType::Handle(type())); | 15376 jsobj.AddProperty("refType", AbstractType::Handle(type())); |
| 15395 } | 15377 } |
| 15396 | 15378 |
| 15397 | 15379 |
| (...skipping 213 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15611 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); | 15593 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 15612 OS::SNPrint(chars, len, format, name_cstr, index(), cls_cstr, bound_cstr); | 15594 OS::SNPrint(chars, len, format, name_cstr, index(), cls_cstr, bound_cstr); |
| 15613 return chars; | 15595 return chars; |
| 15614 } | 15596 } |
| 15615 | 15597 |
| 15616 | 15598 |
| 15617 void TypeParameter::PrintJSONImpl(JSONStream* stream, bool ref) const { | 15599 void TypeParameter::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 15618 JSONObject jsobj(stream); | 15600 JSONObject jsobj(stream); |
| 15619 AddTypeProperties(&jsobj, "TypeParameter", JSONType(), ref); | 15601 AddTypeProperties(&jsobj, "TypeParameter", JSONType(), ref); |
| 15620 PrintSharedInstanceJSON(&jsobj, ref); | 15602 PrintSharedInstanceJSON(&jsobj, ref); |
| 15621 ObjectIdRing* ring = Isolate::Current()->object_id_ring(); | 15603 jsobj.AddServiceId("id", *this); |
| 15622 const intptr_t id = ring->GetIdForObject(raw()); | |
| 15623 jsobj.AddPropertyF("id", "objects/%" Pd "", id); | |
| 15624 const String& user_name = String::Handle(PrettyName()); | 15604 const String& user_name = String::Handle(PrettyName()); |
| 15625 const String& vm_name = String::Handle(Name()); | 15605 const String& vm_name = String::Handle(Name()); |
| 15626 AddNameProperties(&jsobj, user_name, vm_name); | 15606 AddNameProperties(&jsobj, user_name, vm_name); |
| 15627 const Class& param_cls = Class::Handle(parameterized_class()); | 15607 const Class& param_cls = Class::Handle(parameterized_class()); |
| 15628 jsobj.AddProperty("parameterizedClass", param_cls); | 15608 jsobj.AddProperty("parameterizedClass", param_cls); |
| 15629 if (ref) { | 15609 if (ref) { |
| 15630 return; | 15610 return; |
| 15631 } | 15611 } |
| 15632 jsobj.AddProperty("index", index()); | 15612 jsobj.AddProperty("index", index()); |
| 15633 const AbstractType& upper_bound = AbstractType::Handle(bound()); | 15613 const AbstractType& upper_bound = AbstractType::Handle(bound()); |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15829 OS::SNPrint( | 15809 OS::SNPrint( |
| 15830 chars, len, format, type_cstr, bound_cstr, type_param_cstr, cls_cstr); | 15810 chars, len, format, type_cstr, bound_cstr, type_param_cstr, cls_cstr); |
| 15831 return chars; | 15811 return chars; |
| 15832 } | 15812 } |
| 15833 | 15813 |
| 15834 | 15814 |
| 15835 void BoundedType::PrintJSONImpl(JSONStream* stream, bool ref) const { | 15815 void BoundedType::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 15836 JSONObject jsobj(stream); | 15816 JSONObject jsobj(stream); |
| 15837 AddTypeProperties(&jsobj, "BoundedType", JSONType(), ref); | 15817 AddTypeProperties(&jsobj, "BoundedType", JSONType(), ref); |
| 15838 PrintSharedInstanceJSON(&jsobj, ref); | 15818 PrintSharedInstanceJSON(&jsobj, ref); |
| 15839 ObjectIdRing* ring = Isolate::Current()->object_id_ring(); | 15819 jsobj.AddServiceId("id", *this); |
| 15840 const intptr_t id = ring->GetIdForObject(raw()); | |
| 15841 jsobj.AddPropertyF("id", "objects/%" Pd "", id); | |
| 15842 const String& user_name = String::Handle(PrettyName()); | 15820 const String& user_name = String::Handle(PrettyName()); |
| 15843 const String& vm_name = String::Handle(Name()); | 15821 const String& vm_name = String::Handle(Name()); |
| 15844 AddNameProperties(&jsobj, user_name, vm_name); | 15822 AddNameProperties(&jsobj, user_name, vm_name); |
| 15845 if (ref) { | 15823 if (ref) { |
| 15846 return; | 15824 return; |
| 15847 } | 15825 } |
| 15848 jsobj.AddProperty("boundedType", AbstractType::Handle(type())); | 15826 jsobj.AddProperty("boundedType", AbstractType::Handle(type())); |
| 15849 jsobj.AddProperty("upperBound", AbstractType::Handle(bound())); | 15827 jsobj.AddProperty("upperBound", AbstractType::Handle(bound())); |
| 15850 } | 15828 } |
| 15851 | 15829 |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 15934 // Integer is an interface. No instances of Integer should exist. | 15912 // Integer is an interface. No instances of Integer should exist. |
| 15935 UNREACHABLE(); | 15913 UNREACHABLE(); |
| 15936 return "Integer"; | 15914 return "Integer"; |
| 15937 } | 15915 } |
| 15938 | 15916 |
| 15939 | 15917 |
| 15940 void Integer::PrintJSONImpl(JSONStream* stream, bool ref) const { | 15918 void Integer::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 15941 JSONObject jsobj(stream); | 15919 JSONObject jsobj(stream); |
| 15942 AddTypeProperties(&jsobj, "int", JSONType(), ref); | 15920 AddTypeProperties(&jsobj, "int", JSONType(), ref); |
| 15943 PrintSharedInstanceJSON(&jsobj, ref); | 15921 PrintSharedInstanceJSON(&jsobj, ref); |
| 15944 ObjectIdRing* ring = Isolate::Current()->object_id_ring(); | 15922 jsobj.AddServiceId("id", *this); |
| 15945 const intptr_t id = ring->GetIdForObject(raw()); | |
| 15946 jsobj.AddPropertyF("id", "objects/%" Pd "", id); | |
| 15947 jsobj.AddProperty("valueAsString", ToCString()); | 15923 jsobj.AddProperty("valueAsString", ToCString()); |
| 15948 } | 15924 } |
| 15949 | 15925 |
| 15950 | 15926 |
| 15951 // Throw JavascriptIntegerOverflow exception. | 15927 // Throw JavascriptIntegerOverflow exception. |
| 15952 static void ThrowJavascriptIntegerOverflow(const Integer& i) { | 15928 static void ThrowJavascriptIntegerOverflow(const Integer& i) { |
| 15953 const Array& exc_args = Array::Handle(Array::New(1)); | 15929 const Array& exc_args = Array::Handle(Array::New(1)); |
| 15954 const String& i_str = String::Handle(String::New(i.ToCString())); | 15930 const String& i_str = String::Handle(String::New(i.ToCString())); |
| 15955 exc_args.SetAt(0, i_str); | 15931 exc_args.SetAt(0, i_str); |
| 15956 Exceptions::ThrowByType(Exceptions::kJavascriptIntegerOverflowError, | 15932 Exceptions::ThrowByType(Exceptions::kJavascriptIntegerOverflowError, |
| (...skipping 672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 16629 return buffer; | 16605 return buffer; |
| 16630 } | 16606 } |
| 16631 | 16607 |
| 16632 | 16608 |
| 16633 void Double::PrintJSONImpl(JSONStream* stream, bool ref) const { | 16609 void Double::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 16634 JSONObject jsobj(stream); | 16610 JSONObject jsobj(stream); |
| 16635 // Suppress the fact that the internal vm name for this type is | 16611 // Suppress the fact that the internal vm name for this type is |
| 16636 // "Double". Return "double" instead. | 16612 // "Double". Return "double" instead. |
| 16637 AddTypeProperties(&jsobj, "double", "double", ref); | 16613 AddTypeProperties(&jsobj, "double", "double", ref); |
| 16638 PrintSharedInstanceJSON(&jsobj, ref); | 16614 PrintSharedInstanceJSON(&jsobj, ref); |
| 16639 ObjectIdRing* ring = Isolate::Current()->object_id_ring(); | 16615 jsobj.AddServiceId("id", *this); |
| 16640 const intptr_t id = ring->GetIdForObject(raw()); | |
| 16641 jsobj.AddPropertyF("id", "objects/%" Pd "", id); | |
| 16642 jsobj.AddProperty("valueAsString", ToCString()); | 16616 jsobj.AddProperty("valueAsString", ToCString()); |
| 16643 } | 16617 } |
| 16644 | 16618 |
| 16645 | 16619 |
| 16646 bool Bigint::Neg() const { | 16620 bool Bigint::Neg() const { |
| 16647 return Bool::Handle(neg()).value(); | 16621 return Bool::Handle(neg()).value(); |
| 16648 } | 16622 } |
| 16649 | 16623 |
| 16650 | 16624 |
| 16651 void Bigint::SetNeg(bool value) const { | 16625 void Bigint::SetNeg(bool value) const { |
| (...skipping 1570 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 18222 // TODO(turnidge): This is a hack. The user could have this | 18196 // TODO(turnidge): This is a hack. The user could have this |
| 18223 // special string in their program. Fixing this involves updating | 18197 // special string in their program. Fixing this involves updating |
| 18224 // the debugging api a bit. | 18198 // the debugging api a bit. |
| 18225 jsobj.AddProperty("type", "Sentinel"); | 18199 jsobj.AddProperty("type", "Sentinel"); |
| 18226 jsobj.AddProperty("id", "objects/optimized-out"); | 18200 jsobj.AddProperty("id", "objects/optimized-out"); |
| 18227 jsobj.AddProperty("valueAsString", "<optimized out>"); | 18201 jsobj.AddProperty("valueAsString", "<optimized out>"); |
| 18228 return; | 18202 return; |
| 18229 } | 18203 } |
| 18230 AddTypeProperties(&jsobj, "String", JSONType(), ref); | 18204 AddTypeProperties(&jsobj, "String", JSONType(), ref); |
| 18231 PrintSharedInstanceJSON(&jsobj, ref); | 18205 PrintSharedInstanceJSON(&jsobj, ref); |
| 18232 ObjectIdRing* ring = Isolate::Current()->object_id_ring(); | 18206 jsobj.AddServiceId("id", *this); |
| 18233 const intptr_t id = ring->GetIdForObject(raw()); | |
| 18234 jsobj.AddPropertyF("id", "objects/%" Pd "", id); | |
| 18235 if (ref) { | 18207 if (ref) { |
| 18236 bool did_truncate = jsobj.AddPropertyStr("valueAsString", *this, 128); | 18208 bool did_truncate = jsobj.AddPropertyStr("valueAsString", *this, 128); |
| 18237 if (did_truncate) { | 18209 if (did_truncate) { |
| 18238 jsobj.AddProperty("valueAsStringIsTruncated", did_truncate); | 18210 jsobj.AddProperty("valueAsStringIsTruncated", did_truncate); |
| 18239 } | 18211 } |
| 18240 } else { | 18212 } else { |
| 18241 bool did_truncate = jsobj.AddPropertyStr("valueAsString", *this); | 18213 bool did_truncate = jsobj.AddPropertyStr("valueAsString", *this); |
| 18242 ASSERT(!did_truncate); | 18214 ASSERT(!did_truncate); |
| 18243 } | 18215 } |
| 18244 } | 18216 } |
| (...skipping 1002 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 19247 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); | 19219 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); |
| 19248 OS::SNPrint(chars, len, format, Length()); | 19220 OS::SNPrint(chars, len, format, Length()); |
| 19249 return chars; | 19221 return chars; |
| 19250 } | 19222 } |
| 19251 | 19223 |
| 19252 | 19224 |
| 19253 void Array::PrintJSONImpl(JSONStream* stream, bool ref) const { | 19225 void Array::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 19254 JSONObject jsobj(stream); | 19226 JSONObject jsobj(stream); |
| 19255 AddTypeProperties(&jsobj, "List", JSONType(), ref); | 19227 AddTypeProperties(&jsobj, "List", JSONType(), ref); |
| 19256 PrintSharedInstanceJSON(&jsobj, ref); | 19228 PrintSharedInstanceJSON(&jsobj, ref); |
| 19257 ObjectIdRing* ring = Isolate::Current()->object_id_ring(); | 19229 jsobj.AddServiceId("id", *this); |
| 19258 const intptr_t id = ring->GetIdForObject(raw()); | |
| 19259 jsobj.AddPropertyF("id", "objects/%" Pd "", id); | |
| 19260 jsobj.AddProperty("length", Length()); | 19230 jsobj.AddProperty("length", Length()); |
| 19261 if (ref) { | 19231 if (ref) { |
| 19262 return; | 19232 return; |
| 19263 } | 19233 } |
| 19264 { | 19234 { |
| 19265 JSONArray jsarr(&jsobj, "elements"); | 19235 JSONArray jsarr(&jsobj, "elements"); |
| 19266 for (intptr_t index = 0; index < Length(); index++) { | 19236 for (intptr_t index = 0; index < Length(); index++) { |
| 19267 JSONObject jselement(&jsarr); | 19237 JSONObject jselement(&jsarr); |
| 19268 jselement.AddProperty("index", index); | 19238 jselement.AddProperty("index", index); |
| 19269 | 19239 |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 19500 OS::SNPrint(chars, len, format, Length()); | 19470 OS::SNPrint(chars, len, format, Length()); |
| 19501 return chars; | 19471 return chars; |
| 19502 } | 19472 } |
| 19503 | 19473 |
| 19504 | 19474 |
| 19505 void GrowableObjectArray::PrintJSONImpl(JSONStream* stream, | 19475 void GrowableObjectArray::PrintJSONImpl(JSONStream* stream, |
| 19506 bool ref) const { | 19476 bool ref) const { |
| 19507 JSONObject jsobj(stream); | 19477 JSONObject jsobj(stream); |
| 19508 AddTypeProperties(&jsobj, "List", JSONType(), ref); | 19478 AddTypeProperties(&jsobj, "List", JSONType(), ref); |
| 19509 PrintSharedInstanceJSON(&jsobj, ref); | 19479 PrintSharedInstanceJSON(&jsobj, ref); |
| 19510 ObjectIdRing* ring = Isolate::Current()->object_id_ring(); | 19480 jsobj.AddServiceId("id", *this); |
| 19511 const intptr_t id = ring->GetIdForObject(raw()); | |
| 19512 jsobj.AddPropertyF("id", "objects/%" Pd "", id); | |
| 19513 jsobj.AddProperty("length", Length()); | 19481 jsobj.AddProperty("length", Length()); |
| 19514 if (ref) { | 19482 if (ref) { |
| 19515 return; | 19483 return; |
| 19516 } | 19484 } |
| 19517 { | 19485 { |
| 19518 JSONArray jsarr(&jsobj, "elements"); | 19486 JSONArray jsarr(&jsobj, "elements"); |
| 19519 for (intptr_t index = 0; index < Length(); index++) { | 19487 for (intptr_t index = 0; index < Length(); index++) { |
| 19520 JSONObject jselement(&jsarr); | 19488 JSONObject jselement(&jsarr); |
| 19521 jselement.AddProperty("index", index); | 19489 jselement.AddProperty("index", index); |
| 19522 | 19490 |
| (...skipping 1027 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 20550 | 20518 |
| 20551 const char* WeakProperty::ToCString() const { | 20519 const char* WeakProperty::ToCString() const { |
| 20552 return "_WeakProperty"; | 20520 return "_WeakProperty"; |
| 20553 } | 20521 } |
| 20554 | 20522 |
| 20555 | 20523 |
| 20556 void WeakProperty::PrintJSONImpl(JSONStream* stream, bool ref) const { | 20524 void WeakProperty::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 20557 JSONObject jsobj(stream); | 20525 JSONObject jsobj(stream); |
| 20558 AddTypeProperties(&jsobj, "Instance", JSONType(), ref); | 20526 AddTypeProperties(&jsobj, "Instance", JSONType(), ref); |
| 20559 PrintSharedInstanceJSON(&jsobj, ref); | 20527 PrintSharedInstanceJSON(&jsobj, ref); |
| 20560 ObjectIdRing* ring = Isolate::Current()->object_id_ring(); | 20528 jsobj.AddServiceId("id", *this); |
| 20561 const intptr_t id = ring->GetIdForObject(raw()); | |
| 20562 jsobj.AddPropertyF("id", "objects/%" Pd "", id); | |
| 20563 | |
| 20564 if (ref) { | 20529 if (ref) { |
| 20565 return; | 20530 return; |
| 20566 } | 20531 } |
| 20567 | 20532 |
| 20568 const Object& key_handle = Object::Handle(key()); | 20533 const Object& key_handle = Object::Handle(key()); |
| 20569 jsobj.AddProperty("key", key_handle); | 20534 jsobj.AddProperty("key", key_handle); |
| 20570 const Object& value_handle = Object::Handle(value()); | 20535 const Object& value_handle = Object::Handle(value()); |
| 20571 jsobj.AddProperty("value", value_handle); | 20536 jsobj.AddProperty("value", value_handle); |
| 20572 } | 20537 } |
| 20573 | 20538 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 20624 | 20589 |
| 20625 const char* MirrorReference::ToCString() const { | 20590 const char* MirrorReference::ToCString() const { |
| 20626 return "_MirrorReference"; | 20591 return "_MirrorReference"; |
| 20627 } | 20592 } |
| 20628 | 20593 |
| 20629 | 20594 |
| 20630 void MirrorReference::PrintJSONImpl(JSONStream* stream, bool ref) const { | 20595 void MirrorReference::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 20631 JSONObject jsobj(stream); | 20596 JSONObject jsobj(stream); |
| 20632 AddTypeProperties(&jsobj, "Instance", JSONType(), ref); | 20597 AddTypeProperties(&jsobj, "Instance", JSONType(), ref); |
| 20633 PrintSharedInstanceJSON(&jsobj, ref); | 20598 PrintSharedInstanceJSON(&jsobj, ref); |
| 20634 ObjectIdRing* ring = Isolate::Current()->object_id_ring(); | 20599 jsobj.AddServiceId("id", *this); |
| 20635 const intptr_t id = ring->GetIdForObject(raw()); | |
| 20636 jsobj.AddPropertyF("id", "objects/%" Pd "", id); | |
| 20637 | 20600 |
| 20638 if (ref) { | 20601 if (ref) { |
| 20639 return; | 20602 return; |
| 20640 } | 20603 } |
| 20641 | 20604 |
| 20642 const Object& referent_handle = Object::Handle(referent()); | 20605 const Object& referent_handle = Object::Handle(referent()); |
| 20643 jsobj.AddProperty("referent", referent_handle); | 20606 jsobj.AddProperty("referent", referent_handle); |
| 20644 } | 20607 } |
| 20645 | 20608 |
| 20646 | 20609 |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 20771 return tag_label.ToCString(); | 20734 return tag_label.ToCString(); |
| 20772 } | 20735 } |
| 20773 | 20736 |
| 20774 | 20737 |
| 20775 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { | 20738 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 20776 Instance::PrintJSONImpl(stream, ref); | 20739 Instance::PrintJSONImpl(stream, ref); |
| 20777 } | 20740 } |
| 20778 | 20741 |
| 20779 | 20742 |
| 20780 } // namespace dart | 20743 } // namespace dart |
| OLD | NEW |