| Index: src/heap/heap.cc
|
| diff --git a/src/heap/heap.cc b/src/heap/heap.cc
|
| index 2ac5146c46d0cf06c6f00f2bbea878a0015db66b..25e4acd0e4f5f4b5bb4698f55e29d8160390f2ff 100644
|
| --- a/src/heap/heap.cc
|
| +++ b/src/heap/heap.cc
|
| @@ -3708,14 +3708,17 @@ AllocationResult Heap::AllocateCode(int object_size, bool immovable) {
|
| AllocationResult Heap::CopyCode(Code* code) {
|
| AllocationResult allocation;
|
| HeapObject* new_constant_pool;
|
| - if (FLAG_enable_ool_constant_pool &&
|
| - code->constant_pool() != empty_constant_pool_array()) {
|
| - // Copy the constant pool, since edits to the copied code may modify
|
| - // the constant pool.
|
| - allocation = CopyConstantPoolArray(code->constant_pool());
|
| - if (!allocation.To(&new_constant_pool)) return allocation;
|
| - } else {
|
| - new_constant_pool = empty_constant_pool_array();
|
| + if (FLAG_enable_ool_constant_pool) {
|
| + ConstantPoolArray* constant_pool =
|
| + reinterpret_cast<ConstantPoolArray*>(code->constant_pool());
|
| + if (constant_pool != empty_constant_pool_array()) {
|
| + // Copy the constant pool, since edits to the copied code may modify
|
| + // the constant pool.
|
| + allocation = CopyConstantPoolArray(constant_pool);
|
| + if (!allocation.To(&new_constant_pool)) return allocation;
|
| + } else {
|
| + new_constant_pool = empty_constant_pool_array();
|
| + }
|
| }
|
|
|
| HeapObject* result;
|
| @@ -3730,8 +3733,10 @@ AllocationResult Heap::CopyCode(Code* code) {
|
| CopyBlock(new_addr, old_addr, obj_size);
|
| Code* new_code = Code::cast(result);
|
|
|
| - // Update the constant pool.
|
| - new_code->set_constant_pool(new_constant_pool);
|
| + if (FLAG_enable_ool_constant_pool) {
|
| + // Update the constant pool.
|
| + new_code->set_constant_pool(new_constant_pool);
|
| + }
|
|
|
| // Relocate the copy.
|
| DCHECK(isolate_->code_range() == NULL || !isolate_->code_range()->valid() ||
|
| @@ -3751,14 +3756,17 @@ AllocationResult Heap::CopyCode(Code* code, Vector<byte> reloc_info) {
|
| if (!allocation.To(&reloc_info_array)) return allocation;
|
| }
|
| HeapObject* new_constant_pool;
|
| - if (FLAG_enable_ool_constant_pool &&
|
| - code->constant_pool() != empty_constant_pool_array()) {
|
| - // Copy the constant pool, since edits to the copied code may modify
|
| - // the constant pool.
|
| - AllocationResult allocation = CopyConstantPoolArray(code->constant_pool());
|
| - if (!allocation.To(&new_constant_pool)) return allocation;
|
| - } else {
|
| - new_constant_pool = empty_constant_pool_array();
|
| + if (FLAG_enable_ool_constant_pool) {
|
| + ConstantPoolArray* constant_pool =
|
| + reinterpret_cast<ConstantPoolArray*>(code->constant_pool());
|
| + if (constant_pool != empty_constant_pool_array()) {
|
| + // Copy the constant pool, since edits to the copied code may modify
|
| + // the constant pool.
|
| + AllocationResult allocation = CopyConstantPoolArray(constant_pool);
|
| + if (!allocation.To(&new_constant_pool)) return allocation;
|
| + } else {
|
| + new_constant_pool = empty_constant_pool_array();
|
| + }
|
| }
|
|
|
| int new_body_size = RoundUp(code->instruction_size(), kObjectAlignment);
|
| @@ -3784,8 +3792,10 @@ AllocationResult Heap::CopyCode(Code* code, Vector<byte> reloc_info) {
|
| Code* new_code = Code::cast(result);
|
| new_code->set_relocation_info(reloc_info_array);
|
|
|
| - // Update constant pool.
|
| - new_code->set_constant_pool(new_constant_pool);
|
| + if (FLAG_enable_ool_constant_pool) {
|
| + // Update constant pool.
|
| + new_code->set_constant_pool(new_constant_pool);
|
| + }
|
|
|
| // Copy patched rinfo.
|
| CopyBytes(new_code->relocation_start(), reloc_info.start(),
|
|
|