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

Side by Side Diff: vm/freelist.h

Issue 9008060: - Fix build. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 years, 11 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 | « no previous file | no next file » | 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) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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_FREELIST_H_ 5 #ifndef VM_FREELIST_H_
6 #define VM_FREELIST_H_ 6 #define VM_FREELIST_H_
7 7
8 #include "vm/allocation.h" 8 #include "vm/allocation.h"
9 #include "vm/assert.h" 9 #include "vm/assert.h"
10 #include "vm/raw_object.h" 10 #include "vm/raw_object.h"
11 11
12 namespace dart { 12 namespace dart {
13 13
14 // FreeListElement describes a freelist element that has the same size 14 // FreeListElement describes a freelist element that has the same size
15 // as the smallest raw object. It uses the class_ field to point to a fake map 15 // as the smallest raw object. It uses the class_ field to point to a fake map
16 // to enable basic traversing of the heap and to identify the type of freelist 16 // to enable basic traversing of the heap and to identify the type of freelist
17 // element. It reuses the second word of the raw object to keep a next_ 17 // element. It reuses the second word of the raw object to keep a next_
18 // pointer to chain elements of the list together. For objects larger than the 18 // pointer to chain elements of the list together. For objects larger than the
19 // minimal object size, the size of the element is embedded in the element at 19 // minimal object size, the size of the element is embedded in the element at
20 // the address following the next_ field. 20 // the address following the next_ field.
21 class FreeListElement { 21 class FreeListElement {
22 public: 22 public:
23 FreeListElement* next() const { 23 FreeListElement* next() const {
24 // Clear the FreeBit. 24 // Clear the FreeBit.
25 ASSERT((next_ & RawObject::kFreeBit) == 1); 25 ASSERT((next_ & 1) == 1);
26 return reinterpret_cast<FreeListElement*>(next_ ^ RawObject::kFreeBit); 26 return reinterpret_cast<FreeListElement*>(next_ ^ 1);
27 } 27 }
28 void set_next(FreeListElement* next) { 28 void set_next(FreeListElement* next) {
29 // Set the FreeBit. 29 // Set the FreeBit.
30 uword addr = reinterpret_cast<uword>(next); 30 uword addr = reinterpret_cast<uword>(next);
31 ASSERT((addr & RawObject::kFreeBit) == 0); 31 ASSERT((addr & 1) == 0);
32 next_ = addr | RawObject::kFreeBit; 32 next_ = addr | 1;
33 } 33 }
34 34
35 intptr_t Size() const { 35 intptr_t Size() const {
36 if (class_ == minimal_element_class_) { 36 if (class_ == minimal_element_class_) {
37 return kObjectAlignment; 37 return kObjectAlignment;
38 } 38 }
39 ASSERT(class_ == element_class_); 39 ASSERT(class_ == element_class_);
40 return *SizeAddress(); 40 return *SizeAddress();
41 } 41 }
42 42
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
98 void SplitElementAfterAndEnqueue(FreeListElement* element, intptr_t size); 98 void SplitElementAfterAndEnqueue(FreeListElement* element, intptr_t size);
99 99
100 FreeListElement* free_lists_[kNumLists + 1]; 100 FreeListElement* free_lists_[kNumLists + 1];
101 101
102 DISALLOW_COPY_AND_ASSIGN(FreeList); 102 DISALLOW_COPY_AND_ASSIGN(FreeList);
103 }; 103 };
104 104
105 } // namespace dart 105 } // namespace dart
106 106
107 #endif // VM_FREELIST_H_ 107 #endif // VM_FREELIST_H_
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698