Index: src/serialize.h |
diff --git a/src/serialize.h b/src/serialize.h |
index 499acde1a395895252d258048f822b96c822c578..53dc6eb87376707b9240d71a846d05f2b8aac93e 100644 |
--- a/src/serialize.h |
+++ b/src/serialize.h |
@@ -449,6 +449,9 @@ class SerializerDeserializer: public ObjectVisitor { |
// Used as index for the attached reference representing the source object. |
static const int kSourceObjectReference = 0; |
+ // Used as index for the attached reference representing the global proxy. |
+ static const int kGlobalProxyReference = 0; |
+ |
HotObjectsList hot_objects_; |
}; |
@@ -506,10 +509,10 @@ class Deserializer: public SerializerDeserializer { |
template <class Data> |
explicit Deserializer(Data* data) |
: isolate_(NULL), |
- attached_objects_(NULL), |
source_(data->Payload()), |
external_reference_decoder_(NULL), |
- deserialized_large_objects_(0) { |
+ deserialized_large_objects_(0), |
+ deserializing_user_code_(false) { |
DecodeReservation(data->Reservations()); |
} |
@@ -519,22 +522,21 @@ class Deserializer: public SerializerDeserializer { |
void Deserialize(Isolate* isolate); |
// Deserialize a single object and the objects reachable from it. |
- // We may want to abort gracefully even if deserialization fails. |
MaybeHandle<Object> DeserializePartial( |
- Isolate* isolate, Handle<FixedArray>* outdated_contexts_out); |
+ Isolate* isolate, Handle<JSGlobalProxy> global_proxy, |
+ Handle<FixedArray>* outdated_contexts_out); |
+ // Deserialize a shared function info. Fail gracefully. |
MaybeHandle<SharedFunctionInfo> DeserializeCode(Isolate* isolate); |
void FlushICacheForNewCodeObjects(); |
- // 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<Handle<Object> >* attached_objects) { |
+ // Pass a vector of externally-provided objects referenced by the snapshot. |
+ // The ownership to its backing store is handed over as well. |
+ void SetAttachedObjects(Vector<Handle<Object> > attached_objects) { |
attached_objects_ = attached_objects; |
} |
- bool deserializing_user_code() { return attached_objects_ != NULL; } |
- |
private: |
virtual void VisitPointers(Object** start, Object** end); |
@@ -544,6 +546,8 @@ class Deserializer: public SerializerDeserializer { |
void Initialize(Isolate* isolate); |
+ bool deserializing_user_code() { return deserializing_user_code_; } |
+ |
void DecodeReservation(Vector<const SerializedData::Reservation> res); |
bool ReserveSpace(); |
@@ -577,7 +581,7 @@ class Deserializer: public SerializerDeserializer { |
Isolate* isolate_; |
// Objects from the attached object descriptions in the serialized user code. |
- Vector<Handle<Object> >* attached_objects_; |
+ Vector<Handle<Object> > attached_objects_; |
SnapshotByteSource source_; |
// The address of the next object that will be allocated in each space. |
@@ -592,6 +596,8 @@ class Deserializer: public SerializerDeserializer { |
List<HeapObject*> deserialized_large_objects_; |
+ bool deserializing_user_code_; |
+ |
DISALLOW_COPY_AND_ASSIGN(Deserializer); |
}; |
@@ -745,7 +751,8 @@ class PartialSerializer : public Serializer { |
: Serializer(isolate, sink), |
startup_serializer_(startup_snapshot_serializer), |
outdated_contexts_(0), |
- global_object_(NULL) { |
+ global_object_(NULL), |
+ global_proxy_(NULL) { |
InitializeCodeAddressMap(); |
} |
@@ -774,6 +781,7 @@ class PartialSerializer : public Serializer { |
Serializer* startup_serializer_; |
List<BackReference> outdated_contexts_; |
Object* global_object_; |
+ Object* global_proxy_; |
DISALLOW_COPY_AND_ASSIGN(PartialSerializer); |
}; |
@@ -855,8 +863,6 @@ class CodeSerializer : public Serializer { |
WhereToPoint where_to_point); |
void SerializeCodeStub(uint32_t stub_key, HowToCode how_to_code, |
WhereToPoint where_to_point); |
- void SerializeSourceObject(HowToCode how_to_code, |
- WhereToPoint where_to_point); |
void SerializeGeneric(HeapObject* heap_object, HowToCode how_to_code, |
WhereToPoint where_to_point); |
int AddCodeStubKey(uint32_t stub_key); |