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

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

Issue 1162133002: Introduce Instance.kind. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: regis feedback 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/json_test.cc ('k') | runtime/vm/object_test.cc » ('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 1575 matching lines...) Expand 10 before | Expand all | Expand 10 after
1586 } 1586 }
1587 1587
1588 1588
1589 static void AddTypeProperties(JSONObject* jsobj, 1589 static void AddTypeProperties(JSONObject* jsobj,
1590 const char* user_type, 1590 const char* user_type,
1591 const char* vm_type, 1591 const char* vm_type,
1592 bool ref) { 1592 bool ref) {
1593 bool same_type = (strcmp(user_type, vm_type) == 0); 1593 bool same_type = (strcmp(user_type, vm_type) == 0);
1594 if (ref) { 1594 if (ref) {
1595 jsobj->AddPropertyF("type", "@%s", user_type); 1595 jsobj->AddPropertyF("type", "@%s", user_type);
1596 if (!same_type) {
1597 jsobj->AddPropertyF("_vmType", "@%s", vm_type);
1598 }
1599 } else { 1596 } else {
1600 jsobj->AddProperty("type", user_type); 1597 jsobj->AddProperty("type", user_type);
1601 if (!same_type) { 1598 }
1602 jsobj->AddProperty("_vmType", vm_type); 1599 if (!same_type) {
1603 } 1600 jsobj->AddProperty("_vmType", vm_type);
1604 } 1601 }
1605 } 1602 }
1606 1603
1607 1604
1608 void Object::PrintJSON(JSONStream* stream, bool ref) const { 1605 void Object::PrintJSON(JSONStream* stream, bool ref) const {
1609 if (IsNull()) { 1606 if (IsNull()) {
1610 JSONObject jsobj(stream); 1607 JSONObject jsobj(stream);
1611 AddTypeProperties(&jsobj, "null", JSONType(), ref); 1608 AddTypeProperties(&jsobj, "Instance", JSONType(), ref);
1609 jsobj.AddProperty("kind", "Null");
1612 jsobj.AddFixedServiceId("objects/null"); 1610 jsobj.AddFixedServiceId("objects/null");
1613 jsobj.AddProperty("valueAsString", "null"); 1611 jsobj.AddProperty("valueAsString", "null");
1614 if (!ref) { 1612 if (!ref) {
1615 const Class& cls = Class::Handle(this->clazz()); 1613 const Class& cls = Class::Handle(this->clazz());
1616 jsobj.AddProperty("class", cls); 1614 jsobj.AddProperty("class", cls);
1617 jsobj.AddProperty("size", raw()->Size()); 1615 jsobj.AddProperty("size", raw()->Size());
1618 } 1616 }
1619 } else { 1617 } else {
1620 PrintJSONImpl(stream, ref); 1618 PrintJSONImpl(stream, ref);
1621 } 1619 }
(...skipping 12524 matching lines...) Expand 10 before | Expand all | Expand 10 after
14146 intptr_t len = OS::SNPrint(NULL, 0, kFormat, type_name.ToCString()) + 1; 14144 intptr_t len = OS::SNPrint(NULL, 0, kFormat, type_name.ToCString()) + 1;
14147 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 14145 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
14148 OS::SNPrint(chars, len, kFormat, type_name.ToCString()); 14146 OS::SNPrint(chars, len, kFormat, type_name.ToCString());
14149 return chars; 14147 return chars;
14150 } 14148 }
14151 } 14149 }
14152 14150
14153 14151
14154 void Instance::PrintSharedInstanceJSON(JSONObject* jsobj, 14152 void Instance::PrintSharedInstanceJSON(JSONObject* jsobj,
14155 bool ref) const { 14153 bool ref) const {
14154 AddTypeProperties(jsobj, "Instance", JSONType(), ref);
14156 Class& cls = Class::Handle(this->clazz()); 14155 Class& cls = Class::Handle(this->clazz());
14157 jsobj->AddProperty("class", cls); 14156 jsobj->AddProperty("class", cls);
14158 // TODO(turnidge): Provide the type arguments here too. 14157 // TODO(turnidge): Provide the type arguments here too.
14159 if (ref) { 14158 if (ref) {
14160 return; 14159 return;
14161 } 14160 }
14162 14161
14163 if (raw()->IsHeapObject()) { 14162 if (raw()->IsHeapObject()) {
14164 jsobj->AddProperty("size", raw()->Size()); 14163 jsobj->AddProperty("size", raw()->Size());
14165 } else { 14164 } else {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
14209 jsobj.AddProperty("kind", "NotInitialized"); 14208 jsobj.AddProperty("kind", "NotInitialized");
14210 jsobj.AddProperty("valueAsString", "<not initialized>"); 14209 jsobj.AddProperty("valueAsString", "<not initialized>");
14211 return; 14210 return;
14212 } else if (raw() == Object::transition_sentinel().raw()) { 14211 } else if (raw() == Object::transition_sentinel().raw()) {
14213 jsobj.AddProperty("type", "Sentinel"); 14212 jsobj.AddProperty("type", "Sentinel");
14214 jsobj.AddProperty("kind", "BeingInitialized"); 14213 jsobj.AddProperty("kind", "BeingInitialized");
14215 jsobj.AddProperty("valueAsString", "<being initialized>"); 14214 jsobj.AddProperty("valueAsString", "<being initialized>");
14216 return; 14215 return;
14217 } 14216 }
14218 14217
14219 AddTypeProperties(&jsobj, "Instance", JSONType(), ref);
14220 PrintSharedInstanceJSON(&jsobj, ref); 14218 PrintSharedInstanceJSON(&jsobj, ref);
14219 if (IsClosure()) {
14220 jsobj.AddProperty("kind", "Closure");
14221 } else {
14222 jsobj.AddProperty("kind", "PlainInstance");
14223 }
14221 jsobj.AddServiceId(*this); 14224 jsobj.AddServiceId(*this);
14222 if (IsClosure()) { 14225 if (IsClosure()) {
14223 jsobj.AddProperty("function", Function::Handle(Closure::function(*this))); 14226 jsobj.AddProperty("closureFunction",
14224 jsobj.AddProperty("context", Context::Handle(Closure::context(*this))); 14227 Function::Handle(Closure::function(*this)));
14228 jsobj.AddProperty("closureContext",
14229 Context::Handle(Closure::context(*this)));
14225 } 14230 }
14226 if (ref) { 14231 if (ref) {
14227 return; 14232 return;
14228 } 14233 }
14229 } 14234 }
14230 14235
14231 14236
14232 bool AbstractType::IsResolved() const { 14237 bool AbstractType::IsResolved() const {
14233 // AbstractType is an abstract class. 14238 // AbstractType is an abstract class.
14234 UNREACHABLE(); 14239 UNREACHABLE();
(...skipping 1072 matching lines...) Expand 10 before | Expand all | Expand 10 after
15307 OS::SNPrint(NULL, 0, format, unresolved, class_name, args_cstr) + 1; 15312 OS::SNPrint(NULL, 0, format, unresolved, class_name, args_cstr) + 1;
15308 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 15313 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
15309 OS::SNPrint(chars, len, format, unresolved, class_name, args_cstr); 15314 OS::SNPrint(chars, len, format, unresolved, class_name, args_cstr);
15310 return chars; 15315 return chars;
15311 } 15316 }
15312 } 15317 }
15313 15318
15314 15319
15315 void Type::PrintJSONImpl(JSONStream* stream, bool ref) const { 15320 void Type::PrintJSONImpl(JSONStream* stream, bool ref) const {
15316 JSONObject jsobj(stream); 15321 JSONObject jsobj(stream);
15317 AddTypeProperties(&jsobj, "Type", JSONType(), ref);
15318 PrintSharedInstanceJSON(&jsobj, ref); 15322 PrintSharedInstanceJSON(&jsobj, ref);
15323 jsobj.AddProperty("kind", "Type");
15319 if (IsCanonical()) { 15324 if (IsCanonical()) {
15320 const Class& type_cls = Class::Handle(type_class()); 15325 const Class& type_cls = Class::Handle(type_class());
15321 intptr_t id = type_cls.FindCanonicalTypeIndex(*this); 15326 intptr_t id = type_cls.FindCanonicalTypeIndex(*this);
15322 ASSERT(id >= 0); 15327 ASSERT(id >= 0);
15323 intptr_t cid = type_cls.id(); 15328 intptr_t cid = type_cls.id();
15324 jsobj.AddFixedServiceId("classes/%" Pd "/types/%" Pd "", cid, id); 15329 jsobj.AddFixedServiceId("classes/%" Pd "/types/%" Pd "", cid, id);
15325 jsobj.AddProperty("typeClass", type_cls); 15330 jsobj.AddProperty("typeClass", type_cls);
15326 } else { 15331 } else {
15327 jsobj.AddServiceId(*this); 15332 jsobj.AddServiceId(*this);
15328 } 15333 }
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after
15498 const intptr_t len = OS::SNPrint(NULL, 0, format, type_cstr) + 1; 15503 const intptr_t len = OS::SNPrint(NULL, 0, format, type_cstr) + 1;
15499 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 15504 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
15500 OS::SNPrint(chars, len, format, type_cstr); 15505 OS::SNPrint(chars, len, format, type_cstr);
15501 return chars; 15506 return chars;
15502 } 15507 }
15503 } 15508 }
15504 15509
15505 15510
15506 void TypeRef::PrintJSONImpl(JSONStream* stream, bool ref) const { 15511 void TypeRef::PrintJSONImpl(JSONStream* stream, bool ref) const {
15507 JSONObject jsobj(stream); 15512 JSONObject jsobj(stream);
15508 AddTypeProperties(&jsobj, "TypeRef", JSONType(), ref);
15509 PrintSharedInstanceJSON(&jsobj, ref); 15513 PrintSharedInstanceJSON(&jsobj, ref);
15514 jsobj.AddProperty("kind", "TypeRef");
15510 jsobj.AddServiceId(*this); 15515 jsobj.AddServiceId(*this);
15511 const String& user_name = String::Handle(PrettyName()); 15516 const String& user_name = String::Handle(PrettyName());
15512 const String& vm_name = String::Handle(Name()); 15517 const String& vm_name = String::Handle(Name());
15513 AddNameProperties(&jsobj, user_name, vm_name); 15518 AddNameProperties(&jsobj, user_name, vm_name);
15514 if (ref) { 15519 if (ref) {
15515 return; 15520 return;
15516 } 15521 }
15517 jsobj.AddProperty("refType", AbstractType::Handle(type())); 15522 jsobj.AddProperty("type", AbstractType::Handle(type()));
15518 } 15523 }
15519 15524
15520 15525
15521 void TypeParameter::set_is_finalized() const { 15526 void TypeParameter::set_is_finalized() const {
15522 ASSERT(!IsFinalized()); 15527 ASSERT(!IsFinalized());
15523 set_type_state(RawTypeParameter::kFinalizedUninstantiated); 15528 set_type_state(RawTypeParameter::kFinalizedUninstantiated);
15524 } 15529 }
15525 15530
15526 15531
15527 bool TypeParameter::IsEquivalent(const Instance& other, 15532 bool TypeParameter::IsEquivalent(const Instance& other,
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
15732 intptr_t len = OS::SNPrint( 15737 intptr_t len = OS::SNPrint(
15733 NULL, 0, format, name_cstr, index(), cls_cstr, bound_cstr) + 1; 15738 NULL, 0, format, name_cstr, index(), cls_cstr, bound_cstr) + 1;
15734 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 15739 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
15735 OS::SNPrint(chars, len, format, name_cstr, index(), cls_cstr, bound_cstr); 15740 OS::SNPrint(chars, len, format, name_cstr, index(), cls_cstr, bound_cstr);
15736 return chars; 15741 return chars;
15737 } 15742 }
15738 15743
15739 15744
15740 void TypeParameter::PrintJSONImpl(JSONStream* stream, bool ref) const { 15745 void TypeParameter::PrintJSONImpl(JSONStream* stream, bool ref) const {
15741 JSONObject jsobj(stream); 15746 JSONObject jsobj(stream);
15742 AddTypeProperties(&jsobj, "TypeParameter", JSONType(), ref);
15743 PrintSharedInstanceJSON(&jsobj, ref); 15747 PrintSharedInstanceJSON(&jsobj, ref);
15748 jsobj.AddProperty("kind", "TypeParameter");
15744 jsobj.AddServiceId(*this); 15749 jsobj.AddServiceId(*this);
15745 const String& user_name = String::Handle(PrettyName()); 15750 const String& user_name = String::Handle(PrettyName());
15746 const String& vm_name = String::Handle(Name()); 15751 const String& vm_name = String::Handle(Name());
15747 AddNameProperties(&jsobj, user_name, vm_name); 15752 AddNameProperties(&jsobj, user_name, vm_name);
15748 const Class& param_cls = Class::Handle(parameterized_class()); 15753 const Class& param_cls = Class::Handle(parameterized_class());
15749 jsobj.AddProperty("parameterizedClass", param_cls); 15754 jsobj.AddProperty("parameterizedClass", param_cls);
15750 if (ref) { 15755 if (ref) {
15751 return; 15756 return;
15752 } 15757 }
15753 jsobj.AddProperty("index", index()); 15758 jsobj.AddProperty("parameterIndex", index());
15754 const AbstractType& upper_bound = AbstractType::Handle(bound()); 15759 const AbstractType& upper_bound = AbstractType::Handle(bound());
15755 jsobj.AddProperty("upperBound", upper_bound); 15760 jsobj.AddProperty("bound", upper_bound);
15756 } 15761 }
15757 15762
15758 15763
15759 bool BoundedType::IsMalformed() const { 15764 bool BoundedType::IsMalformed() const {
15760 return AbstractType::Handle(type()).IsMalformed(); 15765 return AbstractType::Handle(type()).IsMalformed();
15761 } 15766 }
15762 15767
15763 15768
15764 bool BoundedType::IsMalbounded() const { 15769 bool BoundedType::IsMalbounded() const {
15765 return AbstractType::Handle(type()).IsMalbounded(); 15770 return AbstractType::Handle(type()).IsMalbounded();
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
15948 NULL, 0, format, type_cstr, bound_cstr, type_param_cstr, cls_cstr) + 1; 15953 NULL, 0, format, type_cstr, bound_cstr, type_param_cstr, cls_cstr) + 1;
15949 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 15954 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
15950 OS::SNPrint( 15955 OS::SNPrint(
15951 chars, len, format, type_cstr, bound_cstr, type_param_cstr, cls_cstr); 15956 chars, len, format, type_cstr, bound_cstr, type_param_cstr, cls_cstr);
15952 return chars; 15957 return chars;
15953 } 15958 }
15954 15959
15955 15960
15956 void BoundedType::PrintJSONImpl(JSONStream* stream, bool ref) const { 15961 void BoundedType::PrintJSONImpl(JSONStream* stream, bool ref) const {
15957 JSONObject jsobj(stream); 15962 JSONObject jsobj(stream);
15958 AddTypeProperties(&jsobj, "BoundedType", JSONType(), ref);
15959 PrintSharedInstanceJSON(&jsobj, ref); 15963 PrintSharedInstanceJSON(&jsobj, ref);
15964 jsobj.AddProperty("kind", "BoundedType");
15960 jsobj.AddServiceId(*this); 15965 jsobj.AddServiceId(*this);
15961 const String& user_name = String::Handle(PrettyName()); 15966 const String& user_name = String::Handle(PrettyName());
15962 const String& vm_name = String::Handle(Name()); 15967 const String& vm_name = String::Handle(Name());
15963 AddNameProperties(&jsobj, user_name, vm_name); 15968 AddNameProperties(&jsobj, user_name, vm_name);
15964 if (ref) { 15969 if (ref) {
15965 return; 15970 return;
15966 } 15971 }
15967 jsobj.AddProperty("boundedType", AbstractType::Handle(type())); 15972 jsobj.AddProperty("type", AbstractType::Handle(type()));
15968 jsobj.AddProperty("upperBound", AbstractType::Handle(bound())); 15973 jsobj.AddProperty("bound", AbstractType::Handle(bound()));
15969 } 15974 }
15970 15975
15971 15976
15972 intptr_t MixinAppType::token_pos() const { 15977 intptr_t MixinAppType::token_pos() const {
15973 return AbstractType::Handle(MixinTypeAt(0)).token_pos(); 15978 return AbstractType::Handle(MixinTypeAt(0)).token_pos();
15974 } 15979 }
15975 15980
15976 15981
15977 intptr_t MixinAppType::Depth() const { 15982 intptr_t MixinAppType::Depth() const {
15978 return Array::Handle(mixin_types()).Length(); 15983 return Array::Handle(mixin_types()).Length();
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
16051 16056
16052 const char* Integer::ToCString() const { 16057 const char* Integer::ToCString() const {
16053 // Integer is an interface. No instances of Integer should exist. 16058 // Integer is an interface. No instances of Integer should exist.
16054 UNREACHABLE(); 16059 UNREACHABLE();
16055 return "Integer"; 16060 return "Integer";
16056 } 16061 }
16057 16062
16058 16063
16059 void Integer::PrintJSONImpl(JSONStream* stream, bool ref) const { 16064 void Integer::PrintJSONImpl(JSONStream* stream, bool ref) const {
16060 JSONObject jsobj(stream); 16065 JSONObject jsobj(stream);
16061 AddTypeProperties(&jsobj, "int", JSONType(), ref);
16062 PrintSharedInstanceJSON(&jsobj, ref); 16066 PrintSharedInstanceJSON(&jsobj, ref);
16067 jsobj.AddProperty("kind", "Int");
16063 jsobj.AddServiceId(*this); 16068 jsobj.AddServiceId(*this);
16064 jsobj.AddProperty("valueAsString", ToCString()); 16069 jsobj.AddProperty("valueAsString", ToCString());
16065 } 16070 }
16066 16071
16067 16072
16068 // Throw JavascriptIntegerOverflow exception. 16073 // Throw JavascriptIntegerOverflow exception.
16069 static void ThrowJavascriptIntegerOverflow(const Integer& i) { 16074 static void ThrowJavascriptIntegerOverflow(const Integer& i) {
16070 const Array& exc_args = Array::Handle(Array::New(1)); 16075 const Array& exc_args = Array::Handle(Array::New(1));
16071 const String& i_str = String::Handle(String::New(i.ToCString())); 16076 const String& i_str = String::Handle(String::New(i.ToCString()));
16072 exc_args.SetAt(0, i_str); 16077 exc_args.SetAt(0, i_str);
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
16480 // Calculate the size of the string. 16485 // Calculate the size of the string.
16481 intptr_t len = OS::SNPrint(NULL, 0, kFormat, Value()) + 1; 16486 intptr_t len = OS::SNPrint(NULL, 0, kFormat, Value()) + 1;
16482 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 16487 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
16483 OS::SNPrint(chars, len, kFormat, Value()); 16488 OS::SNPrint(chars, len, kFormat, Value());
16484 return chars; 16489 return chars;
16485 } 16490 }
16486 16491
16487 16492
16488 void Smi::PrintJSONImpl(JSONStream* stream, bool ref) const { 16493 void Smi::PrintJSONImpl(JSONStream* stream, bool ref) const {
16489 JSONObject jsobj(stream); 16494 JSONObject jsobj(stream);
16490 AddTypeProperties(&jsobj, "int", JSONType(), ref);
16491 PrintSharedInstanceJSON(&jsobj, ref); 16495 PrintSharedInstanceJSON(&jsobj, ref);
16496 jsobj.AddProperty("kind", "Int");
16492 jsobj.AddFixedServiceId("objects/int-%" Pd "", Value()); 16497 jsobj.AddFixedServiceId("objects/int-%" Pd "", Value());
16493 jsobj.AddPropertyF("valueAsString", "%" Pd "", Value()); 16498 jsobj.AddPropertyF("valueAsString", "%" Pd "", Value());
16494 } 16499 }
16495 16500
16496 16501
16497 RawClass* Smi::Class() { 16502 RawClass* Smi::Class() {
16498 return Isolate::Current()->object_store()->smi_class(); 16503 return Isolate::Current()->object_store()->smi_class();
16499 } 16504 }
16500 16505
16501 16506
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
16742 const int kBufferSize = 128; 16747 const int kBufferSize = 128;
16743 char* buffer = Isolate::Current()->current_zone()->Alloc<char>(kBufferSize); 16748 char* buffer = Isolate::Current()->current_zone()->Alloc<char>(kBufferSize);
16744 buffer[kBufferSize - 1] = '\0'; 16749 buffer[kBufferSize - 1] = '\0';
16745 DoubleToCString(value(), buffer, kBufferSize); 16750 DoubleToCString(value(), buffer, kBufferSize);
16746 return buffer; 16751 return buffer;
16747 } 16752 }
16748 16753
16749 16754
16750 void Double::PrintJSONImpl(JSONStream* stream, bool ref) const { 16755 void Double::PrintJSONImpl(JSONStream* stream, bool ref) const {
16751 JSONObject jsobj(stream); 16756 JSONObject jsobj(stream);
16752 // Suppress the fact that the internal vm name for this type is
16753 // "Double". Return "double" instead.
16754 AddTypeProperties(&jsobj, "double", "double", ref);
16755 PrintSharedInstanceJSON(&jsobj, ref); 16757 PrintSharedInstanceJSON(&jsobj, ref);
16758 jsobj.AddProperty("kind", "Double");
16756 jsobj.AddServiceId(*this); 16759 jsobj.AddServiceId(*this);
16757 jsobj.AddProperty("valueAsString", ToCString()); 16760 jsobj.AddProperty("valueAsString", ToCString());
16758 } 16761 }
16759 16762
16760 16763
16761 bool Bigint::Neg() const { 16764 bool Bigint::Neg() const {
16762 return Bool::Handle(neg()).value(); 16765 return Bool::Handle(neg()).value();
16763 } 16766 }
16764 16767
16765 16768
(...skipping 1558 matching lines...) Expand 10 before | Expand all | Expand 10 after
18324 JSONObject jsobj(stream); 18327 JSONObject jsobj(stream);
18325 if (raw() == Symbols::OptimizedOut().raw()) { 18328 if (raw() == Symbols::OptimizedOut().raw()) {
18326 // TODO(turnidge): This is a hack. The user could have this 18329 // TODO(turnidge): This is a hack. The user could have this
18327 // special string in their program. Fixing this involves updating 18330 // special string in their program. Fixing this involves updating
18328 // the debugging api a bit. 18331 // the debugging api a bit.
18329 jsobj.AddProperty("type", "Sentinel"); 18332 jsobj.AddProperty("type", "Sentinel");
18330 jsobj.AddProperty("kind", "OptimizedOut"); 18333 jsobj.AddProperty("kind", "OptimizedOut");
18331 jsobj.AddProperty("valueAsString", "<optimized out>"); 18334 jsobj.AddProperty("valueAsString", "<optimized out>");
18332 return; 18335 return;
18333 } 18336 }
18334 AddTypeProperties(&jsobj, "String", JSONType(), ref);
18335 PrintSharedInstanceJSON(&jsobj, ref); 18337 PrintSharedInstanceJSON(&jsobj, ref);
18338 jsobj.AddProperty("kind", "String");
18336 jsobj.AddServiceId(*this); 18339 jsobj.AddServiceId(*this);
18337 if (ref) { 18340 if (ref) {
18338 bool did_truncate = jsobj.AddPropertyStr("valueAsString", *this, 128); 18341 bool did_truncate = jsobj.AddPropertyStr("valueAsString", *this, 128);
18339 if (did_truncate) { 18342 if (did_truncate) {
18340 jsobj.AddProperty("valueAsStringIsTruncated", did_truncate); 18343 jsobj.AddProperty("valueAsStringIsTruncated", did_truncate);
18341 } 18344 }
18342 } else { 18345 } else {
18343 bool did_truncate = jsobj.AddPropertyStr("valueAsString", *this); 18346 bool did_truncate = jsobj.AddPropertyStr("valueAsString", *this);
18344 ASSERT(!did_truncate); 18347 ASSERT(!did_truncate);
18345 } 18348 }
(...skipping 887 matching lines...) Expand 10 before | Expand all | Expand 10 after
19233 19236
19234 19237
19235 const char* Bool::ToCString() const { 19238 const char* Bool::ToCString() const {
19236 return value() ? "true" : "false"; 19239 return value() ? "true" : "false";
19237 } 19240 }
19238 19241
19239 19242
19240 void Bool::PrintJSONImpl(JSONStream* stream, bool ref) const { 19243 void Bool::PrintJSONImpl(JSONStream* stream, bool ref) const {
19241 const char* str = ToCString(); 19244 const char* str = ToCString();
19242 JSONObject jsobj(stream); 19245 JSONObject jsobj(stream);
19243 // Suppress the fact that the internal vm name for this type is
19244 // "Bool". Return "bool" instead.
19245 AddTypeProperties(&jsobj, "bool", "bool", ref);
19246 PrintSharedInstanceJSON(&jsobj, ref); 19246 PrintSharedInstanceJSON(&jsobj, ref);
19247 jsobj.AddProperty("kind", "Bool");
19247 jsobj.AddFixedServiceId("objects/bool-%s", str); 19248 jsobj.AddFixedServiceId("objects/bool-%s", str);
19248 jsobj.AddPropertyF("valueAsString", "%s", str); 19249 jsobj.AddPropertyF("valueAsString", "%s", str);
19249 } 19250 }
19250 19251
19251 19252
19252 bool Array::CanonicalizeEquals(const Instance& other) const { 19253 bool Array::CanonicalizeEquals(const Instance& other) const {
19253 if (this->raw() == other.raw()) { 19254 if (this->raw() == other.raw()) {
19254 // Both handles point to the same raw instance. 19255 // Both handles point to the same raw instance.
19255 return true; 19256 return true;
19256 } 19257 }
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
19347 "_ImmutableList len:%" Pd : "_List len:%" Pd; 19348 "_ImmutableList len:%" Pd : "_List len:%" Pd;
19348 intptr_t len = OS::SNPrint(NULL, 0, format, Length()) + 1; 19349 intptr_t len = OS::SNPrint(NULL, 0, format, Length()) + 1;
19349 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 19350 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
19350 OS::SNPrint(chars, len, format, Length()); 19351 OS::SNPrint(chars, len, format, Length());
19351 return chars; 19352 return chars;
19352 } 19353 }
19353 19354
19354 19355
19355 void Array::PrintJSONImpl(JSONStream* stream, bool ref) const { 19356 void Array::PrintJSONImpl(JSONStream* stream, bool ref) const {
19356 JSONObject jsobj(stream); 19357 JSONObject jsobj(stream);
19357 AddTypeProperties(&jsobj, "List", JSONType(), ref);
19358 PrintSharedInstanceJSON(&jsobj, ref); 19358 PrintSharedInstanceJSON(&jsobj, ref);
19359 jsobj.AddProperty("kind", "List");
19359 jsobj.AddServiceId(*this); 19360 jsobj.AddServiceId(*this);
19360 jsobj.AddProperty("length", Length()); 19361 jsobj.AddProperty("length", Length());
19361 if (ref) { 19362 if (ref) {
19362 return; 19363 return;
19363 } 19364 }
19364 { 19365 {
19365 JSONArray jsarr(&jsobj, "elements"); 19366 JSONArray jsarr(&jsobj, "elements");
19366 for (intptr_t index = 0; index < Length(); index++) { 19367 for (intptr_t index = 0; index < Length(); index++) {
19367 JSONObject jselement(&jsarr); 19368 JSONObject jselement(&jsarr);
19368 jselement.AddProperty("index", index); 19369 jselement.AddProperty("index", index);
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
19593 intptr_t len = OS::SNPrint(NULL, 0, format, Length()) + 1; 19594 intptr_t len = OS::SNPrint(NULL, 0, format, Length()) + 1;
19594 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len); 19595 char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
19595 OS::SNPrint(chars, len, format, Length()); 19596 OS::SNPrint(chars, len, format, Length());
19596 return chars; 19597 return chars;
19597 } 19598 }
19598 19599
19599 19600
19600 void GrowableObjectArray::PrintJSONImpl(JSONStream* stream, 19601 void GrowableObjectArray::PrintJSONImpl(JSONStream* stream,
19601 bool ref) const { 19602 bool ref) const {
19602 JSONObject jsobj(stream); 19603 JSONObject jsobj(stream);
19603 AddTypeProperties(&jsobj, "List", JSONType(), ref);
19604 PrintSharedInstanceJSON(&jsobj, ref); 19604 PrintSharedInstanceJSON(&jsobj, ref);
19605 jsobj.AddProperty("kind", "List");
19605 jsobj.AddServiceId(*this); 19606 jsobj.AddServiceId(*this);
19606 jsobj.AddProperty("length", Length()); 19607 jsobj.AddProperty("length", Length());
19607 if (ref) { 19608 if (ref) {
19608 return; 19609 return;
19609 } 19610 }
19610 { 19611 {
19611 JSONArray jsarr(&jsobj, "elements"); 19612 JSONArray jsarr(&jsobj, "elements");
19612 for (intptr_t index = 0; index < Length(); index++) { 19613 for (intptr_t index = 0; index < Length(); index++) {
19613 JSONObject jselement(&jsarr); 19614 JSONObject jselement(&jsarr);
19614 jselement.AddProperty("index", index); 19615 jselement.AddProperty("index", index);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
19705 } 19706 }
19706 19707
19707 19708
19708 const char* LinkedHashMap::ToCString() const { 19709 const char* LinkedHashMap::ToCString() const {
19709 // TODO(koda): Print key/value pairs. 19710 // TODO(koda): Print key/value pairs.
19710 return "_LinkedHashMap"; 19711 return "_LinkedHashMap";
19711 } 19712 }
19712 19713
19713 19714
19714 void LinkedHashMap::PrintJSONImpl(JSONStream* stream, bool ref) const { 19715 void LinkedHashMap::PrintJSONImpl(JSONStream* stream, bool ref) const {
19716 JSONObject jsobj(stream);
19717 PrintSharedInstanceJSON(&jsobj, ref);
19718 jsobj.AddProperty("kind", "Map");
19719 jsobj.AddServiceId(*this);
19720 // TODO(koda): Print length.
19721 if (ref) {
19722 return;
19723 }
19715 // TODO(koda): Print key/value pairs. 19724 // TODO(koda): Print key/value pairs.
19716 Instance::PrintJSONImpl(stream, ref);
19717 } 19725 }
19718 19726
19719 19727
19720 RawFloat32x4* Float32x4::New(float v0, float v1, float v2, float v3, 19728 RawFloat32x4* Float32x4::New(float v0, float v1, float v2, float v3,
19721 Heap::Space space) { 19729 Heap::Space space) {
19722 ASSERT(Isolate::Current()->object_store()->float32x4_class() != 19730 ASSERT(Isolate::Current()->object_store()->float32x4_class() !=
19723 Class::null()); 19731 Class::null());
19724 Float32x4& result = Float32x4::Handle(); 19732 Float32x4& result = Float32x4::Handle();
19725 { 19733 {
19726 RawObject* raw = Object::Allocate(Float32x4::kClassId, 19734 RawObject* raw = Object::Allocate(Float32x4::kClassId,
(...skipping 854 matching lines...) Expand 10 before | Expand all | Expand 10 after
20581 } 20589 }
20582 20590
20583 20591
20584 const char* WeakProperty::ToCString() const { 20592 const char* WeakProperty::ToCString() const {
20585 return "_WeakProperty"; 20593 return "_WeakProperty";
20586 } 20594 }
20587 20595
20588 20596
20589 void WeakProperty::PrintJSONImpl(JSONStream* stream, bool ref) const { 20597 void WeakProperty::PrintJSONImpl(JSONStream* stream, bool ref) const {
20590 JSONObject jsobj(stream); 20598 JSONObject jsobj(stream);
20591 AddTypeProperties(&jsobj, "Instance", JSONType(), ref);
20592 PrintSharedInstanceJSON(&jsobj, ref); 20599 PrintSharedInstanceJSON(&jsobj, ref);
20600 jsobj.AddProperty("kind", "WeakProperty");
20593 jsobj.AddServiceId(*this); 20601 jsobj.AddServiceId(*this);
20594 if (ref) { 20602 if (ref) {
20595 return; 20603 return;
20596 } 20604 }
20597 20605
20598 const Object& key_handle = Object::Handle(key()); 20606 const Object& key_handle = Object::Handle(key());
20599 jsobj.AddProperty("key", key_handle); 20607 jsobj.AddProperty("propertyKey", key_handle);
20600 const Object& value_handle = Object::Handle(value()); 20608 const Object& value_handle = Object::Handle(value());
20601 jsobj.AddProperty("value", value_handle); 20609 jsobj.AddProperty("propertyValue", value_handle);
20602 } 20610 }
20603 20611
20604 RawAbstractType* MirrorReference::GetAbstractTypeReferent() const { 20612 RawAbstractType* MirrorReference::GetAbstractTypeReferent() const {
20605 ASSERT(Object::Handle(referent()).IsAbstractType()); 20613 ASSERT(Object::Handle(referent()).IsAbstractType());
20606 return AbstractType::Cast(Object::Handle(referent())).raw(); 20614 return AbstractType::Cast(Object::Handle(referent())).raw();
20607 } 20615 }
20608 20616
20609 20617
20610 RawClass* MirrorReference::GetClassReferent() const { 20618 RawClass* MirrorReference::GetClassReferent() const {
20611 ASSERT(Object::Handle(referent()).IsClass()); 20619 ASSERT(Object::Handle(referent()).IsClass());
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
20652 } 20660 }
20653 20661
20654 20662
20655 const char* MirrorReference::ToCString() const { 20663 const char* MirrorReference::ToCString() const {
20656 return "_MirrorReference"; 20664 return "_MirrorReference";
20657 } 20665 }
20658 20666
20659 20667
20660 void MirrorReference::PrintJSONImpl(JSONStream* stream, bool ref) const { 20668 void MirrorReference::PrintJSONImpl(JSONStream* stream, bool ref) const {
20661 JSONObject jsobj(stream); 20669 JSONObject jsobj(stream);
20662 AddTypeProperties(&jsobj, "Instance", JSONType(), ref);
20663 PrintSharedInstanceJSON(&jsobj, ref); 20670 PrintSharedInstanceJSON(&jsobj, ref);
20671 jsobj.AddProperty("kind", "MirrorReference");
20664 jsobj.AddServiceId(*this); 20672 jsobj.AddServiceId(*this);
20665 20673
20666 if (ref) { 20674 if (ref) {
20667 return; 20675 return;
20668 } 20676 }
20669 20677
20670 const Object& referent_handle = Object::Handle(referent()); 20678 const Object& referent_handle = Object::Handle(referent());
20671 jsobj.AddProperty("referent", referent_handle); 20679 jsobj.AddProperty("mirrorReferent", referent_handle);
20672 } 20680 }
20673 20681
20674 20682
20675 void UserTag::MakeActive() const { 20683 void UserTag::MakeActive() const {
20676 Isolate* isolate = Isolate::Current(); 20684 Isolate* isolate = Isolate::Current();
20677 ASSERT(isolate != NULL); 20685 ASSERT(isolate != NULL);
20678 isolate->set_current_tag(*this); 20686 isolate->set_current_tag(*this);
20679 } 20687 }
20680 20688
20681 20689
(...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after
20799 return tag_label.ToCString(); 20807 return tag_label.ToCString();
20800 } 20808 }
20801 20809
20802 20810
20803 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { 20811 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const {
20804 Instance::PrintJSONImpl(stream, ref); 20812 Instance::PrintJSONImpl(stream, ref);
20805 } 20813 }
20806 20814
20807 20815
20808 } // namespace dart 20816 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/json_test.cc ('k') | runtime/vm/object_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698