Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(826)

Unified Diff: src/heap.cc

Issue 203583007: Support weak heap references in the ConstantPool to support IsWeakObjectInOptimizedCode objects. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/heap.h ('k') | src/objects.h » ('j') | src/objects-visiting-inl.h » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/heap.cc
diff --git a/src/heap.cc b/src/heap.cc
index 7c4f66e2ac63e88c80f8c6ef3b7f49ad8267589c..5a4b3387746c13db0d5d018bdc03a6dcf7d51ea8 100644
--- a/src/heap.cc
+++ b/src/heap.cc
@@ -4055,7 +4055,8 @@ MaybeObject* Heap::CreateCode(const CodeDesc& desc,
ConstantPoolArray* constant_pool;
if (FLAG_enable_ool_constant_pool) {
- MaybeObject* maybe_constant_pool = desc.origin->AllocateConstantPool(this);
+ MaybeObject* maybe_constant_pool =
+ desc.origin->AllocateConstantPool(this, crankshafted);
if (!maybe_constant_pool->To(&constant_pool)) return maybe_constant_pool;
} else {
constant_pool = empty_constant_pool_array();
@@ -5164,17 +5165,17 @@ MaybeObject* Heap::CopyConstantPoolArrayWithMap(ConstantPoolArray* src,
int int64_entries = src->count_of_int64_entries();
int code_ptr_entries = src->count_of_code_ptr_entries();
int heap_ptr_entries = src->count_of_heap_ptr_entries();
+ int weak_ptr_entries = src->count_of_weak_ptr_entries();
int int32_entries = src->count_of_int32_entries();
Object* obj;
- { MaybeObject* maybe_obj =
- AllocateConstantPoolArray(int64_entries, code_ptr_entries,
- heap_ptr_entries, int32_entries);
+ { MaybeObject* maybe_obj = AllocateConstantPoolArray(int64_entries,
+ code_ptr_entries, heap_ptr_entries, weak_ptr_entries, int32_entries);
if (!maybe_obj->ToObject(&obj)) return maybe_obj;
}
HeapObject* dst = HeapObject::cast(obj);
dst->set_map_no_write_barrier(map);
- int size = ConstantPoolArray::SizeFor(
- int64_entries, code_ptr_entries, heap_ptr_entries, int32_entries);
+ int size = ConstantPoolArray::SizeFor(int64_entries,
+ code_ptr_entries + heap_ptr_entries + weak_ptr_entries, int32_entries);
CopyBlock(
dst->address() + ConstantPoolArray::kLengthOffset,
src->address() + ConstantPoolArray::kLengthOffset,
@@ -5317,12 +5318,15 @@ MaybeObject* Heap::AllocateRawFixedDoubleArray(int length,
MaybeObject* Heap::AllocateConstantPoolArray(int number_of_int64_entries,
int number_of_code_ptr_entries,
int number_of_heap_ptr_entries,
+ int number_of_weak_ptr_entries,
int number_of_int32_entries) {
ASSERT(number_of_int64_entries > 0 || number_of_code_ptr_entries > 0 ||
- number_of_heap_ptr_entries > 0 || number_of_int32_entries > 0);
+ number_of_heap_ptr_entries > 0 || number_of_weak_ptr_entries > 0 ||
+ number_of_int32_entries > 0);
+ int number_of_ptr_entries = number_of_code_ptr_entries +
+ number_of_heap_ptr_entries + number_of_weak_ptr_entries;
int size = ConstantPoolArray::SizeFor(number_of_int64_entries,
- number_of_code_ptr_entries,
- number_of_heap_ptr_entries,
+ number_of_ptr_entries,
number_of_int32_entries);
#ifndef V8_HOST_ARCH_64_BIT
size += kPointerSize;
@@ -5341,6 +5345,7 @@ MaybeObject* Heap::AllocateConstantPoolArray(int number_of_int64_entries,
constant_pool->SetEntryCounts(number_of_int64_entries,
number_of_code_ptr_entries,
number_of_heap_ptr_entries,
+ number_of_weak_ptr_entries,
number_of_int32_entries);
if (number_of_code_ptr_entries > 0) {
int offset =
@@ -5350,27 +5355,27 @@ MaybeObject* Heap::AllocateConstantPoolArray(int number_of_int64_entries,
isolate()->builtins()->builtin(Builtins::kIllegal)->entry(),
number_of_code_ptr_entries);
}
- if (number_of_heap_ptr_entries > 0) {
+ if (number_of_heap_ptr_entries > 0 || number_of_weak_ptr_entries > 0) {
int offset =
constant_pool->OffsetOfElementAt(constant_pool->first_heap_ptr_index());
MemsetPointer(
HeapObject::RawField(constant_pool, offset),
undefined_value(),
- number_of_heap_ptr_entries);
+ number_of_heap_ptr_entries + number_of_weak_ptr_entries);
}
return constant_pool;
}
MaybeObject* Heap::AllocateEmptyConstantPoolArray() {
- int size = ConstantPoolArray::SizeFor(0, 0, 0, 0);
+ int size = ConstantPoolArray::SizeFor(0, 0, 0);
Object* result;
{ MaybeObject* maybe_result =
AllocateRaw(size, OLD_DATA_SPACE, OLD_DATA_SPACE);
if (!maybe_result->ToObject(&result)) return maybe_result;
}
HeapObject::cast(result)->set_map_no_write_barrier(constant_pool_array_map());
- ConstantPoolArray::cast(result)->SetEntryCounts(0, 0, 0, 0);
+ ConstantPoolArray::cast(result)->SetEntryCounts(0, 0, 0, 0, 0);
return result;
}
« no previous file with comments | « src/heap.h ('k') | src/objects.h » ('j') | src/objects-visiting-inl.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698