| 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 1699 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1710 NoSafepointScope no_safepoint; | 1710 NoSafepointScope no_safepoint; |
| 1711 InitializeObject(address, cls_id, size); | 1711 InitializeObject(address, cls_id, size); |
| 1712 RawObject* raw_obj = reinterpret_cast<RawObject*>(address + kHeapObjectTag); | 1712 RawObject* raw_obj = reinterpret_cast<RawObject*>(address + kHeapObjectTag); |
| 1713 ASSERT(cls_id == RawObject::ClassIdTag::decode(raw_obj->ptr()->tags_)); | 1713 ASSERT(cls_id == RawObject::ClassIdTag::decode(raw_obj->ptr()->tags_)); |
| 1714 return raw_obj; | 1714 return raw_obj; |
| 1715 } | 1715 } |
| 1716 | 1716 |
| 1717 | 1717 |
| 1718 class StoreBufferUpdateVisitor : public ObjectPointerVisitor { | 1718 class StoreBufferUpdateVisitor : public ObjectPointerVisitor { |
| 1719 public: | 1719 public: |
| 1720 explicit StoreBufferUpdateVisitor(Isolate* isolate, RawObject* obj) : | 1720 explicit StoreBufferUpdateVisitor(Thread* thread, RawObject* obj) : |
| 1721 ObjectPointerVisitor(isolate), old_obj_(obj) { | 1721 ObjectPointerVisitor(thread->isolate()), thread_(thread), old_obj_(obj) { |
| 1722 ASSERT(old_obj_->IsOldObject()); | 1722 ASSERT(old_obj_->IsOldObject()); |
| 1723 } | 1723 } |
| 1724 | 1724 |
| 1725 void VisitPointers(RawObject** first, RawObject** last) { | 1725 void VisitPointers(RawObject** first, RawObject** last) { |
| 1726 for (RawObject** curr = first; curr <= last; ++curr) { | 1726 for (RawObject** curr = first; curr <= last; ++curr) { |
| 1727 RawObject* raw_obj = *curr; | 1727 RawObject* raw_obj = *curr; |
| 1728 if (raw_obj->IsHeapObject() && raw_obj->IsNewObject()) { | 1728 if (raw_obj->IsHeapObject() && raw_obj->IsNewObject()) { |
| 1729 old_obj_->SetRememberedBit(); | 1729 old_obj_->SetRememberedBit(); |
| 1730 isolate()->store_buffer()->AddObject(old_obj_); | 1730 thread_->StoreBufferAddObject(old_obj_); |
| 1731 // Remembered this object. There is no need to continue searching. | 1731 // Remembered this object. There is no need to continue searching. |
| 1732 return; | 1732 return; |
| 1733 } | 1733 } |
| 1734 } | 1734 } |
| 1735 } | 1735 } |
| 1736 | 1736 |
| 1737 private: | 1737 private: |
| 1738 Thread* thread_; |
| 1738 RawObject* old_obj_; | 1739 RawObject* old_obj_; |
| 1739 | 1740 |
| 1740 DISALLOW_COPY_AND_ASSIGN(StoreBufferUpdateVisitor); | 1741 DISALLOW_COPY_AND_ASSIGN(StoreBufferUpdateVisitor); |
| 1741 }; | 1742 }; |
| 1742 | 1743 |
| 1743 | 1744 |
| 1744 bool Object::IsReadOnlyHandle() const { | 1745 bool Object::IsReadOnlyHandle() const { |
| 1745 return Dart::IsReadOnlyHandle(reinterpret_cast<uword>(this)); | 1746 return Dart::IsReadOnlyHandle(reinterpret_cast<uword>(this)); |
| 1746 } | 1747 } |
| 1747 | 1748 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 1769 size - kHeaderSizeInBytes); | 1770 size - kHeaderSizeInBytes); |
| 1770 VerifiedMemory::Accept(clone_addr, size); | 1771 VerifiedMemory::Accept(clone_addr, size); |
| 1771 // Add clone to store buffer, if needed. | 1772 // Add clone to store buffer, if needed. |
| 1772 if (!raw_clone->IsOldObject()) { | 1773 if (!raw_clone->IsOldObject()) { |
| 1773 // No need to remember an object in new space. | 1774 // No need to remember an object in new space. |
| 1774 return raw_clone; | 1775 return raw_clone; |
| 1775 } else if (orig.raw()->IsOldObject() && !orig.raw()->IsRemembered()) { | 1776 } else if (orig.raw()->IsOldObject() && !orig.raw()->IsRemembered()) { |
| 1776 // Old original doesn't need to be remembered, so neither does the clone. | 1777 // Old original doesn't need to be remembered, so neither does the clone. |
| 1777 return raw_clone; | 1778 return raw_clone; |
| 1778 } | 1779 } |
| 1779 StoreBufferUpdateVisitor visitor(Isolate::Current(), raw_clone); | 1780 StoreBufferUpdateVisitor visitor(Thread::Current(), raw_clone); |
| 1780 raw_clone->VisitPointers(&visitor); | 1781 raw_clone->VisitPointers(&visitor); |
| 1781 return raw_clone; | 1782 return raw_clone; |
| 1782 } | 1783 } |
| 1783 | 1784 |
| 1784 | 1785 |
| 1785 RawString* Class::Name() const { | 1786 RawString* Class::Name() const { |
| 1786 // TODO(turnidge): This assert fails for the fake kFreeListElement class. | 1787 // TODO(turnidge): This assert fails for the fake kFreeListElement class. |
| 1787 // Fix this. | 1788 // Fix this. |
| 1788 ASSERT(raw_ptr()->name_ != String::null()); | 1789 ASSERT(raw_ptr()->name_ != String::null()); |
| 1789 return raw_ptr()->name_; | 1790 return raw_ptr()->name_; |
| (...skipping 19061 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 20851 return tag_label.ToCString(); | 20852 return tag_label.ToCString(); |
| 20852 } | 20853 } |
| 20853 | 20854 |
| 20854 | 20855 |
| 20855 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { | 20856 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 20856 Instance::PrintJSONImpl(stream, ref); | 20857 Instance::PrintJSONImpl(stream, ref); |
| 20857 } | 20858 } |
| 20858 | 20859 |
| 20859 | 20860 |
| 20860 } // namespace dart | 20861 } // namespace dart |
| OLD | NEW |