| 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 19161 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 19172 | 19172 | 
| 19173   // Update the size in the header field and length of the array object. | 19173   // Update the size in the header field and length of the array object. | 
| 19174   uword tags = array.raw_ptr()->tags_; | 19174   uword tags = array.raw_ptr()->tags_; | 
| 19175   ASSERT(kArrayCid == RawObject::ClassIdTag::decode(tags)); | 19175   ASSERT(kArrayCid == RawObject::ClassIdTag::decode(tags)); | 
| 19176   uword old_tags; | 19176   uword old_tags; | 
| 19177   do { | 19177   do { | 
| 19178     old_tags = tags; | 19178     old_tags = tags; | 
| 19179     uword new_tags = RawObject::SizeTag::update(used_size, old_tags); | 19179     uword new_tags = RawObject::SizeTag::update(used_size, old_tags); | 
| 19180     tags = array.CompareAndSwapTags(old_tags, new_tags); | 19180     tags = array.CompareAndSwapTags(old_tags, new_tags); | 
| 19181   } while (tags != old_tags); | 19181   } while (tags != old_tags); | 
|  | 19182   // TODO(22501): For the heap to remain walkable by the sweeper, it must | 
|  | 19183   // observe the creation of the filler object no later than the new length | 
|  | 19184   // of the array. This assumption holds on ia32/x64 or if the CAS above is a | 
|  | 19185   // full memory barrier. | 
|  | 19186   // | 
|  | 19187   // Also, between the CAS of the header above and the SetLength below, | 
|  | 19188   // the array is temporarily in an inconsistent state. The header is considered | 
|  | 19189   // the overriding source of object size by RawObject::Size, but the ASSERTs | 
|  | 19190   // in RawObject::SizeFromClass must handle this special case. | 
| 19182   array.SetLength(used_len); | 19191   array.SetLength(used_len); | 
| 19183 | 19192 | 
| 19184   // Null the GrowableObjectArray, we are removing it's backing array. | 19193   // Null the GrowableObjectArray, we are removing its backing array. | 
| 19185   growable_array.SetLength(0); | 19194   growable_array.SetLength(0); | 
| 19186   growable_array.SetData(Object::empty_array()); | 19195   growable_array.SetData(Object::empty_array()); | 
| 19187 | 19196 | 
| 19188   return array.raw(); | 19197   return array.raw(); | 
| 19189 } | 19198 } | 
| 19190 | 19199 | 
| 19191 | 19200 | 
| 19192 bool Array::CheckAndCanonicalizeFields(const char** error_str) const { | 19201 bool Array::CheckAndCanonicalizeFields(const char** error_str) const { | 
| 19193   Object& obj = Object::Handle(); | 19202   Object& obj = Object::Handle(); | 
| 19194   // Iterate over all elements, canonicalize numbers and strings, expect all | 19203   // Iterate over all elements, canonicalize numbers and strings, expect all | 
| (...skipping 1420 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 20615   return tag_label.ToCString(); | 20624   return tag_label.ToCString(); | 
| 20616 } | 20625 } | 
| 20617 | 20626 | 
| 20618 | 20627 | 
| 20619 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { | 20628 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { | 
| 20620   Instance::PrintJSONImpl(stream, ref); | 20629   Instance::PrintJSONImpl(stream, ref); | 
| 20621 } | 20630 } | 
| 20622 | 20631 | 
| 20623 | 20632 | 
| 20624 }  // namespace dart | 20633 }  // namespace dart | 
| OLD | NEW | 
|---|