| Index: src/snapshot/serialize.cc
|
| diff --git a/src/snapshot/serialize.cc b/src/snapshot/serialize.cc
|
| index a3a22336d108d65f37cb3cb23e68e6da9eb5c029..e7976aca6fb6821f4b406ce03c696fd3ecf9db1f 100644
|
| --- a/src/snapshot/serialize.cc
|
| +++ b/src/snapshot/serialize.cc
|
| @@ -633,7 +633,7 @@ MaybeHandle<SharedFunctionInfo> Deserializer::DeserializeCode(
|
| DeserializeDeferredObjects();
|
| result = Handle<SharedFunctionInfo>(SharedFunctionInfo::cast(root));
|
| }
|
| - CommitNewInternalizedStrings(isolate);
|
| + CommitPostProcessedObjects(isolate);
|
| return scope.CloseAndEscape(result);
|
| }
|
| }
|
| @@ -726,8 +726,7 @@ HeapObject* Deserializer::PostProcessNewObject(HeapObject* obj, int space) {
|
| }
|
| }
|
| } else if (obj->IsScript()) {
|
| - // Assign a new script id to avoid collision.
|
| - Script::cast(obj)->set_id(isolate_->heap()->NextScriptId());
|
| + new_scripts_.Add(handle(Script::cast(obj)));
|
| } else {
|
| DCHECK(CanBeDeferred(obj));
|
| }
|
| @@ -760,7 +759,7 @@ HeapObject* Deserializer::PostProcessNewObject(HeapObject* obj, int space) {
|
| }
|
|
|
|
|
| -void Deserializer::CommitNewInternalizedStrings(Isolate* isolate) {
|
| +void Deserializer::CommitPostProcessedObjects(Isolate* isolate) {
|
| StringTable::EnsureCapacityForDeserialization(
|
| isolate, new_internalized_strings_.length());
|
| for (Handle<String> string : new_internalized_strings_) {
|
| @@ -768,6 +767,15 @@ void Deserializer::CommitNewInternalizedStrings(Isolate* isolate) {
|
| DCHECK_NULL(StringTable::LookupKeyIfExists(isolate, &key));
|
| StringTable::LookupKey(isolate, &key);
|
| }
|
| +
|
| + Heap* heap = isolate->heap();
|
| + Factory* factory = isolate->factory();
|
| + for (Handle<Script> script : new_scripts_) {
|
| + // Assign a new script id to avoid collision.
|
| + script->set_id(isolate_->heap()->NextScriptId());
|
| + // Add script to list.
|
| + heap->set_script_list(*WeakFixedArray::Add(factory->script_list(), script));
|
| + }
|
| }
|
|
|
|
|
|
|