Chromium Code Reviews| Index: src/serialize.cc |
| diff --git a/src/serialize.cc b/src/serialize.cc |
| index 1d33f4f0623e3a38f2f46247b06a6e64eb93f60b..c10f66244bf5a85fd01bee0b7175273496df25f4 100644 |
| --- a/src/serialize.cc |
| +++ b/src/serialize.cc |
| @@ -1048,6 +1048,7 @@ void Deserializer::ReadData(Object** current, Object** limit, int source_space, |
| break; |
| } |
| + case kInternalReferenceEncoded: |
| case kInternalReference: { |
| // Internal reference address is not encoded via skip, but by offset |
| // from code entry. |
| @@ -1059,7 +1060,13 @@ void Deserializer::ReadData(Object** current, Object** limit, int source_space, |
| DCHECK(0 <= target_offset && target_offset <= code->instruction_size()); |
| Address pc = code->entry() + pc_offset; |
| Address target = code->entry() + target_offset; |
| - Assembler::deserialization_set_target_internal_reference_at(pc, target); |
| + if (data == kInternalReference) { |
| + Assembler::deserialization_set_target_internal_reference_at(pc, |
| + target); |
| + } else { |
| + Assembler::deserialization_set_target_internal_reference_encoded_at( |
| + pc, target); |
| + } |
| break; |
| } |
| @@ -1827,7 +1834,9 @@ void Serializer::ObjectSerializer::VisitInternalReference(RelocInfo* rinfo) { |
| pc_offset <= Code::cast(object_)->instruction_size()); |
| DCHECK(0 <= target_offset && |
| target_offset <= Code::cast(object_)->instruction_size()); |
| - sink_->Put(kInternalReference, "InternalRef"); |
| + rinfo->rmode() == RelocInfo::INTERNAL_REFERENCE |
|
yangguo
2015/03/19 19:16:33
Please do not use a tertiary operator like this. I
balazs.kilvady
2015/03/20 11:14:42
Done.
|
| + ? sink_->Put(kInternalReference, "InternalRef") |
| + : sink_->Put(kInternalReferenceEncoded, "InternalRefEnc"); |
| sink_->PutInt(static_cast<uintptr_t>(pc_offset), "internal ref address"); |
| sink_->PutInt(static_cast<uintptr_t>(target_offset), "internal ref value"); |
| } |