Revision: 8937
Author:   [email protected]
Date:     Tue Aug 16 01:56:33 2011
Log:      Avoid some crashes when running without snapshots.

Make many more tests succeede with snapshots off.

Review URL: http://codereview.chromium.org/7650010
http://code.google.com/p/v8/source/detail?r=8937

Modified:
 /branches/experimental/gc/src/debug.cc
 /branches/experimental/gc/src/heap.cc
 /branches/experimental/gc/src/heap.h
 /branches/experimental/gc/src/liveedit.cc
 /branches/experimental/gc/src/log.cc
 /branches/experimental/gc/src/objects.h
 /branches/experimental/gc/src/profile-generator.cc
 /branches/experimental/gc/src/profile-generator.h
 /branches/experimental/gc/src/runtime.cc
 /branches/experimental/gc/src/spaces.cc
 /branches/experimental/gc/test/cctest/test-api.cc
 /branches/experimental/gc/test/cctest/test-debug.cc
 /branches/experimental/gc/test/cctest/test-heap.cc

=======================================
--- /branches/experimental/gc/src/debug.cc      Wed Aug 10 05:50:30 2011
+++ /branches/experimental/gc/src/debug.cc      Tue Aug 16 01:56:33 2011
@@ -1913,7 +1913,7 @@
   HeapIterator iterator;
   AssertNoAllocation no_allocation;

