@@ -310,12 +310,12 @@ class StressOffThreadDeserializeThread final : public base::Thread {
310
310
CodeSerializer::StartDeserializeOffThread (&local_isolate, cached_data_);
311
311
}
312
312
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 ) {
316
316
return CodeSerializer::FinishOffThreadDeserialize (
317
317
isolate, std::move (off_thread_data_), cached_data_, source,
318
- origin_options );
318
+ script_details );
319
319
}
320
320
321
321
private:
@@ -326,7 +326,8 @@ class StressOffThreadDeserializeThread final : public base::Thread {
326
326
327
327
void FinalizeDeserialization (Isolate* isolate,
328
328
Handle<SharedFunctionInfo> result,
329
- const base::ElapsedTimer& timer) {
329
+ const base::ElapsedTimer& timer,
330
+ const ScriptDetails& script_details) {
330
331
const bool log_code_creation =
331
332
isolate->v8_file_logger ()->is_listening_to_code_events () ||
332
333
isolate->is_profiling () ||
@@ -381,8 +382,14 @@ void FinalizeDeserialization(Isolate* isolate,
381
382
}
382
383
}
383
384
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
+
384
392
if (needs_source_positions) {
385
- Handle<Script> script (Script::cast (result->script ()), isolate);
386
393
Script::InitLineEnds (isolate, script);
387
394
}
388
395
}
@@ -406,13 +413,13 @@ void BaselineBatchCompileIfSparkplugCompiled(Isolate* isolate, Script script) {
406
413
407
414
MaybeHandle<SharedFunctionInfo> CodeSerializer::Deserialize (
408
415
Isolate* isolate, AlignedCachedData* cached_data, Handle<String> source,
409
- ScriptOriginOptions origin_options ,
416
+ const ScriptDetails& script_details ,
410
417
MaybeHandle<Script> maybe_cached_script) {
411
418
if (v8_flags.stress_background_compile ) {
412
419
StressOffThreadDeserializeThread thread (isolate, cached_data);
413
420
CHECK (thread.Start ());
414
421
thread.Join ();
415
- return thread.Finalize (isolate, source, origin_options );
422
+ return thread.Finalize (isolate, source, script_details );
416
423
// TODO(leszeks): Compare off-thread deserialized data to on-thread.
417
424
}
418
425
@@ -425,7 +432,8 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::Deserialize(
425
432
SerializedCodeSanityCheckResult sanity_check_result =
426
433
SerializedCodeSanityCheckResult::kSuccess ;
427
434
const SerializedCodeData scd = SerializedCodeData::FromCachedData (
428
- cached_data, SerializedCodeData::SourceHash (source, origin_options),
435
+ cached_data,
436
+ SerializedCodeData::SourceHash (source, script_details.origin_options ),
429
437
&sanity_check_result);
430
438
if (sanity_check_result != SerializedCodeSanityCheckResult::kSuccess ) {
431
439
if (v8_flags.profile_deserialization )
@@ -471,7 +479,7 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::Deserialize(
471
479
PrintF (" [Deserializing from %d bytes took %0.3f ms]\n " , length, ms);
472
480
}
473
481
474
- FinalizeDeserialization (isolate, result, timer);
482
+ FinalizeDeserialization (isolate, result, timer, script_details );
475
483
476
484
return scope.CloseAndEscape (result);
477
485
}
@@ -526,7 +534,7 @@ CodeSerializer::StartDeserializeOffThread(LocalIsolate* local_isolate,
526
534
MaybeHandle<SharedFunctionInfo> CodeSerializer::FinishOffThreadDeserialize (
527
535
Isolate* isolate, OffThreadDeserializeData&& data,
528
536
AlignedCachedData* cached_data, Handle<String> source,
529
- ScriptOriginOptions origin_options ,
537
+ const ScriptDetails& script_details ,
530
538
BackgroundMergeTask* background_merge_task) {
531
539
base::ElapsedTimer timer;
532
540
if (v8_flags.profile_deserialization || v8_flags.log_function_events )
@@ -541,7 +549,8 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::FinishOffThreadDeserialize(
541
549
data.sanity_check_result ;
542
550
const SerializedCodeData scd =
543
551
SerializedCodeData::FromPartiallySanityCheckedCachedData (
544
- cached_data, SerializedCodeData::SourceHash (source, origin_options),
552
+ cached_data,
553
+ SerializedCodeData::SourceHash (source, script_details.origin_options ),
545
554
&sanity_check_result);
546
555
if (sanity_check_result != SerializedCodeSanityCheckResult::kSuccess ) {
547
556
// The only case where the deserialization result could exist despite a
@@ -612,7 +621,7 @@ MaybeHandle<SharedFunctionInfo> CodeSerializer::FinishOffThreadDeserialize(
612
621
length, ms);
613
622
}
614
623
615
- FinalizeDeserialization (isolate, result, timer);
624
+ FinalizeDeserialization (isolate, result, timer, script_details );
616
625
617
626
DCHECK (!background_merge_task ||
618
627
!background_merge_task->HasPendingForegroundWork ());
0 commit comments