| Index: src/zone.cc
|
| ===================================================================
|
| --- src/zone.cc (revision 9006)
|
| +++ src/zone.cc (working copy)
|
| @@ -34,24 +34,6 @@
|
| namespace internal {
|
|
|
|
|
| -Zone::Zone()
|
| - : zone_excess_limit_(256 * MB),
|
| - segment_bytes_allocated_(0),
|
| - position_(0),
|
| - limit_(0),
|
| - scope_nesting_(0),
|
| - segment_head_(NULL) {
|
| -}
|
| -unsigned Zone::allocation_size_ = 0;
|
| -
|
| -
|
| -ZoneScope::~ZoneScope() {
|
| - ASSERT_EQ(Isolate::Current(), isolate_);
|
| - if (ShouldDeleteOnExit()) isolate_->zone()->DeleteAll();
|
| - isolate_->zone()->scope_nesting_--;
|
| -}
|
| -
|
| -
|
| // Segments represent chunks of memory: They have starting address
|
| // (encoded in the this pointer) and a size in bytes. Segments are
|
| // chained together forming a LIFO structure with the newest segment
|
| @@ -60,6 +42,11 @@
|
|
|
| class Segment {
|
| public:
|
| + void Initialize(Segment* next, int size) {
|
| + next_ = next;
|
| + size_ = size;
|
| + }
|
| +
|
| Segment* next() const { return next_; }
|
| void clear_next() { next_ = NULL; }
|
|
|
| @@ -77,19 +64,33 @@
|
|
|
| Segment* next_;
|
| int size_;
|
| -
|
| - friend class Zone;
|
| };
|
|
|
|
|
| +Zone::Zone()
|
| + : zone_excess_limit_(256 * MB),
|
| + segment_bytes_allocated_(0),
|
| + position_(0),
|
| + limit_(0),
|
| + scope_nesting_(0),
|
| + segment_head_(NULL) {
|
| +}
|
| +unsigned Zone::allocation_size_ = 0;
|
| +
|
| +ZoneScope::~ZoneScope() {
|
| + ASSERT_EQ(Isolate::Current(), isolate_);
|
| + if (ShouldDeleteOnExit()) isolate_->zone()->DeleteAll();
|
| + isolate_->zone()->scope_nesting_--;
|
| +}
|
| +
|
| +
|
| // Creates a new segment, sets it size, and pushes it to the front
|
| // of the segment chain. Returns the new segment.
|
| Segment* Zone::NewSegment(int size) {
|
| Segment* result = reinterpret_cast<Segment*>(Malloced::New(size));
|
| adjust_segment_bytes_allocated(size);
|
| if (result != NULL) {
|
| - result->next_ = segment_head_;
|
| - result->size_ = size;
|
| + result->Initialize(segment_head_, size);
|
| segment_head_ = result;
|
| }
|
| return result;
|
| @@ -155,6 +156,14 @@
|
| }
|
|
|
|
|
| +void Zone::DeleteKeptSegment() {
|
| + if (segment_head_ != NULL) {
|
| + DeleteSegment(segment_head_, segment_head_->size());
|
| + segment_head_ = NULL;
|
| + }
|
| +}
|
| +
|
| +
|
| Address Zone::NewExpand(int size) {
|
| // Make sure the requested size is already properly aligned and that
|
| // there isn't enough room in the Zone to satisfy the request.
|
|
|