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

Side by Side Diff: src/heap/spaces.h

Issue 699473002: 429168: fix for PdfJs regression (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 1 month 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 | « src/heap/heap-inl.h ('k') | src/serialize.h » ('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 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_HEAP_SPACES_H_ 5 #ifndef V8_HEAP_SPACES_H_
6 #define V8_HEAP_SPACES_H_ 6 #define V8_HEAP_SPACES_H_
7 7
8 #include "src/allocation.h" 8 #include "src/allocation.h"
9 #include "src/base/atomicops.h" 9 #include "src/base/atomicops.h"
10 #include "src/base/bits.h" 10 #include "src/base/bits.h"
(...skipping 1590 matching lines...) Expand 10 before | Expand all | Expand 10 after
1601 FreeListCategory huge_list_; 1601 FreeListCategory huge_list_;
1602 1602
1603 DISALLOW_IMPLICIT_CONSTRUCTORS(FreeList); 1603 DISALLOW_IMPLICIT_CONSTRUCTORS(FreeList);
1604 }; 1604 };
1605 1605
1606 1606
1607 class AllocationResult { 1607 class AllocationResult {
1608 public: 1608 public:
1609 // Implicit constructor from Object*. 1609 // Implicit constructor from Object*.
1610 AllocationResult(Object* object) // NOLINT 1610 AllocationResult(Object* object) // NOLINT
1611 : object_(object), 1611 : object_(object) {
1612 retry_space_(INVALID_SPACE) {} 1612 // AllocationResults can't return Smis, which are used to represent
1613 // failure and the space to retry in.
1614 CHECK(!object->IsSmi());
1615 }
1613 1616
1614 AllocationResult() : object_(NULL), retry_space_(INVALID_SPACE) {} 1617 AllocationResult() : object_(Smi::FromInt(NEW_SPACE)) {}
1615 1618
1616 static inline AllocationResult Retry(AllocationSpace space = NEW_SPACE) { 1619 static inline AllocationResult Retry(AllocationSpace space = NEW_SPACE) {
1617 return AllocationResult(space); 1620 return AllocationResult(space);
1618 } 1621 }
1619 1622
1620 inline bool IsRetry() { return retry_space_ != INVALID_SPACE; } 1623 inline bool IsRetry() { return object_->IsSmi(); }
1621 1624
1622 template <typename T> 1625 template <typename T>
1623 bool To(T** obj) { 1626 bool To(T** obj) {
1624 if (IsRetry()) return false; 1627 if (IsRetry()) return false;
1625 *obj = T::cast(object_); 1628 *obj = T::cast(object_);
1626 return true; 1629 return true;
1627 } 1630 }
1628 1631
1629 Object* ToObjectChecked() { 1632 Object* ToObjectChecked() {
1630 CHECK(!IsRetry()); 1633 CHECK(!IsRetry());
1631 return object_; 1634 return object_;
1632 } 1635 }
1633 1636
1634 AllocationSpace RetrySpace() { 1637 AllocationSpace RetrySpace() {
1635 DCHECK(IsRetry()); 1638 DCHECK(IsRetry());
1636 return retry_space_; 1639 return static_cast<AllocationSpace>(Smi::cast(object_)->value());
1637 } 1640 }
1638 1641
1639 private: 1642 private:
1640 explicit AllocationResult(AllocationSpace space) 1643 explicit AllocationResult(AllocationSpace space)
1641 : object_(NULL), retry_space_(space) {} 1644 : object_(Smi::FromInt(static_cast<int>(space))) {}
1642 1645
1643 Object* object_; 1646 Object* object_;
1644 AllocationSpace retry_space_;
1645 }; 1647 };
1646 1648
1647 1649
1650 STATIC_ASSERT(sizeof(AllocationResult) == kPointerSize);
1651
1652
1648 class PagedSpace : public Space { 1653 class PagedSpace : public Space {
1649 public: 1654 public:
1650 // Creates a space with a maximum capacity, and an id. 1655 // Creates a space with a maximum capacity, and an id.
1651 PagedSpace(Heap* heap, intptr_t max_capacity, AllocationSpace id, 1656 PagedSpace(Heap* heap, intptr_t max_capacity, AllocationSpace id,
1652 Executability executable); 1657 Executability executable);
1653 1658
1654 virtual ~PagedSpace() {} 1659 virtual ~PagedSpace() {}
1655 1660
1656 // Set up the space using the given address range of virtual memory (from 1661 // Set up the space using the given address range of virtual memory (from
1657 // the memory allocator's initial chunk) if possible. If the block of 1662 // the memory allocator's initial chunk) if possible. If the block of
(...skipping 1236 matching lines...) Expand 10 before | Expand all | Expand 10 after
2894 count = 0; 2899 count = 0;
2895 } 2900 }
2896 // Must be small, since an iteration is used for lookup. 2901 // Must be small, since an iteration is used for lookup.
2897 static const int kMaxComments = 64; 2902 static const int kMaxComments = 64;
2898 }; 2903 };
2899 #endif 2904 #endif
2900 } 2905 }
2901 } // namespace v8::internal 2906 } // namespace v8::internal
2902 2907
2903 #endif // V8_HEAP_SPACES_H_ 2908 #endif // V8_HEAP_SPACES_H_
OLDNEW
« no previous file with comments | « src/heap/heap-inl.h ('k') | src/serialize.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698