| Index: src/objects-inl.h
|
| diff --git a/src/objects-inl.h b/src/objects-inl.h
|
| index 94a3cb3c947a63512d0515cee178bc5e47bcbee5..952849d89db1123ea1848a93e4d99f1dfc2e4d2d 100644
|
| --- a/src/objects-inl.h
|
| +++ b/src/objects-inl.h
|
| @@ -5129,12 +5129,23 @@ bool Code::is_debug_stub() {
|
| }
|
|
|
|
|
| -ConstantPoolArray* Code::constant_pool() {
|
| - return ConstantPoolArray::cast(READ_FIELD(this, kConstantPoolOffset));
|
| +Address Code::constant_pool() {
|
| + Address constant_pool = NULL;
|
| + if (FLAG_enable_ool_constant_pool) {
|
| + constant_pool =
|
| + reinterpret_cast<Address>(READ_FIELD(this, kConstantPoolOffset));
|
| + } else if (FLAG_enable_embedded_constant_pool) {
|
| + int offset = constant_pool_offset();
|
| + if (offset < instruction_size()) {
|
| + constant_pool = FIELD_ADDR(this, kHeaderSize + offset);
|
| + }
|
| + }
|
| + return constant_pool;
|
| }
|
|
|
|
|
| void Code::set_constant_pool(Object* value) {
|
| + DCHECK(FLAG_enable_ool_constant_pool);
|
| DCHECK(value->IsConstantPoolArray());
|
| WRITE_FIELD(this, kConstantPoolOffset, value);
|
| WRITE_BARRIER(GetHeap(), this, kConstantPoolOffset, value);
|
| @@ -6293,6 +6304,7 @@ SMI_ACCESSORS(JSMessageObject, end_position, kEndPositionOffset)
|
|
|
| INT_ACCESSORS(Code, instruction_size, kInstructionSizeOffset)
|
| INT_ACCESSORS(Code, prologue_offset, kPrologueOffset)
|
| +INT_ACCESSORS(Code, constant_pool_offset, kConstantPoolOffset)
|
| ACCESSORS(Code, relocation_info, ByteArray, kRelocationInfoOffset)
|
| ACCESSORS(Code, handler_table, FixedArray, kHandlerTableOffset)
|
| ACCESSORS(Code, deoptimization_data, FixedArray, kDeoptimizationDataOffset)
|
| @@ -6304,7 +6316,9 @@ void Code::WipeOutHeader() {
|
| WRITE_FIELD(this, kRelocationInfoOffset, NULL);
|
| WRITE_FIELD(this, kHandlerTableOffset, NULL);
|
| WRITE_FIELD(this, kDeoptimizationDataOffset, NULL);
|
| - WRITE_FIELD(this, kConstantPoolOffset, NULL);
|
| + if (FLAG_enable_ool_constant_pool) {
|
| + WRITE_FIELD(this, kConstantPoolOffset, NULL);
|
| + }
|
| // Do not wipe out major/minor keys on a code stub or IC
|
| if (!READ_FIELD(this, kTypeFeedbackInfoOffset)->IsSmi()) {
|
| WRITE_FIELD(this, kTypeFeedbackInfoOffset, NULL);
|
| @@ -6818,6 +6832,7 @@ void String::SetForwardedInternalizedString(String* canonical) {
|
| DCHECK(canonical->IsInternalizedString());
|
| DCHECK(canonical->HasHashCode());
|
| WRITE_FIELD(this, kHashFieldSlot, canonical);
|
| +
|
| // Setting the hash field to a tagged value sets the LSB, causing the hash
|
| // code to be interpreted as uninitialized. We use this fact to recognize
|
| // that we have a forwarded string.
|
|
|