diff options
Diffstat (limited to 'deps/v8/src/heap/heap-inl.h')
-rw-r--r-- | deps/v8/src/heap/heap-inl.h | 54 |
1 files changed, 33 insertions, 21 deletions
diff --git a/deps/v8/src/heap/heap-inl.h b/deps/v8/src/heap/heap-inl.h index a0e731119c..87aac8731d 100644 --- a/deps/v8/src/heap/heap-inl.h +++ b/deps/v8/src/heap/heap-inl.h @@ -23,6 +23,7 @@ #include "src/msan.h" #include "src/objects-inl.h" #include "src/objects/scope-info.h" +#include "src/string-hasher.h" namespace v8 { namespace internal { @@ -37,23 +38,21 @@ HeapObject* AllocationResult::ToObjectChecked() { return HeapObject::cast(object_); } -void PromotionQueue::insert(HeapObject* target, int32_t size, - bool was_marked_black) { +void PromotionQueue::insert(HeapObject* target, int32_t size) { if (emergency_stack_ != NULL) { - emergency_stack_->Add(Entry(target, size, was_marked_black)); + emergency_stack_->Add(Entry(target, size)); return; } if ((rear_ - 1) < limit_) { RelocateQueueHead(); - emergency_stack_->Add(Entry(target, size, was_marked_black)); + emergency_stack_->Add(Entry(target, size)); return; } struct Entry* entry = reinterpret_cast<struct Entry*>(--rear_); entry->obj_ = target; entry->size_ = size; - entry->was_marked_black_ = was_marked_black; // Assert no overflow into live objects. #ifdef DEBUG @@ -62,21 +61,18 @@ void PromotionQueue::insert(HeapObject* target, int32_t size, #endif } -void PromotionQueue::remove(HeapObject** target, int32_t* size, - bool* was_marked_black) { +void PromotionQueue::remove(HeapObject** target, int32_t* size) { DCHECK(!is_empty()); if (front_ == rear_) { Entry e = emergency_stack_->RemoveLast(); *target = e.obj_; *size = e.size_; - *was_marked_black = e.was_marked_black_; return; } struct Entry* entry = reinterpret_cast<struct Entry*>(--front_); *target = entry->obj_; *size = entry->size_; - *was_marked_black = entry->was_marked_black_; // Assert no underflow. SemiSpace::AssertValidRange(reinterpret_cast<Address>(rear_), @@ -239,7 +235,7 @@ AllocationResult Heap::AllocateOneByteInternalizedString( } // String maps are all immortal immovable objects. - result->set_map_no_write_barrier(map); + result->set_map_after_allocation(map, SKIP_WRITE_BARRIER); // Set length and hash fields of the allocated string. String* answer = String::cast(result); answer->set_length(str.length()); @@ -270,7 +266,7 @@ AllocationResult Heap::AllocateTwoByteInternalizedString(Vector<const uc16> str, if (!allocation.To(&result)) return allocation; } - result->set_map(map); + result->set_map_after_allocation(map); // Set length and hash fields of the allocated string. String* answer = String::cast(result); answer->set_length(str.length()); @@ -706,18 +702,20 @@ void Heap::ExternalStringTable::AddString(String* string) { } } -void Heap::ExternalStringTable::IterateNewSpaceStrings(ObjectVisitor* v) { +void Heap::ExternalStringTable::IterateNewSpaceStrings(RootVisitor* v) { if (!new_space_strings_.is_empty()) { Object** start = &new_space_strings_[0]; - v->VisitPointers(start, start + new_space_strings_.length()); + v->VisitRootPointers(Root::kExternalStringsTable, start, + start + new_space_strings_.length()); } } -void Heap::ExternalStringTable::IterateAll(ObjectVisitor* v) { +void Heap::ExternalStringTable::IterateAll(RootVisitor* v) { IterateNewSpaceStrings(v); if (!old_space_strings_.is_empty()) { Object** start = &old_space_strings_[0]; - v->VisitPointers(start, start + old_space_strings_.length()); + v->VisitRootPointers(Root::kExternalStringsTable, start, + start + old_space_strings_.length()); } } @@ -793,12 +791,18 @@ void Heap::SetArgumentsAdaptorDeoptPCOffset(int pc_offset) { } void Heap::SetConstructStubCreateDeoptPCOffset(int pc_offset) { - DCHECK(construct_stub_create_deopt_pc_offset() == Smi::kZero); + // TODO(tebbi): Remove second half of DCHECK once + // FLAG_harmony_restrict_constructor_return is gone. + DCHECK(construct_stub_create_deopt_pc_offset() == Smi::kZero || + construct_stub_create_deopt_pc_offset() == Smi::FromInt(pc_offset)); set_construct_stub_create_deopt_pc_offset(Smi::FromInt(pc_offset)); } void Heap::SetConstructStubInvokeDeoptPCOffset(int pc_offset) { - DCHECK(construct_stub_invoke_deopt_pc_offset() == Smi::kZero); + // TODO(tebbi): Remove second half of DCHECK once + // FLAG_harmony_restrict_constructor_return is gone. + DCHECK(construct_stub_invoke_deopt_pc_offset() == Smi::kZero || + construct_stub_invoke_deopt_pc_offset() == Smi::FromInt(pc_offset)); set_construct_stub_invoke_deopt_pc_offset(Smi::FromInt(pc_offset)); } @@ -850,13 +854,21 @@ AlwaysAllocateScope::AlwaysAllocateScope(Isolate* isolate) heap_->always_allocate_scope_count_.Increment(1); } - AlwaysAllocateScope::~AlwaysAllocateScope() { heap_->always_allocate_scope_count_.Decrement(1); } +void VerifyPointersVisitor::VisitPointers(HeapObject* host, Object** start, + Object** end) { + VerifyPointers(start, end); +} -void VerifyPointersVisitor::VisitPointers(Object** start, Object** end) { +void VerifyPointersVisitor::VisitRootPointers(Root root, Object** start, + Object** end) { + VerifyPointers(start, end); +} + +void VerifyPointersVisitor::VerifyPointers(Object** start, Object** end) { for (Object** current = start; current < end; current++) { if ((*current)->IsHeapObject()) { HeapObject* object = HeapObject::cast(*current); @@ -868,8 +880,8 @@ void VerifyPointersVisitor::VisitPointers(Object** start, Object** end) { } } - -void VerifySmisVisitor::VisitPointers(Object** start, Object** end) { +void VerifySmisVisitor::VisitRootPointers(Root root, Object** start, + Object** end) { for (Object** current = start; current < end; current++) { CHECK((*current)->IsSmi()); } |