summaryrefslogtreecommitdiff
path: root/deps/v8/src/heap/heap-inl.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/heap/heap-inl.h')
-rw-r--r--deps/v8/src/heap/heap-inl.h54
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());
}