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

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

Issue 1152753005: Service cleanups... (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Update docs. Tweak TypeRef and BoundedType. Created 5 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 unified diff | Download patch
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/service/service.md » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/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 1568 matching lines...) Expand 10 before | Expand all | Expand 10 after
1579 static void AddNameProperties(JSONObject* jsobj, 1579 static void AddNameProperties(JSONObject* jsobj,
1580 const String& name, 1580 const String& name,
1581 const String& vm_name) { 1581 const String& vm_name) {
1582 jsobj->AddProperty("name", name.ToCString()); 1582 jsobj->AddProperty("name", name.ToCString());
1583 if (!name.Equals(vm_name)) { 1583 if (!name.Equals(vm_name)) {
1584 jsobj->AddProperty("_vmName", vm_name.ToCString()); 1584 jsobj->AddProperty("_vmName", vm_name.ToCString());
1585 } 1585 }
1586 } 1586 }
1587 1587
1588 1588
1589 static void AddTypeProperties(JSONObject* jsobj, 1589 void Object::AddCommonObjectProperties(JSONObject* jsobj,
1590 const char* user_type, 1590 const char* protocol_type,
1591 const char* vm_type, 1591 bool ref) const {
1592 bool ref) { 1592 const char* vm_type = JSONType();
1593 bool same_type = (strcmp(user_type, vm_type) == 0); 1593 bool same_type = (strcmp(protocol_type, vm_type) == 0);
1594 if (ref) { 1594 if (ref) {
1595 jsobj->AddPropertyF("type", "@%s", user_type); 1595 jsobj->AddPropertyF("type", "@%s", protocol_type);
1596 } else { 1596 } else {
1597 jsobj->AddProperty("type", user_type); 1597 jsobj->AddProperty("type", protocol_type);
1598 } 1598 }
1599 if (!same_type) { 1599 if (!same_type) {
1600 jsobj->AddProperty("_vmType", vm_type); 1600 jsobj->AddProperty("_vmType", vm_type);
1601 } 1601 }
1602 if (!ref || IsInstance()) {
1603 // TODO(turnidge): Provide the type arguments here too?
1604 const Class& cls = Class::Handle(this->clazz());
1605 jsobj->AddProperty("class", cls);
1606 }
1607 if (!ref) {
1608 if (raw()->IsHeapObject()) {
1609 jsobj->AddProperty("size", raw()->Size());
1610 } else {
1611 jsobj->AddProperty("size", (intptr_t)0);
1612 }
1613 }
1602 } 1614 }
1603 1615
1604 1616
1605 void Object::PrintJSON(JSONStream* stream, bool ref) const { 1617 void Object::PrintJSON(JSONStream* stream, bool ref) const {
1606 if (IsNull()) { 1618 if (IsNull()) {
1607 JSONObject jsobj(stream); 1619 JSONObject jsobj(stream);
1608 AddTypeProperties(&jsobj, "Instance", JSONType(), ref); 1620 AddCommonObjectProperties(&jsobj, "Instance", ref);
1609 jsobj.AddProperty("kind", "Null"); 1621 jsobj.AddProperty("kind", "Null");
1610 jsobj.AddFixedServiceId("objects/null"); 1622 jsobj.AddFixedServiceId("objects/null");
1611 jsobj.AddProperty("valueAsString", "null"); 1623 jsobj.AddProperty("valueAsString", "null");
1612 if (!ref) {
1613 const Class& cls = Class::Handle(this->clazz());
1614 jsobj.AddProperty("class", cls);
1615 jsobj.AddProperty("size", raw()->Size());
1616 }
1617 } else { 1624 } else {
1618 PrintJSONImpl(stream, ref); 1625 PrintJSONImpl(stream, ref);
1619 } 1626 }
1620 } 1627 }
1621 1628
1622 1629
1623 void Object::PrintJSONImpl(JSONStream* stream, bool ref) const { 1630 void Object::PrintJSONImpl(JSONStream* stream, bool ref) const {
1624 JSONObject jsobj(stream); 1631 JSONObject jsobj(stream);
1625 AddTypeProperties(&jsobj, "Object", JSONType(), ref); 1632 AddCommonObjectProperties(&jsobj, "Object", ref);
1626 jsobj.AddServiceId(*this); 1633 jsobj.AddServiceId(*this);
1627 if (ref) { 1634 if (ref) {
1628 return; 1635 return;
1629 } 1636 }
1630 Class& cls = Class::Handle(this->clazz());
1631 jsobj.AddProperty("class", cls);
1632 jsobj.AddProperty("size", raw()->Size());
1633 } 1637 }
1634 1638
1635 1639
1636 RawString* Object::DictionaryName() const { 1640 RawString* Object::DictionaryName() const {
1637 return String::null(); 1641 return String::null();
1638 } 1642 }
1639 1643
1640 1644
1641 void Object::InitializeObject(uword address, intptr_t class_id, intptr_t size) { 1645 void Object::InitializeObject(uword address, intptr_t class_id, intptr_t size) {
1642 // TODO(iposva): Get a proper halt instruction from the assembler which 1646 // TODO(iposva): Get a proper halt instruction from the assembler which
(...skipping 2461 matching lines...) Expand 10 before | Expand all | Expand 10 after
4104 intptr_t len = OS::SNPrint(NULL, 0, format, library_name, class_name) + 1; 4108 intptr_t len = OS::SNPrint(NULL, 0, format, library_name, class_name) + 1;
4105 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 4109 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
4106 OS::SNPrint(chars, len, format, library_name, class_name); 4110 OS::SNPrint(chars, len, format, library_name, class_name);
4107 return chars; 4111 return chars;
4108 } 4112 }
4109 4113
4110 4114
4111 void Class::PrintJSONImpl(JSONStream* stream, bool ref) const { 4115 void Class::PrintJSONImpl(JSONStream* stream, bool ref) const {
4112 JSONObject jsobj(stream); 4116 JSONObject jsobj(stream);
4113 if ((raw() == Class::null()) || (id() == kFreeListElement)) { 4117 if ((raw() == Class::null()) || (id() == kFreeListElement)) {
4114 // TODO(turnidge): This is weird. See if there is another way to 4118 // TODO(turnidge): This is weird and needs to be changed.
4115 // handle this.
4116 jsobj.AddProperty("type", "null"); 4119 jsobj.AddProperty("type", "null");
4117 return; 4120 return;
4118 } 4121 }
4119 AddTypeProperties(&jsobj, "Class", JSONType(), ref); 4122 AddCommonObjectProperties(&jsobj, "Class", ref);
4120 jsobj.AddFixedServiceId("classes/%" Pd "", id()); 4123 jsobj.AddFixedServiceId("classes/%" Pd "", id());
4121 const String& user_name = String::Handle(PrettyName()); 4124 const String& user_name = String::Handle(PrettyName());
4122 const String& vm_name = String::Handle(Name()); 4125 const String& vm_name = String::Handle(Name());
4123 AddNameProperties(&jsobj, user_name, vm_name); 4126 AddNameProperties(&jsobj, user_name, vm_name);
4124 if (ref) { 4127 if (ref) {
4125 return; 4128 return;
4126 } 4129 }
4127 4130
4128 const Error& err = Error::Handle(EnsureIsFinalized(Isolate::Current())); 4131 const Error& err = Error::Handle(EnsureIsFinalized(Isolate::Current()));
4129 if (!err.IsNull()) { 4132 if (!err.IsNull()) {
(...skipping 307 matching lines...) Expand 10 before | Expand all | Expand 10 after
4437 4440
4438 void TypeArguments::PrintJSONImpl(JSONStream* stream, bool ref) const { 4441 void TypeArguments::PrintJSONImpl(JSONStream* stream, bool ref) const {
4439 JSONObject jsobj(stream); 4442 JSONObject jsobj(stream);
4440 // The index in the canonical_type_arguments table cannot be used as part of 4443 // The index in the canonical_type_arguments table cannot be used as part of
4441 // the object id (as in typearguments/id), because the indices are not 4444 // the object id (as in typearguments/id), because the indices are not
4442 // preserved when the table grows and the entries get rehashed. Use the ring. 4445 // preserved when the table grows and the entries get rehashed. Use the ring.
4443 Isolate* isolate = Isolate::Current(); 4446 Isolate* isolate = Isolate::Current();
4444 ObjectStore* object_store = isolate->object_store(); 4447 ObjectStore* object_store = isolate->object_store();
4445 const Array& table = Array::Handle(object_store->canonical_type_arguments()); 4448 const Array& table = Array::Handle(object_store->canonical_type_arguments());
4446 ASSERT(table.Length() > 0); 4449 ASSERT(table.Length() > 0);
4447 AddTypeProperties(&jsobj, "TypeArguments", JSONType(), ref); 4450 AddCommonObjectProperties(&jsobj, "TypeArguments", ref);
4448 jsobj.AddServiceId(*this); 4451 jsobj.AddServiceId(*this);
4449 const String& user_name = String::Handle(PrettyName()); 4452 const String& user_name = String::Handle(PrettyName());
4450 const String& vm_name = String::Handle(Name()); 4453 const String& vm_name = String::Handle(Name());
4451 AddNameProperties(&jsobj, user_name, vm_name); 4454 AddNameProperties(&jsobj, user_name, vm_name);
4452 if (ref) { 4455 if (ref) {
4453 return; 4456 return;
4454 } 4457 }
4455 { 4458 {
4456 JSONArray jsarr(&jsobj, "types"); 4459 JSONArray jsarr(&jsobj, "types");
4457 AbstractType& type_arg = AbstractType::Handle(); 4460 AbstractType& type_arg = AbstractType::Handle();
(...skipping 2424 matching lines...) Expand 10 before | Expand all | Expand 10 after
6882 } 6885 }
6883 6886
6884 6887
6885 void Function::PrintJSONImpl(JSONStream* stream, bool ref) const { 6888 void Function::PrintJSONImpl(JSONStream* stream, bool ref) const {
6886 Class& cls = Class::Handle(Owner()); 6889 Class& cls = Class::Handle(Owner());
6887 ASSERT(!cls.IsNull()); 6890 ASSERT(!cls.IsNull());
6888 Error& err = Error::Handle(); 6891 Error& err = Error::Handle();
6889 err ^= cls.EnsureIsFinalized(Isolate::Current()); 6892 err ^= cls.EnsureIsFinalized(Isolate::Current());
6890 ASSERT(err.IsNull()); 6893 ASSERT(err.IsNull());
6891 JSONObject jsobj(stream); 6894 JSONObject jsobj(stream);
6892 AddTypeProperties(&jsobj, "Function", JSONType(), ref); 6895 AddCommonObjectProperties(&jsobj, "Function", ref);
6893 AddFunctionServiceId(jsobj, *this, cls); 6896 AddFunctionServiceId(jsobj, *this, cls);
6894 const String& user_name = String::Handle(PrettyName()); 6897 const String& user_name = String::Handle(PrettyName());
6895 const String& vm_name = String::Handle(name()); 6898 const String& vm_name = String::Handle(name());
6896 AddNameProperties(&jsobj, user_name, vm_name); 6899 AddNameProperties(&jsobj, user_name, vm_name);
6897 const Function& parent = Function::Handle(parent_function()); 6900 const Function& parent = Function::Handle(parent_function());
6898 if (!parent.IsNull()) { 6901 if (!parent.IsNull()) {
6899 jsobj.AddProperty("owner", parent); 6902 jsobj.AddProperty("owner", parent);
6900 } else if (cls.IsTopLevel()) { 6903 } else if (cls.IsTopLevel()) {
6901 const Library& library = Library::Handle(cls.library()); 6904 const Library& library = Library::Handle(cls.library());
6902 jsobj.AddProperty("owner", library); 6905 jsobj.AddProperty("owner", library);
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
7230 OS::SNPrint(chars, len, kFormat, cls_name, field_name, kF0, kF1, kF2); 7233 OS::SNPrint(chars, len, kFormat, cls_name, field_name, kF0, kF1, kF2);
7231 return chars; 7234 return chars;
7232 } 7235 }
7233 7236
7234 void Field::PrintJSONImpl(JSONStream* stream, bool ref) const { 7237 void Field::PrintJSONImpl(JSONStream* stream, bool ref) const {
7235 JSONObject jsobj(stream); 7238 JSONObject jsobj(stream);
7236 Class& cls = Class::Handle(owner()); 7239 Class& cls = Class::Handle(owner());
7237 intptr_t id = cls.FindFieldIndex(*this); 7240 intptr_t id = cls.FindFieldIndex(*this);
7238 ASSERT(id >= 0); 7241 ASSERT(id >= 0);
7239 intptr_t cid = cls.id(); 7242 intptr_t cid = cls.id();
7240 AddTypeProperties(&jsobj, "Field", JSONType(), ref); 7243 AddCommonObjectProperties(&jsobj, "Field", ref);
7241 jsobj.AddFixedServiceId("classes/%" Pd "/fields/%" Pd "", cid, id); 7244 jsobj.AddFixedServiceId("classes/%" Pd "/fields/%" Pd "", cid, id);
7242 const String& user_name = String::Handle(PrettyName()); 7245 const String& user_name = String::Handle(PrettyName());
7243 const String& vm_name = String::Handle(name()); 7246 const String& vm_name = String::Handle(name());
7244 AddNameProperties(&jsobj, user_name, vm_name); 7247 AddNameProperties(&jsobj, user_name, vm_name);
7245 if (cls.IsTopLevel()) { 7248 if (cls.IsTopLevel()) {
7246 const Library& library = Library::Handle(cls.library()); 7249 const Library& library = Library::Handle(cls.library());
7247 jsobj.AddProperty("owner", library); 7250 jsobj.AddProperty("owner", library);
7248 } else { 7251 } else {
7249 jsobj.AddProperty("owner", cls); 7252 jsobj.AddProperty("owner", cls);
7250 } 7253 }
(...skipping 763 matching lines...) Expand 10 before | Expand all | Expand 10 after
8014 } 8017 }
8015 8018
8016 8019
8017 const char* TokenStream::ToCString() const { 8020 const char* TokenStream::ToCString() const {
8018 return "TokenStream"; 8021 return "TokenStream";
8019 } 8022 }
8020 8023
8021 8024
8022 void TokenStream::PrintJSONImpl(JSONStream* stream, bool ref) const { 8025 void TokenStream::PrintJSONImpl(JSONStream* stream, bool ref) const {
8023 JSONObject jsobj(stream); 8026 JSONObject jsobj(stream);
8024 AddTypeProperties(&jsobj, "Object", JSONType(), ref); 8027 AddCommonObjectProperties(&jsobj, "Object", ref);
8025 // TODO(johnmccutchan): Generate a stable id. TokenStreams hang off 8028 // TODO(johnmccutchan): Generate a stable id. TokenStreams hang off
8026 // a Script object but do not have a back reference to generate a stable id. 8029 // a Script object but do not have a back reference to generate a stable id.
8027 jsobj.AddServiceId(*this); 8030 jsobj.AddServiceId(*this);
8028 if (ref) { 8031 if (ref) {
8029 return; 8032 return;
8030 } 8033 }
8031 Class& cls = Class::Handle(this->clazz());
8032 jsobj.AddProperty("class", cls);
8033 jsobj.AddProperty("size", raw()->Size());
8034 const String& private_key = String::Handle(PrivateKey()); 8034 const String& private_key = String::Handle(PrivateKey());
8035 jsobj.AddProperty("privateKey", private_key); 8035 jsobj.AddProperty("privateKey", private_key);
8036 // TODO(johnmccutchan): Add support for printing LiteralTokens and add 8036 // TODO(johnmccutchan): Add support for printing LiteralTokens and add
8037 // them to members array. 8037 // them to members array.
8038 JSONArray members(&jsobj, "members"); 8038 JSONArray members(&jsobj, "members");
8039 } 8039 }
8040 8040
8041 8041
8042 TokenStream::Iterator::Iterator(const TokenStream& tokens, 8042 TokenStream::Iterator::Iterator(const TokenStream& tokens,
8043 intptr_t token_pos, 8043 intptr_t token_pos,
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after
8548 } 8548 }
8549 } 8549 }
8550 } 8550 }
8551 return Library::null(); 8551 return Library::null();
8552 } 8552 }
8553 8553
8554 8554
8555 // See also Dart_ScriptGetTokenInfo. 8555 // See also Dart_ScriptGetTokenInfo.
8556 void Script::PrintJSONImpl(JSONStream* stream, bool ref) const { 8556 void Script::PrintJSONImpl(JSONStream* stream, bool ref) const {
8557 JSONObject jsobj(stream); 8557 JSONObject jsobj(stream);
8558 AddTypeProperties(&jsobj, "Script", JSONType(), ref); 8558 AddCommonObjectProperties(&jsobj, "Script", ref);
8559 const String& uri = String::Handle(url()); 8559 const String& uri = String::Handle(url());
8560 ASSERT(!uri.IsNull()); 8560 ASSERT(!uri.IsNull());
8561 const String& encoded_uri = String::Handle(String::EncodeIRI(uri)); 8561 const String& encoded_uri = String::Handle(String::EncodeIRI(uri));
8562 ASSERT(!encoded_uri.IsNull()); 8562 ASSERT(!encoded_uri.IsNull());
8563 const Library& lib = Library::Handle(FindLibrary()); 8563 const Library& lib = Library::Handle(FindLibrary());
8564 // TODO(rmacnak): This can fail for eval scripts. Use a ring-id for those. 8564 // TODO(rmacnak): This can fail for eval scripts. Use a ring-id for those.
8565 intptr_t lib_index = (lib.IsNull()) ? -1 : lib.index(); 8565 intptr_t lib_index = (lib.IsNull()) ? -1 : lib.index();
8566 jsobj.AddFixedServiceId("libraries/%" Pd "/scripts/%s", 8566 jsobj.AddFixedServiceId("libraries/%" Pd "/scripts/%s",
8567 lib_index, encoded_uri.ToCString()); 8567 lib_index, encoded_uri.ToCString());
8568 jsobj.AddPropertyStr("uri", uri); 8568 jsobj.AddPropertyStr("uri", uri);
(...skipping 1330 matching lines...) Expand 10 before | Expand all | Expand 10 after
9899 OS::SNPrint(chars, len, kFormat, name.ToCString()); 9899 OS::SNPrint(chars, len, kFormat, name.ToCString());
9900 return chars; 9900 return chars;
9901 } 9901 }
9902 9902
9903 9903
9904 void Library::PrintJSONImpl(JSONStream* stream, bool ref) const { 9904 void Library::PrintJSONImpl(JSONStream* stream, bool ref) const {
9905 const char* library_name = String::Handle(name()).ToCString(); 9905 const char* library_name = String::Handle(name()).ToCString();
9906 intptr_t id = index(); 9906 intptr_t id = index();
9907 ASSERT(id >= 0); 9907 ASSERT(id >= 0);
9908 JSONObject jsobj(stream); 9908 JSONObject jsobj(stream);
9909 AddTypeProperties(&jsobj, "Library", JSONType(), ref); 9909 AddCommonObjectProperties(&jsobj, "Library", ref);
9910 jsobj.AddFixedServiceId("libraries/%" Pd "", id); 9910 jsobj.AddFixedServiceId("libraries/%" Pd "", id);
9911 jsobj.AddProperty("name", library_name); 9911 jsobj.AddProperty("name", library_name);
9912 const String& library_url = String::Handle(url()); 9912 const String& library_url = String::Handle(url());
9913 jsobj.AddPropertyStr("uri", library_url); 9913 jsobj.AddPropertyStr("uri", library_url);
9914 if (ref) { 9914 if (ref) {
9915 return; 9915 return;
9916 } 9916 }
9917 jsobj.AddProperty("debuggable", IsDebuggable()); 9917 jsobj.AddProperty("debuggable", IsDebuggable());
9918 { 9918 {
9919 JSONArray jsarr(&jsobj, "classes"); 9919 JSONArray jsarr(&jsobj, "classes");
(...skipping 839 matching lines...) Expand 10 before | Expand all | Expand 10 after
10759 KindAsStr(iter.Kind()), 10759 KindAsStr(iter.Kind()),
10760 iter.DeoptId(), 10760 iter.DeoptId(),
10761 iter.TokenPos(), 10761 iter.TokenPos(),
10762 iter.TryIndex()); 10762 iter.TryIndex());
10763 } 10763 }
10764 return buffer; 10764 return buffer;
10765 } 10765 }
10766 10766
10767 10767
10768 void PcDescriptors::PrintToJSONObject(JSONObject* jsobj, bool ref) const { 10768 void PcDescriptors::PrintToJSONObject(JSONObject* jsobj, bool ref) const {
10769 AddTypeProperties(jsobj, "Object", JSONType(), ref); 10769 AddCommonObjectProperties(jsobj, "Object", ref);
10770 // TODO(johnmccutchan): Generate a stable id. PcDescriptors hang off a Code 10770 // TODO(johnmccutchan): Generate a stable id. PcDescriptors hang off a Code
10771 // object but do not have a back reference to generate an ID. 10771 // object but do not have a back reference to generate an ID.
10772 jsobj->AddServiceId(*this); 10772 jsobj->AddServiceId(*this);
10773 if (ref) { 10773 if (ref) {
10774 return; 10774 return;
10775 } 10775 }
10776 Class& cls = Class::Handle(this->clazz());
10777 jsobj->AddProperty("class", cls);
10778 jsobj->AddProperty("size", raw()->Size());
10779 JSONArray members(jsobj, "members"); 10776 JSONArray members(jsobj, "members");
10780 Iterator iter(*this, RawPcDescriptors::kAnyKind); 10777 Iterator iter(*this, RawPcDescriptors::kAnyKind);
10781 while (iter.MoveNext()) { 10778 while (iter.MoveNext()) {
10782 JSONObject descriptor(&members); 10779 JSONObject descriptor(&members);
10783 descriptor.AddPropertyF("pcOffset", "%" Px "", iter.PcOffset()); 10780 descriptor.AddPropertyF("pcOffset", "%" Px "", iter.PcOffset());
10784 descriptor.AddProperty("kind", KindAsStr(iter.Kind())); 10781 descriptor.AddProperty("kind", KindAsStr(iter.Kind()));
10785 descriptor.AddProperty("deoptId", iter.DeoptId()); 10782 descriptor.AddProperty("deoptId", iter.DeoptId());
10786 // TODO(turnidge): Use AddLocation instead. 10783 // TODO(turnidge): Use AddLocation instead.
10787 descriptor.AddProperty("tokenPos", iter.TokenPos()); 10784 descriptor.AddProperty("tokenPos", iter.TokenPos());
10788 descriptor.AddProperty("tryIndex", iter.TryIndex()); 10785 descriptor.AddProperty("tryIndex", iter.TryIndex());
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
11041 (len - num_chars), 11038 (len - num_chars),
11042 i, var_name, info); 11039 i, var_name, info);
11043 } 11040 }
11044 return buffer; 11041 return buffer;
11045 } 11042 }
11046 11043
11047 11044
11048 void LocalVarDescriptors::PrintJSONImpl(JSONStream* stream, 11045 void LocalVarDescriptors::PrintJSONImpl(JSONStream* stream,
11049 bool ref) const { 11046 bool ref) const {
11050 JSONObject jsobj(stream); 11047 JSONObject jsobj(stream);
11051 AddTypeProperties(&jsobj, "Object", JSONType(), ref); 11048 AddCommonObjectProperties(&jsobj, "Object", ref);
11052 // TODO(johnmccutchan): Generate a stable id. LocalVarDescriptors hang off 11049 // TODO(johnmccutchan): Generate a stable id. LocalVarDescriptors hang off
11053 // a Code object but do not have a back reference to generate an ID. 11050 // a Code object but do not have a back reference to generate an ID.
11054 jsobj.AddServiceId(*this); 11051 jsobj.AddServiceId(*this);
11055 if (ref) { 11052 if (ref) {
11056 return; 11053 return;
11057 } 11054 }
11058 Class& cls = Class::Handle(this->clazz());
11059 jsobj.AddProperty("class", cls);
11060 jsobj.AddProperty("size", raw()->Size());
11061 JSONArray members(&jsobj, "members"); 11055 JSONArray members(&jsobj, "members");
11062 String& var_name = String::Handle(); 11056 String& var_name = String::Handle();
11063 for (intptr_t i = 0; i < Length(); i++) { 11057 for (intptr_t i = 0; i < Length(); i++) {
11064 RawLocalVarDescriptors::VarInfo info; 11058 RawLocalVarDescriptors::VarInfo info;
11065 var_name = GetName(i); 11059 var_name = GetName(i);
11066 GetInfo(i, &info); 11060 GetInfo(i, &info);
11067 JSONObject var(&members); 11061 JSONObject var(&members);
11068 var.AddProperty("name", var_name.ToCString()); 11062 var.AddProperty("name", var_name.ToCString());
11069 var.AddProperty("index", static_cast<intptr_t>(info.index())); 11063 var.AddProperty("index", static_cast<intptr_t>(info.index()));
11070 var.AddProperty("beginPos", static_cast<intptr_t>(info.begin_pos)); 11064 var.AddProperty("beginPos", static_cast<intptr_t>(info.begin_pos));
(...skipping 1650 matching lines...) Expand 10 before | Expand all | Expand 10 after
12721 12715
12722 12716
12723 bool Code::IsFunctionCode() const { 12717 bool Code::IsFunctionCode() const {
12724 const Object& obj = Object::Handle(owner()); 12718 const Object& obj = Object::Handle(owner());
12725 return obj.IsFunction(); 12719 return obj.IsFunction();
12726 } 12720 }
12727 12721
12728 12722
12729 void Code::PrintJSONImpl(JSONStream* stream, bool ref) const { 12723 void Code::PrintJSONImpl(JSONStream* stream, bool ref) const {
12730 JSONObject jsobj(stream); 12724 JSONObject jsobj(stream);
12731 AddTypeProperties(&jsobj, "Code", JSONType(), ref); 12725 AddCommonObjectProperties(&jsobj, "Code", ref);
12732 jsobj.AddFixedServiceId("code/%" Px64"-%" Px "", 12726 jsobj.AddFixedServiceId("code/%" Px64"-%" Px "",
12733 compile_timestamp(), 12727 compile_timestamp(),
12734 EntryPoint()); 12728 EntryPoint());
12735 const String& user_name = String::Handle(PrettyName()); 12729 const String& user_name = String::Handle(PrettyName());
12736 const String& vm_name = String::Handle(Name()); 12730 const String& vm_name = String::Handle(Name());
12737 AddNameProperties(&jsobj, user_name, vm_name); 12731 AddNameProperties(&jsobj, user_name, vm_name);
12738 const bool is_stub = IsStubCode() || IsAllocationStubCode(); 12732 const bool is_stub = IsStubCode() || IsAllocationStubCode();
12739 if (is_stub) { 12733 if (is_stub) {
12740 jsobj.AddProperty("kind", "Stub"); 12734 jsobj.AddProperty("kind", "Stub");
12741 } else { 12735 } else {
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after
13020 } 13014 }
13021 IndentN(indent); 13015 IndentN(indent);
13022 OS::PrintErr("}\n"); 13016 OS::PrintErr("}\n");
13023 } 13017 }
13024 13018
13025 13019
13026 void Context::PrintJSONImpl(JSONStream* stream, bool ref) const { 13020 void Context::PrintJSONImpl(JSONStream* stream, bool ref) const {
13027 JSONObject jsobj(stream); 13021 JSONObject jsobj(stream);
13028 // TODO(turnidge): Should the user level type for Context be Context 13022 // TODO(turnidge): Should the user level type for Context be Context
13029 // or Object? 13023 // or Object?
13030 AddTypeProperties(&jsobj, "Context", JSONType(), ref); 13024 AddCommonObjectProperties(&jsobj, "Context", ref);
13031 jsobj.AddServiceId(*this); 13025 jsobj.AddServiceId(*this);
13032 13026
13033 jsobj.AddProperty("length", num_variables()); 13027 jsobj.AddProperty("length", num_variables());
13034 13028
13035 if (ref) { 13029 if (ref) {
13036 return; 13030 return;
13037 } 13031 }
13038 13032
13039 Class& cls = Class::Handle(this->clazz());
13040 jsobj.AddProperty("class", cls);
13041
13042 jsobj.AddProperty("size", raw()->Size());
13043
13044 const Context& parent_context = Context::Handle(parent()); 13033 const Context& parent_context = Context::Handle(parent());
13045 jsobj.AddProperty("parent", parent_context); 13034 jsobj.AddProperty("parent", parent_context);
13046 13035
13047 JSONArray jsarr(&jsobj, "variables"); 13036 JSONArray jsarr(&jsobj, "variables");
13048 for (intptr_t i = 0; i < num_variables(); i++) { 13037 Object& var = Object::Handle();
13049 const Object& var = Object::Handle(At(i)); 13038 for (intptr_t index = 0; index < num_variables(); index++) {
13039 var = At(index);
13050 JSONObject jselement(&jsarr); 13040 JSONObject jselement(&jsarr);
13051 jselement.AddProperty("index", i);
13052 jselement.AddProperty("value", var); 13041 jselement.AddProperty("value", var);
13053 } 13042 }
13054 } 13043 }
13055 13044
13056 13045
13057 RawContextScope* ContextScope::New(intptr_t num_variables) { 13046 RawContextScope* ContextScope::New(intptr_t num_variables) {
13058 ASSERT(Object::context_scope_class() != Class::null()); 13047 ASSERT(Object::context_scope_class() != Class::null());
13059 if (num_variables < 0 || num_variables > kMaxElements) { 13048 if (num_variables < 0 || num_variables > kMaxElements) {
13060 // This should be caught before we reach here. 13049 // This should be caught before we reach here.
13061 FATAL1("Fatal error in ContextScope::New: invalid num_variables %" Pd "\n", 13050 FATAL1("Fatal error in ContextScope::New: invalid num_variables %" Pd "\n",
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after
13439 } 13428 }
13440 13429
13441 13430
13442 const char* ApiError::ToCString() const { 13431 const char* ApiError::ToCString() const {
13443 return "ApiError"; 13432 return "ApiError";
13444 } 13433 }
13445 13434
13446 13435
13447 void ApiError::PrintJSONImpl(JSONStream* stream, bool ref) const { 13436 void ApiError::PrintJSONImpl(JSONStream* stream, bool ref) const {
13448 JSONObject jsobj(stream); 13437 JSONObject jsobj(stream);
13449 AddTypeProperties(&jsobj, "Error", JSONType(), ref); 13438 AddCommonObjectProperties(&jsobj, "Error", ref);
13439 jsobj.AddProperty("kind", "InternalError");
13440 jsobj.AddServiceId(*this);
13450 jsobj.AddProperty("message", ToErrorCString()); 13441 jsobj.AddProperty("message", ToErrorCString());
13451 } 13442 }
13452 13443
13453 13444
13454 RawLanguageError* LanguageError::New() { 13445 RawLanguageError* LanguageError::New() {
13455 ASSERT(Object::language_error_class() != Class::null()); 13446 ASSERT(Object::language_error_class() != Class::null());
13456 RawObject* raw = Object::Allocate(LanguageError::kClassId, 13447 RawObject* raw = Object::Allocate(LanguageError::kClassId,
13457 LanguageError::InstanceSize(), 13448 LanguageError::InstanceSize(),
13458 Heap::kOld); 13449 Heap::kOld);
13459 return reinterpret_cast<RawLanguageError*>(raw); 13450 return reinterpret_cast<RawLanguageError*>(raw);
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
13576 } 13567 }
13577 13568
13578 13569
13579 const char* LanguageError::ToCString() const { 13570 const char* LanguageError::ToCString() const {
13580 return "LanguageError"; 13571 return "LanguageError";
13581 } 13572 }
13582 13573
13583 13574
13584 void LanguageError::PrintJSONImpl(JSONStream* stream, bool ref) const { 13575 void LanguageError::PrintJSONImpl(JSONStream* stream, bool ref) const {
13585 JSONObject jsobj(stream); 13576 JSONObject jsobj(stream);
13586 AddTypeProperties(&jsobj, "Error", JSONType(), ref); 13577 AddCommonObjectProperties(&jsobj, "Error", ref);
13578 jsobj.AddProperty("kind", "LanguageError");
13579 jsobj.AddServiceId(*this);
13587 jsobj.AddProperty("message", ToErrorCString()); 13580 jsobj.AddProperty("message", ToErrorCString());
13588 } 13581 }
13589 13582
13590 13583
13591 RawUnhandledException* UnhandledException::New(const Instance& exception, 13584 RawUnhandledException* UnhandledException::New(const Instance& exception,
13592 const Instance& stacktrace, 13585 const Instance& stacktrace,
13593 Heap::Space space) { 13586 Heap::Space space) {
13594 ASSERT(Object::unhandled_exception_class() != Class::null()); 13587 ASSERT(Object::unhandled_exception_class() != Class::null());
13595 UnhandledException& result = UnhandledException::Handle(); 13588 UnhandledException& result = UnhandledException::Handle();
13596 { 13589 {
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
13667 13660
13668 const char* UnhandledException::ToCString() const { 13661 const char* UnhandledException::ToCString() const {
13669 return "UnhandledException"; 13662 return "UnhandledException";
13670 } 13663 }
13671 13664
13672 13665
13673 13666
13674 void UnhandledException::PrintJSONImpl(JSONStream* stream, 13667 void UnhandledException::PrintJSONImpl(JSONStream* stream,
13675 bool ref) const { 13668 bool ref) const {
13676 JSONObject jsobj(stream); 13669 JSONObject jsobj(stream);
13677 AddTypeProperties(&jsobj, "Error", JSONType(), ref); 13670 AddCommonObjectProperties(&jsobj, "Error", ref);
13671 jsobj.AddProperty("kind", "UnhandledException");
13672 jsobj.AddServiceId(*this);
13678 jsobj.AddProperty("message", ToErrorCString()); 13673 jsobj.AddProperty("message", ToErrorCString());
13679 13674 if (ref) {
13675 return;
13676 }
13680 Instance& instance = Instance::Handle(); 13677 Instance& instance = Instance::Handle();
13681 instance = exception(); 13678 instance = exception();
13682 jsobj.AddProperty("exception", instance); 13679 jsobj.AddProperty("exception", instance);
13683 instance = stacktrace(); 13680 instance = stacktrace();
13684 jsobj.AddProperty("stacktrace", instance); 13681 jsobj.AddProperty("stacktrace", instance);
13685 } 13682 }
13686 13683
13687 13684
13688 RawUnwindError* UnwindError::New(const String& message, Heap::Space space) { 13685 RawUnwindError* UnwindError::New(const String& message, Heap::Space space) {
13689 ASSERT(Object::unwind_error_class() != Class::null()); 13686 ASSERT(Object::unwind_error_class() != Class::null());
(...skipping 21 matching lines...) Expand all
13711 } 13708 }
13712 13709
13713 13710
13714 const char* UnwindError::ToCString() const { 13711 const char* UnwindError::ToCString() const {
13715 return "UnwindError"; 13712 return "UnwindError";
13716 } 13713 }
13717 13714
13718 13715
13719 void UnwindError::PrintJSONImpl(JSONStream* stream, bool ref) const { 13716 void UnwindError::PrintJSONImpl(JSONStream* stream, bool ref) const {
13720 JSONObject jsobj(stream); 13717 JSONObject jsobj(stream);
13721 AddTypeProperties(&jsobj, "Error", JSONType(), ref); 13718 AddCommonObjectProperties(&jsobj, "Error", ref);
13719 jsobj.AddProperty("kind", "TerminationError");
13720 jsobj.AddServiceId(*this);
13722 jsobj.AddProperty("message", ToErrorCString()); 13721 jsobj.AddProperty("message", ToErrorCString());
13723 } 13722 }
13724 13723
13725 13724
13726 RawObject* Instance::Evaluate(const String& expr, 13725 RawObject* Instance::Evaluate(const String& expr,
13727 const Array& param_names, 13726 const Array& param_names,
13728 const Array& param_values) const { 13727 const Array& param_values) const {
13729 const Class& cls = Class::Handle(clazz()); 13728 const Class& cls = Class::Handle(clazz());
13730 const Function& eval_func = 13729 const Function& eval_func =
13731 Function::Handle(EvaluateHelper(cls, expr, param_names, false)); 13730 Function::Handle(EvaluateHelper(cls, expr, param_names, false));
(...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after
14154 intptr_t len = OS::SNPrint(NULL, 0, kFormat, type_name.ToCString()) + 1; 14153 intptr_t len = OS::SNPrint(NULL, 0, kFormat, type_name.ToCString()) + 1;
14155 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 14154 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
14156 OS::SNPrint(chars, len, kFormat, type_name.ToCString()); 14155 OS::SNPrint(chars, len, kFormat, type_name.ToCString());
14157 return chars; 14156 return chars;
14158 } 14157 }
14159 } 14158 }
14160 14159
14161 14160
14162 void Instance::PrintSharedInstanceJSON(JSONObject* jsobj, 14161 void Instance::PrintSharedInstanceJSON(JSONObject* jsobj,
14163 bool ref) const { 14162 bool ref) const {
14164 AddTypeProperties(jsobj, "Instance", JSONType(), ref); 14163 AddCommonObjectProperties(jsobj, "Instance", ref);
14165 Class& cls = Class::Handle(this->clazz());
14166 jsobj->AddProperty("class", cls);
14167 // TODO(turnidge): Provide the type arguments here too.
14168 if (ref) { 14164 if (ref) {
14169 return; 14165 return;
14170 } 14166 }
14171 14167
14172 if (raw()->IsHeapObject()) {
14173 jsobj->AddProperty("size", raw()->Size());
14174 } else {
14175 jsobj->AddProperty("size", (intptr_t)0);
14176 }
14177
14178 // Walk the superclass chain, adding all instance fields. 14168 // Walk the superclass chain, adding all instance fields.
14169 Class& cls = Class::Handle(this->clazz());
14179 { 14170 {
14180 Instance& fieldValue = Instance::Handle(); 14171 Instance& fieldValue = Instance::Handle();
14181 JSONArray jsarr(jsobj, "fields"); 14172 JSONArray jsarr(jsobj, "fields");
14182 while (!cls.IsNull()) { 14173 while (!cls.IsNull()) {
14183 const Array& field_array = Array::Handle(cls.fields()); 14174 const Array& field_array = Array::Handle(cls.fields());
14184 Field& field = Field::Handle(); 14175 Field& field = Field::Handle();
14185 if (!field_array.IsNull()) { 14176 if (!field_array.IsNull()) {
14186 for (intptr_t i = 0; i < field_array.Length(); i++) { 14177 for (intptr_t i = 0; i < field_array.Length(); i++) {
14187 field ^= field_array.At(i); 14178 field ^= field_array.At(i);
14188 if (!field.is_static()) { 14179 if (!field.is_static()) {
(...skipping 1333 matching lines...) Expand 10 before | Expand all | Expand 10 after
15522 JSONObject jsobj(stream); 15513 JSONObject jsobj(stream);
15523 PrintSharedInstanceJSON(&jsobj, ref); 15514 PrintSharedInstanceJSON(&jsobj, ref);
15524 jsobj.AddProperty("kind", "TypeRef"); 15515 jsobj.AddProperty("kind", "TypeRef");
15525 jsobj.AddServiceId(*this); 15516 jsobj.AddServiceId(*this);
15526 const String& user_name = String::Handle(PrettyName()); 15517 const String& user_name = String::Handle(PrettyName());
15527 const String& vm_name = String::Handle(Name()); 15518 const String& vm_name = String::Handle(Name());
15528 AddNameProperties(&jsobj, user_name, vm_name); 15519 AddNameProperties(&jsobj, user_name, vm_name);
15529 if (ref) { 15520 if (ref) {
15530 return; 15521 return;
15531 } 15522 }
15532 jsobj.AddProperty("type", AbstractType::Handle(type())); 15523 jsobj.AddProperty("targetType", AbstractType::Handle(type()));
15533 } 15524 }
15534 15525
15535 15526
15536 void TypeParameter::set_is_finalized() const { 15527 void TypeParameter::set_is_finalized() const {
15537 ASSERT(!IsFinalized()); 15528 ASSERT(!IsFinalized());
15538 set_type_state(RawTypeParameter::kFinalizedUninstantiated); 15529 set_type_state(RawTypeParameter::kFinalizedUninstantiated);
15539 } 15530 }
15540 15531
15541 15532
15542 bool TypeParameter::IsEquivalent(const Instance& other, 15533 bool TypeParameter::IsEquivalent(const Instance& other,
(...skipping 429 matching lines...) Expand 10 before | Expand all | Expand 10 after
15972 JSONObject jsobj(stream); 15963 JSONObject jsobj(stream);
15973 PrintSharedInstanceJSON(&jsobj, ref); 15964 PrintSharedInstanceJSON(&jsobj, ref);
15974 jsobj.AddProperty("kind", "BoundedType"); 15965 jsobj.AddProperty("kind", "BoundedType");
15975 jsobj.AddServiceId(*this); 15966 jsobj.AddServiceId(*this);
15976 const String& user_name = String::Handle(PrettyName()); 15967 const String& user_name = String::Handle(PrettyName());
15977 const String& vm_name = String::Handle(Name()); 15968 const String& vm_name = String::Handle(Name());
15978 AddNameProperties(&jsobj, user_name, vm_name); 15969 AddNameProperties(&jsobj, user_name, vm_name);
15979 if (ref) { 15970 if (ref) {
15980 return; 15971 return;
15981 } 15972 }
15982 jsobj.AddProperty("type", AbstractType::Handle(type())); 15973 jsobj.AddProperty("targetType", AbstractType::Handle(type()));
15983 jsobj.AddProperty("bound", AbstractType::Handle(bound())); 15974 jsobj.AddProperty("bound", AbstractType::Handle(bound()));
15984 } 15975 }
15985 15976
15986 15977
15987 intptr_t MixinAppType::token_pos() const { 15978 intptr_t MixinAppType::token_pos() const {
15988 return AbstractType::Handle(MixinTypeAt(0)).token_pos(); 15979 return AbstractType::Handle(MixinTypeAt(0)).token_pos();
15989 } 15980 }
15990 15981
15991 15982
15992 intptr_t MixinAppType::Depth() const { 15983 intptr_t MixinAppType::Depth() const {
(...skipping 3374 matching lines...) Expand 10 before | Expand all | Expand 10 after
19367 jsobj.AddProperty("kind", "List"); 19358 jsobj.AddProperty("kind", "List");
19368 jsobj.AddServiceId(*this); 19359 jsobj.AddServiceId(*this);
19369 jsobj.AddProperty("length", Length()); 19360 jsobj.AddProperty("length", Length());
19370 if (ref) { 19361 if (ref) {
19371 return; 19362 return;
19372 } 19363 }
19373 { 19364 {
19374 JSONArray jsarr(&jsobj, "elements"); 19365 JSONArray jsarr(&jsobj, "elements");
19375 Object& element = Object::Handle(); 19366 Object& element = Object::Handle();
19376 for (intptr_t index = 0; index < Length(); index++) { 19367 for (intptr_t index = 0; index < Length(); index++) {
19377 JSONObject jselement(&jsarr);
19378 jselement.AddProperty("index", index);
19379
19380 element = At(index); 19368 element = At(index);
19381 jselement.AddProperty("value", element); 19369 jsarr.AddValue(element);
19382 } 19370 }
19383 } 19371 }
19384 } 19372 }
19385 19373
19386 19374
19387 RawArray* Array::Grow(const Array& source, 19375 RawArray* Array::Grow(const Array& source,
19388 intptr_t new_length, 19376 intptr_t new_length,
19389 Heap::Space space) { 19377 Heap::Space space) {
19390 Isolate* isolate = Isolate::Current(); 19378 Isolate* isolate = Isolate::Current();
19391 const Array& result = Array::Handle(isolate, Array::New(new_length, space)); 19379 const Array& result = Array::Handle(isolate, Array::New(new_length, space));
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
19614 jsobj.AddProperty("kind", "List"); 19602 jsobj.AddProperty("kind", "List");
19615 jsobj.AddServiceId(*this); 19603 jsobj.AddServiceId(*this);
19616 jsobj.AddProperty("length", Length()); 19604 jsobj.AddProperty("length", Length());
19617 if (ref) { 19605 if (ref) {
19618 return; 19606 return;
19619 } 19607 }
19620 { 19608 {
19621 JSONArray jsarr(&jsobj, "elements"); 19609 JSONArray jsarr(&jsobj, "elements");
19622 Object& element = Object::Handle(); 19610 Object& element = Object::Handle();
19623 for (intptr_t index = 0; index < Length(); index++) { 19611 for (intptr_t index = 0; index < Length(); index++) {
19624 JSONObject jselement(&jsarr);
19625 jselement.AddProperty("index", index);
19626
19627 element = At(index); 19612 element = At(index);
19628 jselement.AddProperty("value", element); 19613 jsarr.AddValue(element);
19629 } 19614 }
19630 } 19615 }
19631 } 19616 }
19632 19617
19633 19618
19634 // Equivalent to Dart's operator "==" and hashCode. 19619 // Equivalent to Dart's operator "==" and hashCode.
19635 class DefaultHashTraits { 19620 class DefaultHashTraits {
19636 public: 19621 public:
19637 static bool IsMatch(const Object& a, const Object& b) { 19622 static bool IsMatch(const Object& a, const Object& b) {
19638 if (a.IsNull() || b.IsNull()) { 19623 if (a.IsNull() || b.IsNull()) {
(...skipping 1184 matching lines...) Expand 10 before | Expand all | Expand 10 after
20823 return tag_label.ToCString(); 20808 return tag_label.ToCString();
20824 } 20809 }
20825 20810
20826 20811
20827 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { 20812 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const {
20828 Instance::PrintJSONImpl(stream, ref); 20813 Instance::PrintJSONImpl(stream, ref);
20829 } 20814 }
20830 20815
20831 20816
20832 } // namespace dart 20817 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/service/service.md » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698