| Index: src/mark-compact.cc
|
| ===================================================================
|
| --- src/mark-compact.cc (revision 7781)
|
| +++ src/mark-compact.cc (working copy)
|
| @@ -1178,7 +1178,7 @@
|
| heap_->isolate()->compilation_cache()->IterateFunctions(&visitor);
|
| heap_->isolate()->handle_scope_implementer()->Iterate(&visitor);
|
|
|
| - ProcessMarkingStack();
|
| + ProcessMarkingDeque();
|
| }
|
|
|
|
|
| @@ -1217,7 +1217,7 @@
|
|
|
| // Mark all the objects reachable from the map and body. May leave
|
| // overflowed objects in the heap.
|
| - collector_->EmptyMarkingStack();
|
| + collector_->EmptyMarkingDeque();
|
| }
|
|
|
| MarkCompactCollector* collector_;
|
| @@ -1287,10 +1287,10 @@
|
| map->instance_type() <= JS_FUNCTION_TYPE) {
|
| MarkMapContents(map);
|
| } else {
|
| - marking_stack_.Push(map);
|
| + marking_deque_.Push(map);
|
| }
|
| } else {
|
| - marking_stack_.Push(object);
|
| + marking_deque_.Push(object);
|
| }
|
| }
|
|
|
| @@ -1345,14 +1345,14 @@
|
| MarkBit mark = HEAP->marking()->MarkBitFrom(HeapObject::cast(object));
|
| if (!mark.Get()) {
|
| SetMark(HeapObject::cast(object), mark);
|
| - marking_stack_.Push(object);
|
| + marking_deque_.Push(object);
|
| }
|
| }
|
| }
|
| }
|
| // The DescriptorArray descriptors contains a pointer to its contents array,
|
| // but the contents array is already marked.
|
| - marking_stack_.Push(descriptors);
|
| + marking_deque_.Push(descriptors);
|
| }
|
|
|
|
|
| @@ -1390,15 +1390,15 @@
|
| #if 0
|
| // The caller should ensure that the marking stack is initially not full,
|
| // so that we don't waste effort pointlessly scanning for objects.
|
| - ASSERT(!marking_stack.is_full());
|
| + ASSERT(!marking_deque.is_full());
|
|
|
| for (HeapObject* object = it->next(); object != NULL; object = it->next()) {
|
| if (object->IsOverflowed()) {
|
| object->ClearOverflow();
|
| ASSERT(HEAP->mark_compact_collector()->IsMarked(object));
|
| ASSERT(HEAP->Contains(object));
|
| - marking_stack.Push(object);
|
| - if (marking_stack.is_full()) return;
|
| + marking_deque.Push(object);
|
| + if (marking_deque.is_full()) return;
|
| }
|
| }
|
| #endif
|
| @@ -1424,7 +1424,7 @@
|
| // Explicitly mark the prefix.
|
| MarkingVisitor marker(heap_);
|
| symbol_table->IteratePrefix(&marker);
|
| - ProcessMarkingStack();
|
| + ProcessMarkingDeque();
|
| }
|
|
|
|
|
| @@ -1437,9 +1437,9 @@
|
| MarkSymbolTable();
|
|
|
| // There may be overflowed objects in the heap. Visit them now.
|
| - while (marking_stack_.overflowed()) {
|
| - RefillMarkingStack();
|
| - EmptyMarkingStack();
|
| + while (marking_deque_.overflowed()) {
|
| + RefillMarkingDeque();
|
| + EmptyMarkingDeque();
|
| }
|
| }
|
|
|
| @@ -1520,9 +1520,9 @@
|
| // Before: the marking stack contains zero or more heap object pointers.
|
| // After: the marking stack is empty, and all objects reachable from the
|
| // marking stack have been marked, or are overflowed in the heap.
|
| -void MarkCompactCollector::EmptyMarkingStack() {
|
| - while (!marking_stack_.is_empty()) {
|
| - HeapObject* object = marking_stack_.Pop();
|
| +void MarkCompactCollector::EmptyMarkingDeque() {
|
| + while (!marking_deque_.IsEmpty()) {
|
| + HeapObject* object = marking_deque_.Pop();
|
| ASSERT(object->IsHeapObject());
|
| ASSERT(heap_->Contains(object));
|
| ASSERT(IsMarked(object));
|
| @@ -1542,42 +1542,42 @@
|
| // before sweeping completes. If sweeping completes, there are no remaining
|
| // overflowed objects in the heap so the overflow flag on the markings stack
|
| // is cleared.
|
| -void MarkCompactCollector::RefillMarkingStack() {
|
| +void MarkCompactCollector::RefillMarkingDeque() {
|
| UNREACHABLE();
|
|
|
| #if 0
|
| - ASSERT(marking_stack_.overflowed());
|
| + ASSERT(marking_deque_.overflowed());
|
|
|
| SemiSpaceIterator new_it(HEAP->new_space(), &OverflowObjectSize);
|
| OverflowedObjectsScanner::ScanOverflowedObjects(this, &new_it);
|
| - if (marking_stack_.is_full()) return;
|
| + if (marking_deque_.is_full()) return;
|
|
|
| HeapObjectIterator old_pointer_it(HEAP->old_pointer_space(),
|
| &OverflowObjectSize);
|
| OverflowedObjectsScanner::ScanOverflowedObjects(this, &old_pointer_it);
|
| - if (marking_stack_.is_full()) return;
|
| + if (marking_deque_.is_full()) return;
|
|
|
| HeapObjectIterator old_data_it(HEAP->old_data_space(), &OverflowObjectSize);
|
| OverflowedObjectsScanner::ScanOverflowedObjects(this, &old_data_it);
|
| - if (marking_stack_.is_full()) return;
|
| + if (marking_deque_.is_full()) return;
|
|
|
| HeapObjectIterator code_it(HEAP->code_space(), &OverflowObjectSize);
|
| OverflowedObjectsScanner::ScanOverflowedObjects(this, &code_it);
|
| - if (marking_stack_.is_full()) return;
|
| + if (marking_deque_.is_full()) return;
|
|
|
| HeapObjectIterator map_it(HEAP->map_space(), &OverflowObjectSize);
|
| OverflowedObjectsScanner::ScanOverflowedObjects(this, &map_it);
|
| - if (marking_stack_.is_full()) return;
|
| + if (marking_deque_.is_full()) return;
|
|
|
| HeapObjectIterator cell_it(HEAP->cell_space(), &OverflowObjectSize);
|
| OverflowedObjectsScanner::ScanOverflowedObjects(this, &cell_it);
|
| - if (marking_stack_.is_full()) return;
|
| + if (marking_deque_.is_full()) return;
|
|
|
| LargeObjectIterator lo_it(HEAP->lo_space(), &OverflowObjectSize);
|
| OverflowedObjectsScanner::ScanOverflowedObjects(this, &lo_it);
|
| - if (marking_stack_.is_full()) return;
|
| + if (marking_deque_.is_full()) return;
|
|
|
| - marking_stack_.clear_overflowed();
|
| + marking_deque_.clear_overflowed();
|
| #endif
|
| }
|
|
|
| @@ -1586,23 +1586,23 @@
|
| // stack. Before: the marking stack contains zero or more heap object
|
| // pointers. After: the marking stack is empty and there are no overflowed
|
| // objects in the heap.
|
| -void MarkCompactCollector::ProcessMarkingStack() {
|
| - EmptyMarkingStack();
|
| - while (marking_stack_.overflowed()) {
|
| - RefillMarkingStack();
|
| - EmptyMarkingStack();
|
| +void MarkCompactCollector::ProcessMarkingDeque() {
|
| + EmptyMarkingDeque();
|
| + while (marking_deque_.overflowed()) {
|
| + RefillMarkingDeque();
|
| + EmptyMarkingDeque();
|
| }
|
| }
|
|
|
|
|
| void MarkCompactCollector::ProcessExternalMarking() {
|
| bool work_to_do = true;
|
| - ASSERT(marking_stack_.is_empty());
|
| + ASSERT(marking_deque_.IsEmpty());
|
| while (work_to_do) {
|
| MarkObjectGroups();
|
| MarkImplicitRefGroups();
|
| - work_to_do = !marking_stack_.is_empty();
|
| - ProcessMarkingStack();
|
| + work_to_do = !marking_deque_.IsEmpty();
|
| + ProcessMarkingDeque();
|
| }
|
| }
|
|
|
| @@ -1620,10 +1620,10 @@
|
| #endif
|
| // The to space contains live objects, the from space is used as a marking
|
| // stack.
|
| - marking_stack_.Initialize(heap_->new_space()->FromSpaceLow(),
|
| + marking_deque_.Initialize(heap_->new_space()->FromSpaceLow(),
|
| heap_->new_space()->FromSpaceHigh());
|
|
|
| - ASSERT(!marking_stack_.overflowed());
|
| + ASSERT(!marking_deque_.overflowed());
|
|
|
| PrepareForCodeFlushing();
|
|
|
| @@ -1645,9 +1645,9 @@
|
| &IsUnmarkedHeapObject);
|
| // Then we mark the objects and process the transitive closure.
|
| heap_->isolate()->global_handles()->IterateWeakRoots(&root_visitor);
|
| - while (marking_stack_.overflowed()) {
|
| - RefillMarkingStack();
|
| - EmptyMarkingStack();
|
| + while (marking_deque_.overflowed()) {
|
| + RefillMarkingDeque();
|
| + EmptyMarkingDeque();
|
| }
|
|
|
| // Repeat host application specific marking to mark unmarked objects
|
|
|