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)); |
+ } |
} |