@@ -314,12 +314,12 @@ class StressOffThreadDeserializeThread final : public base::Thread {
314314 CodeSerializer::StartDeserializeOffThread (&local_isolate, cached_data_);
315315 }
316316
317- MaybeHandle<SharedFunctionInfo> Finalize (Isolate* isolate,
318- Handle<String> source,
319- ScriptOriginOptions origin_options ) {
317+ MaybeHandle<SharedFunctionInfo> Finalize (
318+ Isolate* isolate, Handle<String> source,
319+ const ScriptDetails& script_details ) {
320320 return CodeSerializer::FinishOffThreadDeserialize (
321321 isolate, std::move (off_thread_data_), cached_data_, source,
322- origin_options );
322+ script_details );
323323 }
324324
325325 private:
@@ -330,7 +330,8 @@ class StressOffThreadDeserializeThread final : public base::Thread {
330330
331331void FinalizeDeserialization (Isolate* isolate,
332332 Handle<SharedFunctionInfo> result,
333- const base::ElapsedTimer& timer) {
333+ const base::ElapsedTimer& timer,
334+ const ScriptDetails& script_details) {
334335 // Devtools can report time in this function as profiler overhead, since none
335336 // of the following tasks would need to happen normally.
336337 TRACE_EVENT0 (TRACE_DISABLED_BY_DEFAULT (" v8.compile" ),
@@ -343,10 +344,16 @@ void FinalizeDeserialization(Isolate* isolate,
343344 log_code_creation);
344345 }
345346
347+ Handle<Script> script (Script::cast (result->script ()), isolate);
348+ // Reset the script details, including host-defined options.
349+ {
350+ DisallowGarbageCollection no_gc;
351+ SetScriptFieldsFromDetails (isolate, *script, script_details, &no_gc);
352+ }
353+
346354 bool needs_source_positions = isolate->NeedsSourcePositions ();
347355 if (!log_code_creation && !needs_source_positions) return ;
348356
349- Handle<Script> script (Script::cast (result->script ()), isolate);
350357 if (needs_source_positions) {
351358 Script::InitLineEnds (isolate, script);
352359 }
@@ -430,13 +437,13 @@ const char* ToString(SerializedCodeSanityCheckResult result) {
430437
431438MaybeHandle<SharedFunctionInfo> CodeSerializer::Deserialize (
432439 Isolate* isolate, AlignedCachedData* cached_data, Handle<String> source,
433- ScriptOriginOptions origin_options ,
440+ const ScriptDetails& script_details ,
434441 MaybeHandle<Script> maybe_cached_script) {
435442 if (v8_flags.stress_background_compile ) {
436443 StressOffThreadDeserializeThread thread (isolate, cached_data);
437444 CHECK (thread.Start ());
438445 thread.Join ();
439- return thread.Finalize (isolate, source, origin_options );
446+ return thread.Finalize (isolate, source, script_details );
440447 // TODO(leszeks): Compare off-thread deserialized data to on-thread.
441448 }
442449
@@ -451,7 +458,7 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::Deserialize(
451458 SerializedCodeSanityCheckResult::kSuccess ;
452459 const SerializedCodeData scd = SerializedCodeData::FromCachedData (
453460 isolate, cached_data,
454- SerializedCodeData::SourceHash (source, origin_options),
461+ SerializedCodeData::SourceHash (source, script_details. origin_options ),
455462 &sanity_check_result);
456463 if (sanity_check_result != SerializedCodeSanityCheckResult::kSuccess ) {
457464 if (v8_flags.profile_deserialization ) {
@@ -498,7 +505,7 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::Deserialize(
498505 PrintF (" [Deserializing from %d bytes took %0.3f ms]\n " , length, ms);
499506 }
500507
501- FinalizeDeserialization (isolate, result, timer);
508+ FinalizeDeserialization (isolate, result, timer, script_details );
502509
503510 return scope.CloseAndEscape (result);
504511}
@@ -553,7 +560,7 @@ CodeSerializer::StartDeserializeOffThread(LocalIsolate* local_isolate,
553560MaybeHandle<SharedFunctionInfo> CodeSerializer::FinishOffThreadDeserialize (
554561 Isolate* isolate, OffThreadDeserializeData&& data,
555562 AlignedCachedData* cached_data, Handle<String> source,
556- ScriptOriginOptions origin_options ,
563+ const ScriptDetails& script_details ,
557564 BackgroundMergeTask* background_merge_task) {
558565 base::ElapsedTimer timer;
559566 if (v8_flags.profile_deserialization || v8_flags.log_function_events ) {
@@ -569,7 +576,8 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::FinishOffThreadDeserialize(
569576 data.sanity_check_result ;
570577 const SerializedCodeData scd =
571578 SerializedCodeData::FromPartiallySanityCheckedCachedData (
572- cached_data, SerializedCodeData::SourceHash (source, origin_options),
579+ cached_data,
580+ SerializedCodeData::SourceHash (source, script_details.origin_options ),
573581 &sanity_check_result);
574582 if (sanity_check_result != SerializedCodeSanityCheckResult::kSuccess ) {
575583 // The only case where the deserialization result could exist despite a
@@ -642,7 +650,7 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::FinishOffThreadDeserialize(
642650 length, ms);
643651 }
644652
645- FinalizeDeserialization (isolate, result, timer);
653+ FinalizeDeserialization (isolate, result, timer, script_details );
646654
647655 DCHECK (!background_merge_task ||
648656 !background_merge_task->HasPendingForegroundWork ());
0 commit comments