Index: src/serialize.h |
diff --git a/src/serialize.h b/src/serialize.h |
index 066d75fb0b38bb34c76e232d17edc8f77b43bafe..71b274b330e20f535fa2a3bd93389337fdbf2251 100644 |
--- a/src/serialize.h |
+++ b/src/serialize.h |
@@ -257,7 +257,7 @@ class Deserializer: public SerializerDeserializer { |
// Serialized user code reference certain objects that are provided in a list |
// By calling this method, we assume that we are deserializing user code. |
- void SetAttachedObjects(Vector<Object*>* attached_objects) { |
+ void SetAttachedObjects(Vector<Handle<Object> >* attached_objects) { |
attached_objects_ = attached_objects; |
} |
@@ -308,7 +308,7 @@ class Deserializer: public SerializerDeserializer { |
Isolate* isolate_; |
// Objects from the attached object descriptions in the serialized user code. |
- Vector<Object*>* attached_objects_; |
+ Vector<Handle<Object> >* attached_objects_; |
SnapshotByteSource* source_; |
// This is the address of the next object that will be allocated in each |
@@ -459,12 +459,10 @@ class Serializer : public SerializerDeserializer { |
HowToCode how_to_code, |
WhereToPoint where_to_point, |
int skip) = 0; |
- void SerializeReferenceToPreviousObject( |
- int space, |
- int address, |
- HowToCode how_to_code, |
- WhereToPoint where_to_point, |
- int skip); |
+ void SerializeReferenceToPreviousObject(HeapObject* heap_object, |
+ HowToCode how_to_code, |
+ WhereToPoint where_to_point, |
+ int skip); |
void InitializeAllocators(); |
// This will return the space for an object. |
static int SpaceOfObject(HeapObject* object); |
@@ -594,20 +592,29 @@ class CodeSerializer : public Serializer { |
Handle<String> source); |
static const int kSourceObjectIndex = 0; |
+ static const int kCodeStubsBaseIndex = 1; |
String* source() { |
DCHECK(!AllowHeapAllocation::IsAllowed()); |
return source_; |
} |
+ List<uint32_t>* stub_keys() { return &stub_keys_; } |
+ |
private: |
void SerializeBuiltin(Code* builtin, HowToCode how_to_code, |
WhereToPoint where_to_point, int skip); |
+ void SerializeCodeStub(Code* code, HowToCode how_to_code, |
+ WhereToPoint where_to_point, int skip); |
void SerializeSourceObject(HowToCode how_to_code, WhereToPoint where_to_point, |
int skip); |
+ void SerializeHeapObject(HeapObject* heap_object, HowToCode how_to_code, |
+ WhereToPoint where_to_point, int skip); |
+ int AddCodeStubKey(uint32_t stub_key); |
DisallowHeapAllocation no_gc_; |
String* source_; |
+ List<uint32_t> stub_keys_; |
DISALLOW_COPY_AND_ASSIGN(CodeSerializer); |
}; |
@@ -638,12 +645,22 @@ class SerializedCodeData { |
return result; |
} |
+ Vector<const uint32_t> CodeStubKeys() const { |
+ return Vector<const uint32_t>( |
+ reinterpret_cast<const uint32_t*>(script_data_->data() + kHeaderSize), |
+ GetHeaderValue(kNumCodeStubKeysOffset)); |
+ } |
+ |
const byte* Payload() const { |
- return script_data_->data() + kHeaderEntries * kIntSize; |
+ int code_stubs_size = GetHeaderValue(kNumCodeStubKeysOffset) * kInt32Size; |
+ return script_data_->data() + kHeaderSize + code_stubs_size; |
} |
int PayloadLength() const { |
- return script_data_->length() - kHeaderEntries * kIntSize; |
+ int payload_length = GetHeaderValue(kPayloadLengthOffset); |
+ DCHECK_EQ(script_data_->data() + script_data_->length(), |
+ Payload() + payload_length); |
+ return payload_length; |
} |
int GetReservation(int space) const { |
@@ -666,10 +683,21 @@ class SerializedCodeData { |
// The data header consists of int-sized entries: |
// [0] version hash |
- // [1..7] reservation sizes for spaces from NEW_SPACE to PROPERTY_CELL_SPACE. |
+ // [1] number of code stub keys |
+ // [2] payload length |
+ // [3..9] reservation sizes for spaces from NEW_SPACE to PROPERTY_CELL_SPACE. |
static const int kCheckSumOffset = 0; |
- static const int kReservationsOffset = 1; |
- static const int kHeaderEntries = 8; |
+ static const int kNumCodeStubKeysOffset = 1; |
+ static const int kPayloadLengthOffset = 2; |
+ static const int kReservationsOffset = 3; |
+ |
+ static const int kNumSpaces = PROPERTY_CELL_SPACE - NEW_SPACE + 1; |
+ static const int kHeaderEntries = kReservationsOffset + kNumSpaces; |
+ static const int kHeaderSize = kHeaderEntries * kIntSize; |
+ |
+ // Following the header, we store, in sequential order |
+ // - code stub keys |
+ // - serialization payload |
ScriptData* script_data_; |
bool owns_script_data_; |