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 20068 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
20079 | 20079 |
20080 void Array::PrintJSONImpl(JSONStream* stream, bool ref) const { | 20080 void Array::PrintJSONImpl(JSONStream* stream, bool ref) const { |
20081 JSONObject jsobj(stream); | 20081 JSONObject jsobj(stream); |
20082 PrintSharedInstanceJSON(&jsobj, ref); | 20082 PrintSharedInstanceJSON(&jsobj, ref); |
20083 jsobj.AddProperty("kind", "List"); | 20083 jsobj.AddProperty("kind", "List"); |
20084 jsobj.AddServiceId(*this); | 20084 jsobj.AddServiceId(*this); |
20085 jsobj.AddProperty("length", Length()); | 20085 jsobj.AddProperty("length", Length()); |
20086 if (ref) { | 20086 if (ref) { |
20087 return; | 20087 return; |
20088 } | 20088 } |
| 20089 intptr_t offset; |
| 20090 intptr_t count; |
| 20091 stream->ComputeOffsetAndCount(Length(), &offset, &count); |
| 20092 if (offset > 0) { |
| 20093 jsobj.AddProperty("offset", offset); |
| 20094 } |
| 20095 if (count < Length()) { |
| 20096 jsobj.AddProperty("count", count); |
| 20097 } |
| 20098 intptr_t limit = offset + count; |
| 20099 ASSERT(limit <= Length()); |
20089 { | 20100 { |
20090 JSONArray jsarr(&jsobj, "elements"); | 20101 JSONArray jsarr(&jsobj, "elements"); |
20091 Object& element = Object::Handle(); | 20102 Object& element = Object::Handle(); |
20092 for (intptr_t index = 0; index < Length(); index++) { | 20103 for (intptr_t index = offset; index < limit; index++) { |
20093 element = At(index); | 20104 element = At(index); |
20094 jsarr.AddValue(element); | 20105 jsarr.AddValue(element); |
20095 } | 20106 } |
20096 } | 20107 } |
20097 } | 20108 } |
20098 | 20109 |
20099 | 20110 |
20100 RawArray* Array::Grow(const Array& source, | 20111 RawArray* Array::Grow(const Array& source, |
20101 intptr_t new_length, | 20112 intptr_t new_length, |
20102 Heap::Space space) { | 20113 Heap::Space space) { |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
20317 void GrowableObjectArray::PrintJSONImpl(JSONStream* stream, | 20328 void GrowableObjectArray::PrintJSONImpl(JSONStream* stream, |
20318 bool ref) const { | 20329 bool ref) const { |
20319 JSONObject jsobj(stream); | 20330 JSONObject jsobj(stream); |
20320 PrintSharedInstanceJSON(&jsobj, ref); | 20331 PrintSharedInstanceJSON(&jsobj, ref); |
20321 jsobj.AddProperty("kind", "List"); | 20332 jsobj.AddProperty("kind", "List"); |
20322 jsobj.AddServiceId(*this); | 20333 jsobj.AddServiceId(*this); |
20323 jsobj.AddProperty("length", Length()); | 20334 jsobj.AddProperty("length", Length()); |
20324 if (ref) { | 20335 if (ref) { |
20325 return; | 20336 return; |
20326 } | 20337 } |
| 20338 intptr_t offset; |
| 20339 intptr_t count; |
| 20340 stream->ComputeOffsetAndCount(Length(), &offset, &count); |
| 20341 if (offset > 0) { |
| 20342 jsobj.AddProperty("offset", offset); |
| 20343 } |
| 20344 if (count < Length()) { |
| 20345 jsobj.AddProperty("count", count); |
| 20346 } |
| 20347 intptr_t limit = offset + count; |
| 20348 ASSERT(limit <= Length()); |
20327 { | 20349 { |
20328 JSONArray jsarr(&jsobj, "elements"); | 20350 JSONArray jsarr(&jsobj, "elements"); |
20329 Object& element = Object::Handle(); | 20351 Object& element = Object::Handle(); |
20330 for (intptr_t index = 0; index < Length(); index++) { | 20352 for (intptr_t index = offset; index < limit; index++) { |
20331 element = At(index); | 20353 element = At(index); |
20332 jsarr.AddValue(element); | 20354 jsarr.AddValue(element); |
20333 } | 20355 } |
20334 } | 20356 } |
20335 } | 20357 } |
20336 | 20358 |
20337 | 20359 |
20338 // Equivalent to Dart's operator "==" and hashCode. | 20360 // Equivalent to Dart's operator "==" and hashCode. |
20339 class DefaultHashTraits { | 20361 class DefaultHashTraits { |
20340 public: | 20362 public: |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
20423 | 20445 |
20424 void LinkedHashMap::PrintJSONImpl(JSONStream* stream, bool ref) const { | 20446 void LinkedHashMap::PrintJSONImpl(JSONStream* stream, bool ref) const { |
20425 JSONObject jsobj(stream); | 20447 JSONObject jsobj(stream); |
20426 PrintSharedInstanceJSON(&jsobj, ref); | 20448 PrintSharedInstanceJSON(&jsobj, ref); |
20427 jsobj.AddProperty("kind", "Map"); | 20449 jsobj.AddProperty("kind", "Map"); |
20428 jsobj.AddServiceId(*this); | 20450 jsobj.AddServiceId(*this); |
20429 jsobj.AddProperty("length", Length()); | 20451 jsobj.AddProperty("length", Length()); |
20430 if (ref) { | 20452 if (ref) { |
20431 return; | 20453 return; |
20432 } | 20454 } |
| 20455 intptr_t offset; |
| 20456 intptr_t count; |
| 20457 stream->ComputeOffsetAndCount(Length(), &offset, &count); |
| 20458 if (offset > 0) { |
| 20459 jsobj.AddProperty("offset", offset); |
| 20460 } |
| 20461 if (count < Length()) { |
| 20462 jsobj.AddProperty("count", count); |
| 20463 } |
| 20464 intptr_t limit = offset + count; |
| 20465 ASSERT(limit <= Length()); |
20433 { | 20466 { |
20434 JSONArray jsarr(&jsobj, "associations"); | 20467 JSONArray jsarr(&jsobj, "associations"); |
20435 Object& object = Object::Handle(); | 20468 Object& object = Object::Handle(); |
20436 LinkedHashMap::Iterator iterator(*this); | 20469 LinkedHashMap::Iterator iterator(*this); |
20437 while (iterator.MoveNext()) { | 20470 int i = 0; |
20438 JSONObject jsassoc(&jsarr); | 20471 while (iterator.MoveNext() && i < limit) { |
20439 object = iterator.CurrentKey(); | 20472 if (i >= offset) { |
20440 jsassoc.AddProperty("key", object); | 20473 JSONObject jsassoc(&jsarr); |
20441 object = iterator.CurrentValue(); | 20474 object = iterator.CurrentKey(); |
20442 jsassoc.AddProperty("value", object); | 20475 jsassoc.AddProperty("key", object); |
| 20476 object = iterator.CurrentValue(); |
| 20477 jsassoc.AddProperty("value", object); |
| 20478 } |
| 20479 i++; |
20443 } | 20480 } |
20444 } | 20481 } |
20445 } | 20482 } |
20446 | 20483 |
20447 | 20484 |
20448 RawFloat32x4* Float32x4::New(float v0, float v1, float v2, float v3, | 20485 RawFloat32x4* Float32x4::New(float v0, float v1, float v2, float v3, |
20449 Heap::Space space) { | 20486 Heap::Space space) { |
20450 ASSERT(Isolate::Current()->object_store()->float32x4_class() != | 20487 ASSERT(Isolate::Current()->object_store()->float32x4_class() != |
20451 Class::null()); | 20488 Class::null()); |
20452 Float32x4& result = Float32x4::Handle(); | 20489 Float32x4& result = Float32x4::Handle(); |
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
20824 JSONObject jsobj(stream); | 20861 JSONObject jsobj(stream); |
20825 PrintSharedInstanceJSON(&jsobj, ref); | 20862 PrintSharedInstanceJSON(&jsobj, ref); |
20826 const Class& cls = Class::Handle(clazz()); | 20863 const Class& cls = Class::Handle(clazz()); |
20827 const String& kind = String::Handle(cls.UserVisibleName()); | 20864 const String& kind = String::Handle(cls.UserVisibleName()); |
20828 jsobj.AddProperty("kind", kind.ToCString()); | 20865 jsobj.AddProperty("kind", kind.ToCString()); |
20829 jsobj.AddServiceId(*this); | 20866 jsobj.AddServiceId(*this); |
20830 jsobj.AddProperty("length", Length()); | 20867 jsobj.AddProperty("length", Length()); |
20831 if (ref) { | 20868 if (ref) { |
20832 return; | 20869 return; |
20833 } | 20870 } |
20834 | 20871 intptr_t offset; |
20835 { | 20872 intptr_t count; |
| 20873 stream->ComputeOffsetAndCount(Length(), &offset, &count); |
| 20874 if (offset > 0) { |
| 20875 jsobj.AddProperty("offset", offset); |
| 20876 } |
| 20877 if (count < Length()) { |
| 20878 jsobj.AddProperty("count", count); |
| 20879 } |
| 20880 if (count == 0) { |
| 20881 jsobj.AddProperty("bytes", ""); |
| 20882 } else { |
20836 NoSafepointScope no_safepoint; | 20883 NoSafepointScope no_safepoint; |
20837 jsobj.AddPropertyBase64("bytes", | 20884 jsobj.AddPropertyBase64("bytes", |
20838 reinterpret_cast<const uint8_t*>(DataAddr(0)), | 20885 reinterpret_cast<const uint8_t*>( |
20839 LengthInBytes()); | 20886 DataAddr(offset * ElementSizeInBytes())), |
| 20887 count * ElementSizeInBytes()); |
20840 } | 20888 } |
20841 } | 20889 } |
20842 | 20890 |
20843 | 20891 |
20844 FinalizablePersistentHandle* ExternalTypedData::AddFinalizer( | 20892 FinalizablePersistentHandle* ExternalTypedData::AddFinalizer( |
20845 void* peer, Dart_WeakPersistentHandleFinalizer callback) const { | 20893 void* peer, Dart_WeakPersistentHandleFinalizer callback) const { |
20846 return dart::AddFinalizer(*this, peer, callback); | 20894 return dart::AddFinalizer(*this, peer, callback); |
20847 } | 20895 } |
20848 | 20896 |
20849 | 20897 |
(...skipping 25 matching lines...) Expand all Loading... |
20875 JSONObject jsobj(stream); | 20923 JSONObject jsobj(stream); |
20876 PrintSharedInstanceJSON(&jsobj, ref); | 20924 PrintSharedInstanceJSON(&jsobj, ref); |
20877 const Class& cls = Class::Handle(clazz()); | 20925 const Class& cls = Class::Handle(clazz()); |
20878 const String& kind = String::Handle(cls.UserVisibleName()); | 20926 const String& kind = String::Handle(cls.UserVisibleName()); |
20879 jsobj.AddProperty("kind", kind.ToCString()); | 20927 jsobj.AddProperty("kind", kind.ToCString()); |
20880 jsobj.AddServiceId(*this); | 20928 jsobj.AddServiceId(*this); |
20881 jsobj.AddProperty("length", Length()); | 20929 jsobj.AddProperty("length", Length()); |
20882 if (ref) { | 20930 if (ref) { |
20883 return; | 20931 return; |
20884 } | 20932 } |
20885 | 20933 intptr_t offset; |
20886 { | 20934 intptr_t count; |
| 20935 stream->ComputeOffsetAndCount(Length(), &offset, &count); |
| 20936 if (offset > 0) { |
| 20937 jsobj.AddProperty("offset", offset); |
| 20938 } |
| 20939 if (count < Length()) { |
| 20940 jsobj.AddProperty("count", count); |
| 20941 } |
| 20942 if (count == 0) { |
| 20943 jsobj.AddProperty("bytes", ""); |
| 20944 } else { |
20887 NoSafepointScope no_safepoint; | 20945 NoSafepointScope no_safepoint; |
20888 jsobj.AddPropertyBase64("bytes", | 20946 jsobj.AddPropertyBase64("bytes", |
20889 reinterpret_cast<const uint8_t*>(DataAddr(0)), | 20947 reinterpret_cast<const uint8_t*>( |
20890 LengthInBytes()); | 20948 DataAddr(offset * ElementSizeInBytes())), |
| 20949 count * ElementSizeInBytes()); |
20891 } | 20950 } |
20892 } | 20951 } |
20893 | 20952 |
20894 | 20953 |
20895 RawCapability* Capability::New(uint64_t id, Heap::Space space) { | 20954 RawCapability* Capability::New(uint64_t id, Heap::Space space) { |
20896 Capability& result = Capability::Handle(); | 20955 Capability& result = Capability::Handle(); |
20897 { | 20956 { |
20898 RawObject* raw = Object::Allocate(Capability::kClassId, | 20957 RawObject* raw = Object::Allocate(Capability::kClassId, |
20899 Capability::InstanceSize(), | 20958 Capability::InstanceSize(), |
20900 space); | 20959 space); |
(...skipping 671 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
21572 return tag_label.ToCString(); | 21631 return tag_label.ToCString(); |
21573 } | 21632 } |
21574 | 21633 |
21575 | 21634 |
21576 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { | 21635 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { |
21577 Instance::PrintJSONImpl(stream, ref); | 21636 Instance::PrintJSONImpl(stream, ref); |
21578 } | 21637 } |
21579 | 21638 |
21580 | 21639 |
21581 } // namespace dart | 21640 } // namespace dart |
OLD | NEW |