- for (HeapObject* obj = iterator.Next(); obj != NULL; obj = iterator.Next()) { + for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) {
     if (obj->IsScript() && Script::cast(obj)->HasValidSource()) {
       script_cache_->Add(Handle<Script>(Script::cast(obj)));
       count++;
=======================================
--- /branches/experimental/gc/src/heap.cc       Fri Aug 12 02:21:47 2011
+++ /branches/experimental/gc/src/heap.cc       Tue Aug 16 01:56:33 2011
@@ -224,7 +224,10 @@


 int Heap::GcSafeSizeOfOldObject(HeapObject* object) {
-  return object->Size();
+  if (IntrusiveMarking::IsMarked(object)) {
+    return IntrusiveMarking::SizeOfMarkedObject(object);
+  }
+  return object->SizeFromMap(object->map());
 }


@@ -4115,16 +4118,20 @@
   Struct::cast(result)->InitializeBody(size);
   return result;
 }
+
+
+bool Heap::IsHeapIterable() {
+  return (!old_pointer_space()->was_swept_conservatively() &&
+          !old_data_space()->was_swept_conservatively());
+}


 void Heap::EnsureHeapIsIterable() {
   ASSERT(IsAllocationAllowed());
-  if (old_pointer_space()->was_swept_conservatively() ||
-      old_data_space()->was_swept_conservatively()) {
+  if (!IsHeapIterable()) {
     CollectAllGarbage(kMakeHeapIterableMask);
   }
-  ASSERT(!old_pointer_space()->was_swept_conservatively());
-  ASSERT(!old_data_space()->was_swept_conservatively());
+  ASSERT(IsHeapIterable());
 }


@@ -4341,6 +4348,7 @@

   lo_space_->Verify();
 }
+
 #endif  // DEBUG


@@ -4825,9 +4833,9 @@
       isolate()->memory_allocator()->Available();
   if (take_snapshot) {
     HeapIterator iterator;
-    for (HeapObject* obj = iterator.Next();
+    for (HeapObject* obj = iterator.next();
          obj != NULL;
-         obj = iterator.Next()) {
+         obj = iterator.next()) {
       InstanceType type = obj->map()->instance_type();
       ASSERT(0 <= type && type <= LAST_TYPE);
       stats->objects_per_type[type]++;
@@ -5464,9 +5472,9 @@

   void MarkUnreachableObjects() {
     HeapIterator iterator;
-    for (HeapObject* obj = iterator.Next();
+    for (HeapObject* obj = iterator.next();
          obj != NULL;
-         obj = iterator.Next()) {
+         obj = iterator.next()) {
       IntrusiveMarking::SetMark(obj);
     }
     UnmarkingVisitor visitor;
@@ -5479,9 +5487,18 @@
 };


-HeapIterator::HeapIterator() {
+HeapIterator::HeapIterator()
+    : filtering_(HeapIterator::kNoFiltering),
+      filter_(NULL) {
   Init();
 }
+
+
+HeapIterator::HeapIterator(HeapIterator::HeapObjectsFiltering filtering)
+    : filtering_(filtering),
+      filter_(NULL) {
+  Init();
+}


 HeapIterator::~HeapIterator() {
@@ -5491,21 +5508,50 @@

 void HeapIterator::Init() {
   // Start the iteration.
-  HEAP->EnsureHeapIsIterable();
-  space_iterator_ = new SpaceIterator();
+  space_iterator_ = filtering_ == kNoFiltering ? new SpaceIterator :
+      new SpaceIterator(Isolate::Current()->heap()->
+                        GcSafeSizeOfOldObjectFunction());
+  switch (filtering_) {
+    case kFilterFreeListNodes:
+      // TODO(gc): Not handled.
+      break;
+    case kFilterUnreachable:
+      filter_ = new UnreachableObjectsFilter;
+      break;
+    default:
+      break;
+  }
   object_iterator_ = space_iterator_->next();
 }


 void HeapIterator::Shutdown() {
+#ifdef DEBUG
+  // Assert that in filtering mode we have iterated through all
+  // objects. Otherwise, heap will be left in an inconsistent state.
+  if (filtering_ != kNoFiltering) {
+    ASSERT(object_iterator_ == NULL);
+  }
+#endif
   // Make sure the last iterator is deallocated.
   delete space_iterator_;
   space_iterator_ = NULL;
   object_iterator_ = NULL;
+  delete filter_;
+  filter_ = NULL;
 }


-HeapObject* HeapIterator::Next() {
+HeapObject* HeapIterator::next() {
+  if (filter_ == NULL) return NextObject();
+
+  HeapObject* obj = NextObject();
+  while (obj != NULL && filter_->SkipObject(obj)) obj = NextObject();
+  return obj;
+}
+
+
+HeapObject* HeapIterator::NextObject() {
   // No iterator means we are done.
   if (object_iterator_ == NULL) return NULL;

@@ -5527,7 +5573,7 @@
 }


-void HeapIterator::Reset() {
+void HeapIterator::reset() {
   // Restart the iterator.
   Shutdown();
   Init();
=======================================
--- /branches/experimental/gc/src/heap.h        Fri Aug 12 02:21:47 2011
+++ /branches/experimental/gc/src/heap.h        Tue Aug 16 01:56:33 2011
@@ -913,6 +913,9 @@
   // state where we can iterate over the heap visiting all objects.
   void CollectAllGarbage(int flags);

+  // Check whether the heap is currently iterable.
+  bool IsHeapIterable();
+
   // Ensure that we have swept all spaces in such a way that we can iterate
   // over all objects.  May cause a GC.
   void EnsureHeapIsIterable();
@@ -1929,8 +1932,7 @@

 // A HeapIterator provides iteration over the whole heap. It
 // aggregates the specific iterators for the different spaces as
-// these can only iterate over one space only.  It can only be guaranteed
-// to iterate over live objects.
+// these can only iterate over one space only.
 //
 // HeapIterator can skip free list nodes (that is, de-allocated heap
 // objects that still remain in the heap). As implementation of free
@@ -1941,18 +1943,28 @@

 class HeapIterator BASE_EMBEDDED {
  public:
+  enum HeapObjectsFiltering {
+    kNoFiltering,
+    kFilterFreeListNodes,
+    kFilterUnreachable
+  };
+
   HeapIterator();
+  explicit HeapIterator(HeapObjectsFiltering filtering);
   ~HeapIterator();

-  HeapObject* Next();
-  void Reset();
+  HeapObject* next();
+  void reset();

  private:
   // Perform the initialization.
   void Init();
   // Perform all necessary shutdown (destruction) work.
   void Shutdown();
-
+  HeapObject* NextObject();
+
+  HeapObjectsFiltering filtering_;
+  HeapObjectsFilter* filter_;
   // Space iterator for iterating all the spaces.
   SpaceIterator* space_iterator_;
   // Object iterator for the space currently being iterated.
@@ -2355,10 +2367,13 @@
     ASSERT(IsMarked(object));
   }

-  static int SizeOfMarkedObject(HeapObject* object) {
+  static Map* MapOfMarkedObject(HeapObject* object) {
     uintptr_t map_word = object->map_word().ToRawValue();
-    Map* map = MapWord::FromRawValue(map_word | kNotMarkedBit).ToMap();
-    return object->SizeFromMap(map);
+    return MapWord::FromRawValue(map_word | kNotMarkedBit).ToMap();
+  }
+
+  static int SizeOfMarkedObject(HeapObject* object) {
+    return object->SizeFromMap(MapOfMarkedObject(object));
   }

  private:
=======================================
--- /branches/experimental/gc/src/liveedit.cc   Tue Jul 12 16:04:25 2011
+++ /branches/experimental/gc/src/liveedit.cc   Tue Aug 16 01:56:33 2011
@@ -1022,7 +1022,7 @@

   // Now iterate over all pointers of all objects, including code_target
   // implicit pointers.
- for (HeapObject* obj = iterator.Next(); obj != NULL; obj = iterator.Next()) { + for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) {
     obj->Iterate(&visitor);
   }

=======================================
--- /branches/experimental/gc/src/log.cc        Wed Aug  3 09:10:10 2011
+++ /branches/experimental/gc/src/log.cc        Tue Aug 16 01:56:33 2011
@@ -1362,7 +1362,7 @@

   // Iterate the heap to find shared function info objects and record
   // the unoptimized code for them.
- for (HeapObject* obj = iterator.Next(); obj != NULL; obj = iterator.Next()) { + for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) {
     if (!obj->IsSharedFunctionInfo()) continue;
     SharedFunctionInfo* sfi = SharedFunctionInfo::cast(obj);
     if (sfi->is_compiled()
@@ -1521,7 +1521,7 @@
 void Logger::LogCodeObjects() {
   HeapIterator iterator;
   AssertNoAllocation no_alloc;
- for (HeapObject* obj = iterator.Next(); obj != NULL; obj = iterator.Next()) { + for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) {
     if (obj->IsCode()) LogCodeObject(obj);
   }
 }
@@ -1589,7 +1589,7 @@
 void Logger::LogAccessorCallbacks() {
   HeapIterator iterator;
   AssertNoAllocation no_alloc;
- for (HeapObject* obj = iterator.Next(); obj != NULL; obj = iterator.Next()) { + for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) {
     if (!obj->IsAccessorInfo()) continue;
     AccessorInfo* ai = AccessorInfo::cast(obj);
     if (!ai->name()->IsString()) continue;
=======================================
--- /branches/experimental/gc/src/objects.h     Wed Aug 10 05:50:30 2011
+++ /branches/experimental/gc/src/objects.h     Tue Aug 16 01:56:33 2011
@@ -1130,18 +1130,14 @@
     HeapObjectPrint(stdout);
   }
   void HeapObjectPrint(FILE* out);
+  void PrintHeader(FILE* out, const char* id);
 #endif
+
 #ifdef DEBUG
   void HeapObjectVerify();
   inline void VerifyObjectField(int offset);
   inline void VerifySmiField(int offset);
-#endif
-
-#ifdef OBJECT_PRINT
-  void PrintHeader(FILE* out, const char* id);
-#endif
-
-#ifdef DEBUG
+
   // Verify a pointer is a valid HeapObject pointer that points to object
   // areas in the heap.
   static void VerifyHeapPointer(Object* p);
=======================================
--- /branches/experimental/gc/src/profile-generator.cc Wed Aug 3 09:10:10 2011 +++ /branches/experimental/gc/src/profile-generator.cc Tue Aug 16 01:56:33 2011
@@ -1786,9 +1786,11 @@

 int V8HeapExplorer::EstimateObjectsCount(HeapIterator* iterator) {
   int objects_count = 0;
-  for (HeapObject* obj = iterator->Next();
+  for (HeapObject* obj = iterator->next();
        obj != NULL;
-       obj = iterator->Next(), ++objects_count) {}
+       obj = iterator->next()) {
+    objects_count++;
+  }
   return objects_count;
 }

@@ -2128,15 +2130,16 @@


 bool V8HeapExplorer::IterateAndExtractReferences(
-    HeapIterator* iterator,
     SnapshotFillerInterface* filler) {
+  HeapIterator iterator(HeapIterator::kFilterUnreachable);
+
   filler_ = filler;
   bool interrupted = false;

   // Heap iteration with filtering must be finished in any case.
-  for (HeapObject* obj = iterator->Next();
+  for (HeapObject* obj = iterator.next();
        obj != NULL;
-       obj = iterator->Next(), progress_->ProgressStep()) {
+       obj = iterator.next(), progress_->ProgressStep()) {
     if (!interrupted) {
       ExtractReferences(obj);
       if (!progress_->ProgressReport(false)) interrupted = true;
@@ -2705,18 +2708,35 @@
Isolate::Current()->heap()->CollectAllGarbage(Heap::kMakeHeapIterableMask); Isolate::Current()->heap()->CollectAllGarbage(Heap::kMakeHeapIterableMask);

-  // Iterator creation should follow TagGlobalObjects as it can allocate.
-  HeapIterator set_progress_heap_iterator;
-  HeapIterator count_entries_heap_iterator;
-  HeapIterator fill_references_heap_iterator;
-
+#ifdef DEBUG
+  Heap* debug_heap = Isolate::Current()->heap();
+  ASSERT(!debug_heap->old_data_space()->was_swept_conservatively());
+  ASSERT(!debug_heap->old_pointer_space()->was_swept_conservatively());
+  ASSERT(!debug_heap->code_space()->was_swept_conservatively());
+  ASSERT(!debug_heap->cell_space()->was_swept_conservatively());
+  ASSERT(!debug_heap->map_space()->was_swept_conservatively());
+#endif
+
+  // The following code uses heap iterators, so we want the heap to be
+  // stable. It should follow TagGlobalObjects as that can allocate.
   AssertNoAllocation no_alloc;

-  SetProgressTotal(&set_progress_heap_iterator,
-                   4);  // 2 passes + dominators + sizes.
+#ifdef DEBUG
+  debug_heap->Verify();
+#endif
+
+  SetProgressTotal(4);  // 2 passes + dominators + sizes.
+
+#ifdef DEBUG
+  debug_heap->Verify();
+#endif

   // Pass 1. Iterate heap contents to count entries and references.
- if (!CountEntriesAndReferences(&count_entries_heap_iterator)) return false;
+  if (!CountEntriesAndReferences()) return false;
+
+#ifdef DEBUG
+  debug_heap->Verify();
+#endif

   // Allocate and fill entries in the snapshot, allocate references.
   snapshot_->AllocateEntries(entries_.entries_count(),
@@ -2725,7 +2745,7 @@
   entries_.AllocateEntries();

   // Pass 2. Fill references.
-  if (!FillReferences(&fill_references_heap_iterator)) return false;
+  if (!FillReferences()) return false;

   if (!SetEntriesDominators()) return false;
   if (!ApproximateRetainedSizes()) return false;
@@ -2753,30 +2773,30 @@
 }


-void HeapSnapshotGenerator::SetProgressTotal(HeapIterator* iterator,
-                                             int iterations_count) {
+void HeapSnapshotGenerator::SetProgressTotal(int iterations_count) {
   if (control_ == NULL) return;
+  HeapIterator iterator(HeapIterator::kFilterUnreachable);
   progress_total_ = (
-      v8_heap_explorer_.EstimateObjectsCount(iterator) +
+      v8_heap_explorer_.EstimateObjectsCount(&iterator) +
       dom_explorer_.EstimateObjectsCount()) * iterations_count;
   progress_counter_ = 0;
 }


-bool HeapSnapshotGenerator::CountEntriesAndReferences(HeapIterator* iterator) {
+bool HeapSnapshotGenerator::CountEntriesAndReferences() {
   SnapshotCounter counter(&entries_);
   v8_heap_explorer_.AddRootEntries(&counter);
   dom_explorer_.AddRootEntries(&counter);
   return
-      v8_heap_explorer_.IterateAndExtractReferences(iterator, &counter) &&
+      v8_heap_explorer_.IterateAndExtractReferences(&counter) &&
       dom_explorer_.IterateAndExtractReferences(&counter);
 }


-bool HeapSnapshotGenerator::FillReferences(HeapIterator* iterator) {
+bool HeapSnapshotGenerator::FillReferences() {
   SnapshotFiller filler(snapshot_, &entries_);
   return
-      v8_heap_explorer_.IterateAndExtractReferences(iterator, &filler) &&
+      v8_heap_explorer_.IterateAndExtractReferences(&filler) &&
       dom_explorer_.IterateAndExtractReferences(&filler);
 }

@@ -2807,7 +2827,7 @@
       nodes_to_visit.RemoveLast();
     }
   }
-  entries->Truncate(current_entry);
+  ASSERT_EQ(current_entry, entries->length());
 }


=======================================
--- /branches/experimental/gc/src/profile-generator.h Wed Aug 3 09:10:10 2011 +++ /branches/experimental/gc/src/profile-generator.h Tue Aug 16 01:56:33 2011
@@ -1,4 +1,4 @@
-// Copyright 2010 the V8 project authors. All rights reserved.
+// Copyright 2011 the V8 project authors. All rights reserved.
 // Redistribution and use in source and binary forms, with or without
 // modification, are permitted provided that the following conditions are
 // met:
@@ -921,8 +921,7 @@
       HeapThing ptr, int children_count, int retainers_count);
   void AddRootEntries(SnapshotFillerInterface* filler);
   int EstimateObjectsCount(HeapIterator* iterator);
-  bool IterateAndExtractReferences(HeapIterator* iterator,
-                                   SnapshotFillerInterface* filler);
+  bool IterateAndExtractReferences(SnapshotFillerInterface* filler);
   void TagGlobalObjects();

   static HeapObject* const kInternalRootObject;
@@ -1053,13 +1052,13 @@
   bool ApproximateRetainedSizes();
   bool BuildDominatorTree(const Vector<HeapEntry*>& entries,
                           Vector<HeapEntry*>* dominators);
-  bool CountEntriesAndReferences(HeapIterator* iterator);
-  bool FillReferences(HeapIterator* iterator);
+  bool CountEntriesAndReferences();
+  bool FillReferences();
   void FillReversePostorderIndexes(Vector<HeapEntry*>* entries);
   void ProgressStep();
   bool ProgressReport(bool force = false);
   bool SetEntriesDominators();
-  void SetProgressTotal(HeapIterator* iterator, int iterations_count);
+  void SetProgressTotal(int iterations_count);

   HeapSnapshot* snapshot_;
   v8::ActivityControl* control_;
=======================================
--- /branches/experimental/gc/src/runtime.cc    Wed Aug 10 05:50:30 2011
+++ /branches/experimental/gc/src/runtime.cc    Tue Aug 16 01:56:33 2011
@@ -11086,10 +11086,11 @@
   Handle<SharedFunctionInfo> target;
   while (!done) {
     { // Extra scope for iterator and no-allocation.
-      HeapIterator iterator;
+      isolate->heap()->EnsureHeapIsIterable();
       AssertNoAllocation no_alloc_during_heap_iteration;
-      for (HeapObject* obj = iterator.Next();
-           obj != NULL; obj = iterator.Next()) {
+      HeapIterator iterator;
+      for (HeapObject* obj = iterator.next();
+           obj != NULL; obj = iterator.next()) {
         if (obj->IsSharedFunctionInfo()) {
           Handle<SharedFunctionInfo> shared(SharedFunctionInfo::cast(obj));
           if (shared->script() == *script) {
@@ -11629,7 +11630,7 @@
   int count = 0;
   JSObject* last = NULL;
   HeapObject* heap_obj = NULL;
-  while (((heap_obj = iterator->Next()) != NULL) &&
+  while (((heap_obj = iterator->next()) != NULL) &&
          (max_references == 0 || count < max_references)) {
     // Only look at all JSObjects.
     if (heap_obj->IsJSObject()) {
@@ -11699,8 +11700,6 @@
// Due to the GC above we know it won't need to do that, but it seems cleaner // to get the heap iterator constructed before we start having unprotected
   // Object* locals that are not protected by handles.
-  HeapIterator heap_iterator;
-  HeapIterator heap_iterator2;

   // Check parameters.
   CONVERT_CHECKED(JSObject, target, args[0]);
@@ -11719,6 +11718,7 @@

   // Get the number of referencing objects.
   int count;
+  HeapIterator heap_iterator;
   count = DebugReferencedBy(&heap_iterator,
                             target, instance_filter, max_references,
                             NULL, 0, arguments_function);
@@ -11731,6 +11731,9 @@
   FixedArray* instances = FixedArray::cast(object);

   // Fill the referencing objects.
+  // AllocateFixedArray above does not make the heap non-iterable.
+  ASSERT(HEAP->IsHeapIterable());
+  HeapIterator heap_iterator2;
   count = DebugReferencedBy(&heap_iterator2,
                             target, instance_filter, max_references,
                             instances, count, arguments_function);
@@ -11757,7 +11760,7 @@
   // Iterate the heap.
   int count = 0;
   HeapObject* heap_obj = NULL;
-  while (((heap_obj = iterator->Next()) != NULL) &&
+  while (((heap_obj = iterator->next()) != NULL) &&
          (max_references == 0 || count < max_references)) {
     // Only look at all JSObjects.
     if (heap_obj->IsJSObject()) {
@@ -11787,9 +11790,6 @@
   // First perform a full GC in order to avoid dead objects.
   isolate->heap()->CollectAllGarbage(Heap::kMakeHeapIterableMask);

-  HeapIterator heap_iterator;
-  HeapIterator heap_iterator2;
-
   // Check parameters.
   CONVERT_CHECKED(JSFunction, constructor, args[0]);
   CONVERT_NUMBER_CHECKED(int32_t, max_references, Int32, args[1]);
@@ -11797,6 +11797,7 @@

   // Get the number of referencing objects.
   int count;
+  HeapIterator heap_iterator;
   count = DebugConstructedBy(&heap_iterator,
                              constructor,
                              max_references,
@@ -11810,7 +11811,9 @@
   }
   FixedArray* instances = FixedArray::cast(object);

+  ASSERT(HEAP->IsHeapIterable());
   // Fill the referencing objects.
+  HeapIterator heap_iterator2;
   count = DebugConstructedBy(&heap_iterator2,
                              constructor,
                              max_references,
@@ -11894,9 +11897,9 @@
   AssertNoAllocation no_allocations;
   int counter = 0;
   int buffer_size = buffer->length();
-  for (HeapObject* obj = iterator->Next();
+  for (HeapObject* obj = iterator->next();
        obj != NULL;
-       obj = iterator->Next()) {
+       obj = iterator->next()) {
     ASSERT(obj != NULL);
     if (!obj->IsSharedFunctionInfo()) {
       continue;
@@ -11931,16 +11934,18 @@
   array = isolate->factory()->NewFixedArray(kBufferSize);
   int number;
   {
-    HeapIterator heap_iterator;
+    isolate->heap()->EnsureHeapIsIterable();
     AssertNoAllocation no_allocations;
+    HeapIterator heap_iterator;
     Script* scr = *script;
     FixedArray* arr = *array;
     number = FindSharedFunctionInfosForScript(&heap_iterator, scr, arr);
   }
   if (number > kBufferSize) {
     array = isolate->factory()->NewFixedArray(number);
-    HeapIterator heap_iterator;
+    isolate->heap()->EnsureHeapIsIterable();
     AssertNoAllocation no_allocations;
+    HeapIterator heap_iterator;
     Script* scr = *script;
     FixedArray* arr = *array;
     FindSharedFunctionInfosForScript(&heap_iterator, scr, arr);
@@ -12424,10 +12429,11 @@
   // Scan the heap for Script objects to find the script with the requested
   // script data.
   Handle<Script> script;
-  HeapIterator iterator;
+  script_name->GetHeap()->EnsureHeapIsIterable();
   AssertNoAllocation no_allocation_during_heap_iteration;
+  HeapIterator iterator;
   HeapObject* obj = NULL;
-  while (script.is_null() && ((obj = iterator.Next()) != NULL)) {
+  while (script.is_null() && ((obj = iterator.next()) != NULL)) {
     // If a script is found check if it has the script data requested.
     if (obj->IsScript()) {
       if (Script::cast(obj)->name()->IsString()) {
=======================================
--- /branches/experimental/gc/src/spaces.cc     Fri Aug 12 02:21:47 2011
+++ /branches/experimental/gc/src/spaces.cc     Tue Aug 16 01:56:33 2011
@@ -35,6 +35,7 @@
 namespace v8 {
 namespace internal {

+
// ----------------------------------------------------------------------------
 // HeapObjectIterator

=======================================
--- /branches/experimental/gc/test/cctest/test-api.cc Thu Aug 11 05:35:11 2011 +++ /branches/experimental/gc/test/cctest/test-api.cc Tue Aug 16 01:56:33 2011
@@ -9864,7 +9864,7 @@
   i::Isolate::Current()->heap()->EnsureHeapIsIterable();
   int count = 0;
   i::HeapIterator it;
- for (i::HeapObject* object = it.Next(); object != NULL; object = it.Next()) + for (i::HeapObject* object = it.next(); object != NULL; object = it.next())
     if (object->IsJSGlobalObject()) count++;
   return count;
 }
=======================================
--- /branches/experimental/gc/test/cctest/test-debug.cc Wed Aug 10 05:50:30 2011 +++ /branches/experimental/gc/test/cctest/test-debug.cc Tue Aug 16 01:56:33 2011
@@ -429,7 +429,7 @@

// Iterate the head and check that there are no debugger related objects left.
   HeapIterator iterator;
- for (HeapObject* obj = iterator.Next(); obj != NULL; obj = iterator.Next()) { + for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) {
     CHECK(!obj->IsDebugInfo());
     CHECK(!obj->IsBreakPointInfo());

=======================================
--- /branches/experimental/gc/test/cctest/test-heap.cc Wed Aug 10 05:50:30 2011 +++ /branches/experimental/gc/test/cctest/test-heap.cc Tue Aug 16 01:56:33 2011
@@ -791,7 +791,7 @@
   // Count the number of objects found in the heap.
   int found_count = 0;
   HeapIterator iterator;
- for (HeapObject* obj = iterator.Next(); obj != NULL; obj = iterator.Next()) { + for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) {
     for (int i = 0; i < size; i++) {
       if (*objs[i] == obj) {
         found_count++;
@@ -1194,9 +1194,9 @@
   intptr_t size_of_objects_1 = HEAP->SizeOfObjects();
   HeapIterator iterator;
   intptr_t size_of_objects_2 = 0;
-  for (HeapObject* obj = iterator.Next();
+  for (HeapObject* obj = iterator.next();
        obj != NULL;
-       obj = iterator.Next()) {
+       obj = iterator.next()) {
     size_of_objects_2 += obj->Size();
   }
   // Delta must be within 5% of the larger result.
@@ -1229,9 +1229,9 @@
   bool b_found() { return b_found_; }
   void IterateHeap() {
     HeapIterator iterator;
-    for (HeapObject* obj = iterator.Next();
+    for (HeapObject* obj = iterator.next();
          obj != NULL;
-         obj = iterator.Next()) {
+         obj = iterator.next()) {
       if (obj == a_)
         a_found_ = true;
       else if (obj == b_)

--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev

Reply via email to