| Index: src/heap.cc
 | 
| diff --git a/src/heap.cc b/src/heap.cc
 | 
| index 6637b9af65bd54fefada680625cccff304cf7905..8cef1aea5394f07db103f61e639695339bcb8343 100644
 | 
| --- a/src/heap.cc
 | 
| +++ b/src/heap.cc
 | 
| @@ -449,7 +449,7 @@ void Heap::GarbageCollectionPrologue() {
 | 
|  
 | 
|  intptr_t Heap::SizeOfObjects() {
 | 
|    intptr_t total = 0;
 | 
| -  AllSpaces spaces;
 | 
| +  AllSpaces spaces(this);
 | 
|    for (Space* space = spaces.next(); space != NULL; space = spaces.next()) {
 | 
|      total += space->SizeOfObjects();
 | 
|    }
 | 
| @@ -458,7 +458,7 @@ intptr_t Heap::SizeOfObjects() {
 | 
|  
 | 
|  
 | 
|  void Heap::RepairFreeListsAfterBoot() {
 | 
| -  PagedSpaces spaces;
 | 
| +  PagedSpaces spaces(this);
 | 
|    for (PagedSpace* space = spaces.next();
 | 
|         space != NULL;
 | 
|         space = spaces.next()) {
 | 
| @@ -5537,9 +5537,10 @@ bool Heap::IdleGlobalGC() {
 | 
|  void Heap::Print() {
 | 
|    if (!HasBeenSetUp()) return;
 | 
|    isolate()->PrintStack();
 | 
| -  AllSpaces spaces;
 | 
| -  for (Space* space = spaces.next(); space != NULL; space = spaces.next())
 | 
| +  AllSpaces spaces(this);
 | 
| +  for (Space* space = spaces.next(); space != NULL; space = spaces.next()) {
 | 
|      space->Print();
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  
 | 
| @@ -6167,7 +6168,7 @@ void Heap::RecordStats(HeapStats* stats, bool take_snapshot) {
 | 
|    *stats->os_error = OS::GetLastError();
 | 
|        isolate()->memory_allocator()->Available();
 | 
|    if (take_snapshot) {
 | 
| -    HeapIterator iterator;
 | 
| +    HeapIterator iterator(this);
 | 
|      for (HeapObject* obj = iterator.next();
 | 
|           obj != NULL;
 | 
|           obj = iterator.next()) {
 | 
| @@ -6412,7 +6413,7 @@ void Heap::TearDown() {
 | 
|  
 | 
|  void Heap::Shrink() {
 | 
|    // Try to shrink all paged spaces.
 | 
| -  PagedSpaces spaces;
 | 
| +  PagedSpaces spaces(this);
 | 
|    for (PagedSpace* space = spaces.next();
 | 
|         space != NULL;
 | 
|         space = spaces.next()) {
 | 
| @@ -6485,19 +6486,19 @@ void Heap::PrintHandles() {
 | 
|  Space* AllSpaces::next() {
 | 
|    switch (counter_++) {
 | 
|      case NEW_SPACE:
 | 
| -      return HEAP->new_space();
 | 
| +      return heap_->new_space();
 | 
|      case OLD_POINTER_SPACE:
 | 
| -      return HEAP->old_pointer_space();
 | 
| +      return heap_->old_pointer_space();
 | 
|      case OLD_DATA_SPACE:
 | 
| -      return HEAP->old_data_space();
 | 
| +      return heap_->old_data_space();
 | 
|      case CODE_SPACE:
 | 
| -      return HEAP->code_space();
 | 
| +      return heap_->code_space();
 | 
|      case MAP_SPACE:
 | 
| -      return HEAP->map_space();
 | 
| +      return heap_->map_space();
 | 
|      case CELL_SPACE:
 | 
| -      return HEAP->cell_space();
 | 
| +      return heap_->cell_space();
 | 
|      case LO_SPACE:
 | 
| -      return HEAP->lo_space();
 | 
| +      return heap_->lo_space();
 | 
|      default:
 | 
|        return NULL;
 | 
|    }
 | 
| @@ -6507,15 +6508,15 @@ Space* AllSpaces::next() {
 | 
|  PagedSpace* PagedSpaces::next() {
 | 
|    switch (counter_++) {
 | 
|      case OLD_POINTER_SPACE:
 | 
| -      return HEAP->old_pointer_space();
 | 
| +      return heap_->old_pointer_space();
 | 
|      case OLD_DATA_SPACE:
 | 
| -      return HEAP->old_data_space();
 | 
| +      return heap_->old_data_space();
 | 
|      case CODE_SPACE:
 | 
| -      return HEAP->code_space();
 | 
| +      return heap_->code_space();
 | 
|      case MAP_SPACE:
 | 
| -      return HEAP->map_space();
 | 
| +      return heap_->map_space();
 | 
|      case CELL_SPACE:
 | 
| -      return HEAP->cell_space();
 | 
| +      return heap_->cell_space();
 | 
|      default:
 | 
|        return NULL;
 | 
|    }
 | 
| @@ -6526,26 +6527,28 @@ PagedSpace* PagedSpaces::next() {
 | 
|  OldSpace* OldSpaces::next() {
 | 
|    switch (counter_++) {
 | 
|      case OLD_POINTER_SPACE:
 | 
| -      return HEAP->old_pointer_space();
 | 
| +      return heap_->old_pointer_space();
 | 
|      case OLD_DATA_SPACE:
 | 
| -      return HEAP->old_data_space();
 | 
| +      return heap_->old_data_space();
 | 
|      case CODE_SPACE:
 | 
| -      return HEAP->code_space();
 | 
| +      return heap_->code_space();
 | 
|      default:
 | 
|        return NULL;
 | 
|    }
 | 
|  }
 | 
|  
 | 
|  
 | 
| -SpaceIterator::SpaceIterator()
 | 
| -    : current_space_(FIRST_SPACE),
 | 
| +SpaceIterator::SpaceIterator(Heap* heap)
 | 
| +    : heap_(heap),
 | 
| +      current_space_(FIRST_SPACE),
 | 
|        iterator_(NULL),
 | 
|        size_func_(NULL) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| -SpaceIterator::SpaceIterator(HeapObjectCallback size_func)
 | 
| -    : current_space_(FIRST_SPACE),
 | 
| +SpaceIterator::SpaceIterator(Heap* heap, HeapObjectCallback size_func)
 | 
| +    : heap_(heap),
 | 
| +      current_space_(FIRST_SPACE),
 | 
|        iterator_(NULL),
 | 
|        size_func_(size_func) {
 | 
|  }
 | 
| @@ -6585,25 +6588,26 @@ ObjectIterator* SpaceIterator::CreateIterator() {
 | 
|  
 | 
|    switch (current_space_) {
 | 
|      case NEW_SPACE:
 | 
| -      iterator_ = new SemiSpaceIterator(HEAP->new_space(), size_func_);
 | 
| +      iterator_ = new SemiSpaceIterator(heap_->new_space(), size_func_);
 | 
|        break;
 | 
|      case OLD_POINTER_SPACE:
 | 
| -      iterator_ = new HeapObjectIterator(HEAP->old_pointer_space(), size_func_);
 | 
| +      iterator_ =
 | 
| +          new HeapObjectIterator(heap_->old_pointer_space(), size_func_);
 | 
|        break;
 | 
|      case OLD_DATA_SPACE:
 | 
| -      iterator_ = new HeapObjectIterator(HEAP->old_data_space(), size_func_);
 | 
| +      iterator_ = new HeapObjectIterator(heap_->old_data_space(), size_func_);
 | 
|        break;
 | 
|      case CODE_SPACE:
 | 
| -      iterator_ = new HeapObjectIterator(HEAP->code_space(), size_func_);
 | 
| +      iterator_ = new HeapObjectIterator(heap_->code_space(), size_func_);
 | 
|        break;
 | 
|      case MAP_SPACE:
 | 
| -      iterator_ = new HeapObjectIterator(HEAP->map_space(), size_func_);
 | 
| +      iterator_ = new HeapObjectIterator(heap_->map_space(), size_func_);
 | 
|        break;
 | 
|      case CELL_SPACE:
 | 
| -      iterator_ = new HeapObjectIterator(HEAP->cell_space(), size_func_);
 | 
| +      iterator_ = new HeapObjectIterator(heap_->cell_space(), size_func_);
 | 
|        break;
 | 
|      case LO_SPACE:
 | 
| -      iterator_ = new LargeObjectIterator(HEAP->lo_space(), size_func_);
 | 
| +      iterator_ = new LargeObjectIterator(heap_->lo_space(), size_func_);
 | 
|        break;
 | 
|    }
 | 
|  
 | 
| @@ -6674,15 +6678,18 @@ class UnreachableObjectsFilter : public HeapObjectsFilter {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -HeapIterator::HeapIterator()
 | 
| -    : filtering_(HeapIterator::kNoFiltering),
 | 
| +HeapIterator::HeapIterator(Heap* heap)
 | 
| +    : heap_(heap),
 | 
| +      filtering_(HeapIterator::kNoFiltering),
 | 
|        filter_(NULL) {
 | 
|    Init();
 | 
|  }
 | 
|  
 | 
|  
 | 
| -HeapIterator::HeapIterator(HeapIterator::HeapObjectsFiltering filtering)
 | 
| -    : filtering_(filtering),
 | 
| +HeapIterator::HeapIterator(Heap* heap,
 | 
| +                           HeapIterator::HeapObjectsFiltering filtering)
 | 
| +    : heap_(heap),
 | 
| +      filtering_(filtering),
 | 
|        filter_(NULL) {
 | 
|    Init();
 | 
|  }
 | 
| @@ -6695,7 +6702,7 @@ HeapIterator::~HeapIterator() {
 | 
|  
 | 
|  void HeapIterator::Init() {
 | 
|    // Start the iteration.
 | 
| -  space_iterator_ = new SpaceIterator;
 | 
| +  space_iterator_ = new SpaceIterator(heap_);
 | 
|    switch (filtering_) {
 | 
|      case kFilterUnreachable:
 | 
|        filter_ = new UnreachableObjectsFilter;
 | 
| @@ -6960,9 +6967,9 @@ void Heap::TracePathToGlobal() {
 | 
|  #endif
 | 
|  
 | 
|  
 | 
| -static intptr_t CountTotalHolesSize() {
 | 
| +static intptr_t CountTotalHolesSize(Heap* heap) {
 | 
|    intptr_t holes_size = 0;
 | 
| -  OldSpaces spaces;
 | 
| +  OldSpaces spaces(heap);
 | 
|    for (OldSpace* space = spaces.next();
 | 
|         space != NULL;
 | 
|         space = spaces.next()) {
 | 
| @@ -6998,7 +7005,7 @@ GCTracer::GCTracer(Heap* heap,
 | 
|      scopes_[i] = 0;
 | 
|    }
 | 
|  
 | 
| -  in_free_list_or_wasted_before_gc_ = CountTotalHolesSize();
 | 
| +  in_free_list_or_wasted_before_gc_ = CountTotalHolesSize(heap);
 | 
|  
 | 
|    allocated_since_last_gc_ =
 | 
|        heap_->SizeOfObjects() - heap_->alive_after_last_gc_;
 | 
| @@ -7125,7 +7132,7 @@ GCTracer::~GCTracer() {
 | 
|      PrintF("total_size_after=%" V8_PTR_PREFIX "d ", heap_->SizeOfObjects());
 | 
|      PrintF("holes_size_before=%" V8_PTR_PREFIX "d ",
 | 
|             in_free_list_or_wasted_before_gc_);
 | 
| -    PrintF("holes_size_after=%" V8_PTR_PREFIX "d ", CountTotalHolesSize());
 | 
| +    PrintF("holes_size_after=%" V8_PTR_PREFIX "d ", CountTotalHolesSize(heap_));
 | 
|  
 | 
|      PrintF("allocated=%" V8_PTR_PREFIX "d ", allocated_since_last_gc_);
 | 
|      PrintF("promoted=%" V8_PTR_PREFIX "d ", promoted_objects_size_);
 | 
| 
 |