@@ -310,12 +310,12 @@ class StressOffThreadDeserializeThread final : public base::Thread {
310310 CodeSerializer::StartDeserializeOffThread (&local_isolate, cached_data_);
311311 }
312312
313- MaybeHandle<SharedFunctionInfo> Finalize (Isolate* isolate,
314- Handle<String> source,
315- ScriptOriginOptions origin_options ) {
313+ MaybeHandle<SharedFunctionInfo> Finalize (
314+ Isolate* isolate, Handle<String> source,
315+ const ScriptDetails& script_details ) {
316316 return CodeSerializer::FinishOffThreadDeserialize (
317317 isolate, std::move (off_thread_data_), cached_data_, source,
318- origin_options );
318+ script_details );
319319 }
320320
321321 private:
@@ -326,7 +326,8 @@ class StressOffThreadDeserializeThread final : public base::Thread {
326326
327327void FinalizeDeserialization (Isolate* isolate,
328328 Handle<SharedFunctionInfo> result,
329- const base::ElapsedTimer& timer) {
329+ const base::ElapsedTimer& timer,
330+ const ScriptDetails& script_details) {
330331 const bool log_code_creation =
331332 isolate->v8_file_logger ()->is_listening_to_code_events () ||
332333 isolate->is_profiling () ||
@@ -381,8 +382,14 @@ void FinalizeDeserialization(Isolate* isolate,
381382 }
382383 }
383384
385+ Handle<Script> script (Script::cast (result->script ()), isolate);
386+ // Reset the script details, including host-defined options.
387+ {
388+ DisallowGarbageCollection no_gc;
389+ SetScriptFieldsFromDetails (isolate, *script, script_details, &no_gc);
390+ }
391+
384392 if (needs_source_positions) {
385- Handle<Script> script (Script::cast (result->script ()), isolate);
386393 Script::InitLineEnds (isolate, script);
387394 }
388395}
@@ -406,13 +413,13 @@ void BaselineBatchCompileIfSparkplugCompiled(Isolate* isolate, Script script) {
406413
407414MaybeHandle<SharedFunctionInfo> CodeSerializer::Deserialize (
408415 Isolate* isolate, AlignedCachedData* cached_data, Handle<String> source,
409- ScriptOriginOptions origin_options ,
416+ const ScriptDetails& script_details ,
410417 MaybeHandle<Script> maybe_cached_script) {
411418 if (v8_flags.stress_background_compile ) {
412419 StressOffThreadDeserializeThread thread (isolate, cached_data);
413420 CHECK (thread.Start ());
414421 thread.Join ();
415- return thread.Finalize (isolate, source, origin_options );
422+ return thread.Finalize (isolate, source, script_details );
416423 // TODO(leszeks): Compare off-thread deserialized data to on-thread.
417424 }
418425
@@ -425,7 +432,8 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::Deserialize(
425432 SerializedCodeSanityCheckResult sanity_check_result =
426433 SerializedCodeSanityCheckResult::kSuccess ;
427434 const SerializedCodeData scd = SerializedCodeData::FromCachedData (
428- cached_data, SerializedCodeData::SourceHash (source, origin_options),
435+ cached_data,
436+ SerializedCodeData::SourceHash (source, script_details.origin_options ),
429437 &sanity_check_result);
430438 if (sanity_check_result != SerializedCodeSanityCheckResult::kSuccess ) {
431439 if (v8_flags.profile_deserialization )
@@ -471,7 +479,7 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::Deserialize(
471479 PrintF (" [Deserializing from %d bytes took %0.3f ms]\n " , length, ms);
472480 }
473481
474- FinalizeDeserialization (isolate, result, timer);
482+ FinalizeDeserialization (isolate, result, timer, script_details );
475483
476484 return scope.CloseAndEscape (result);
477485}
@@ -526,7 +534,7 @@ CodeSerializer::StartDeserializeOffThread(LocalIsolate* local_isolate,
526534MaybeHandle<SharedFunctionInfo> CodeSerializer::FinishOffThreadDeserialize (
527535 Isolate* isolate, OffThreadDeserializeData&& data,
528536 AlignedCachedData* cached_data, Handle<String> source,
529- ScriptOriginOptions origin_options ,
537+ const ScriptDetails& script_details ,
530538 BackgroundMergeTask* background_merge_task) {
531539 base::ElapsedTimer timer;
532540 if (v8_flags.profile_deserialization || v8_flags.log_function_events )
@@ -541,7 +549,8 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::FinishOffThreadDeserialize(
541549 data.sanity_check_result ;
542550 const SerializedCodeData scd =
543551 SerializedCodeData::FromPartiallySanityCheckedCachedData (
544- cached_data, SerializedCodeData::SourceHash (source, origin_options),
552+ cached_data,
553+ SerializedCodeData::SourceHash (source, script_details.origin_options ),
545554 &sanity_check_result);
546555 if (sanity_check_result != SerializedCodeSanityCheckResult::kSuccess ) {
547556 // The only case where the deserialization result could exist despite a
@@ -612,7 +621,7 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::FinishOffThreadDeserialize(
612621 length, ms);
613622 }
614623
615- FinalizeDeserialization (isolate, result, timer);
624+ FinalizeDeserialization (isolate, result, timer, script_details );
616625
617626 DCHECK (!background_merge_task ||
618627 !background_merge_task->HasPendingForegroundWork ());
0 commit comments