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

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

Issue 14307013: - Remember the fact that an object has been added to the (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « runtime/vm/isolate.cc ('k') | runtime/vm/object.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 #ifndef VM_OBJECT_H_ 5 #ifndef VM_OBJECT_H_
6 #define VM_OBJECT_H_ 6 #define VM_OBJECT_H_
7 7
8 #include "include/dart_api.h" 8 #include "include/dart_api.h"
9 #include "platform/assert.h" 9 #include "platform/assert.h"
10 #include "platform/utils.h" 10 #include "platform/utils.h"
(...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 uword this_addr = RawObject::ToAddr(raw()); 433 uword this_addr = RawObject::ToAddr(raw());
434 return (addr >= this_addr) && (addr < (this_addr + this_size)); 434 return (addr >= this_addr) && (addr < (this_addr + this_size));
435 } 435 }
436 436
437 template<typename type> void StorePointer(type* addr, type value) const { 437 template<typename type> void StorePointer(type* addr, type value) const {
438 // Ensure that this object contains the addr. 438 // Ensure that this object contains the addr.
439 ASSERT(Contains(reinterpret_cast<uword>(addr))); 439 ASSERT(Contains(reinterpret_cast<uword>(addr)));
440 *addr = value; 440 *addr = value;
441 // Filter stores based on source and target. 441 // Filter stores based on source and target.
442 if (!value->IsHeapObject()) return; 442 if (!value->IsHeapObject()) return;
443 if (value->IsNewObject() && raw()->IsOldObject()) { 443 if (value->IsNewObject() && raw()->IsOldObject() &&
444 uword ptr = reinterpret_cast<uword>(raw()); 444 !raw()->IsRemembered()) {
445 Isolate::Current()->store_buffer()->AddPointer(ptr); 445 raw()->SetRememberedBit();
446 Isolate::Current()->store_buffer()->AddObject(raw());
446 } 447 }
447 } 448 }
448 449
449 RawObject* raw_; // The raw object reference. 450 RawObject* raw_; // The raw object reference.
450 451
451 private: 452 private:
452 static void InitializeObject(uword address, intptr_t id, intptr_t size); 453 static void InitializeObject(uword address, intptr_t id, intptr_t size);
453 454
454 static void RegisterClass(const Class& cls, 455 static void RegisterClass(const Class& cls,
455 const String& name, 456 const String& name,
(...skipping 4510 matching lines...) Expand 10 before | Expand all | Expand 10 after
4966 intptr_t data_size = data()->Size(); 4967 intptr_t data_size = data()->Size();
4967 uword data_addr = RawObject::ToAddr(data()); 4968 uword data_addr = RawObject::ToAddr(data());
4968 return (addr >= data_addr) && (addr < (data_addr + data_size)); 4969 return (addr >= data_addr) && (addr < (data_addr + data_size));
4969 } 4970 }
4970 void DataStorePointer(RawObject** addr, RawObject* value) const { 4971 void DataStorePointer(RawObject** addr, RawObject* value) const {
4971 // Ensure that the backing array object contains the addr. 4972 // Ensure that the backing array object contains the addr.
4972 ASSERT(DataContains(reinterpret_cast<uword>(addr))); 4973 ASSERT(DataContains(reinterpret_cast<uword>(addr)));
4973 *addr = value; 4974 *addr = value;
4974 // Filter stores based on source and target. 4975 // Filter stores based on source and target.
4975 if (!value->IsHeapObject()) return; 4976 if (!value->IsHeapObject()) return;
4976 if (value->IsNewObject() && data()->IsOldObject()) { 4977 if (value->IsNewObject() && data()->IsOldObject() &&
4977 uword ptr = reinterpret_cast<uword>(data()); 4978 !data()->IsRemembered()) {
4978 Isolate::Current()->store_buffer()->AddPointer(ptr); 4979 data()->SetRememberedBit();
4980 Isolate::Current()->store_buffer()->AddObject(data());
4979 } 4981 }
4980 } 4982 }
4981 4983
4982 static const int kDefaultInitialCapacity = 4; 4984 static const int kDefaultInitialCapacity = 4;
4983 4985
4984 FINAL_HEAP_OBJECT_IMPLEMENTATION(GrowableObjectArray, Instance); 4986 FINAL_HEAP_OBJECT_IMPLEMENTATION(GrowableObjectArray, Instance);
4985 friend class Array; 4987 friend class Array;
4986 friend class Class; 4988 friend class Class;
4987 }; 4989 };
4988 4990
(...skipping 732 matching lines...) Expand 10 before | Expand all | Expand 10 after
5721 5723
5722 5724
5723 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, 5725 RawObject* MegamorphicCache::GetTargetFunction(const Array& array,
5724 intptr_t index) { 5726 intptr_t index) {
5725 return array.At((index * kEntryLength) + kTargetFunctionIndex); 5727 return array.At((index * kEntryLength) + kTargetFunctionIndex);
5726 } 5728 }
5727 5729
5728 } // namespace dart 5730 } // namespace dart
5729 5731
5730 #endif // VM_OBJECT_H_ 5732 #endif // VM_OBJECT_H_
OLDNEW
« no previous file with comments | « runtime/vm/isolate.cc ('k') | runtime/vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698