@@ -283,37 +283,17 @@ void OptimizedCompilationJob::RecordFunctionCompilation(
283283 time_taken_to_execute_.InMillisecondsF () +
284284 time_taken_to_finalize_.InMillisecondsF ();
285285
286- LogFunctionCompilation (tag, compilation_info ()->shared_info (),
287- parse_info ()->script (), abstract_code, true ,
288- time_taken_ms, isolate);
286+ Handle<Script> script (
287+ Script::cast (compilation_info ()->shared_info ()->script ()));
288+ LogFunctionCompilation (tag, compilation_info ()->shared_info (), script,
289+ abstract_code, true , time_taken_ms, isolate);
289290}
290291
291292// ----------------------------------------------------------------------------
292293// Local helper methods that make up the compilation pipeline.
293294
294295namespace {
295296
296- void EnsureFeedbackMetadata (UnoptimizedCompilationInfo* compilation_info,
297- Handle<SharedFunctionInfo> shared_info,
298- Isolate* isolate) {
299- // If no type feedback metadata exists, create it. At this point the
300- // AstNumbering pass has already run. Note the snapshot can contain outdated
301- // vectors for a different configuration, hence we also recreate a new vector
302- // when the function is not compiled (i.e. no code was serialized).
303-
304- if (shared_info->feedback_metadata ()->is_empty () ||
305- !shared_info->is_compiled ()) {
306- Handle<FeedbackMetadata> feedback_metadata = FeedbackMetadata::New (
307- isolate, compilation_info->feedback_vector_spec ());
308- shared_info->set_feedback_metadata (*feedback_metadata);
309- }
310-
311- // It's very important that recompiles do not alter the structure of the type
312- // feedback vector. Verify that the structure fits the function literal.
313- CHECK (!shared_info->feedback_metadata ()->SpecDiffersFrom (
314- compilation_info->feedback_vector_spec ()));
315- }
316-
317297bool UseAsmWasm (FunctionLiteral* literal, bool asm_wasm_broken) {
318298 // Check whether asm.js validation is enabled.
319299 if (!FLAG_validate_asm) return false ;
@@ -335,23 +315,25 @@ void InstallUnoptimizedCode(UnoptimizedCompilationInfo* compilation_info,
335315 DCHECK_EQ (shared_info->language_mode (),
336316 compilation_info->literal ()->language_mode ());
337317
338- // Ensure feedback metadata is installed.
339- EnsureFeedbackMetadata (compilation_info, shared_info, isolate);
340-
341318 // Update the shared function info with the scope info.
342319 Handle<ScopeInfo> scope_info = compilation_info->scope ()->scope_info ();
343320 shared_info->set_scope_info (*scope_info);
344- Scope* outer_scope = compilation_info->scope ()->GetOuterScopeWithContext ();
345- if (outer_scope)
346- shared_info->set_outer_scope_info (*outer_scope->scope_info ());
347321
348322 if (compilation_info->has_bytecode_array ()) {
349323 DCHECK (!shared_info->HasBytecodeArray ()); // Only compiled once.
350324 DCHECK (!compilation_info->has_asm_wasm_data ());
325+ DCHECK (!shared_info->HasFeedbackMetadata ());
326+
327+ Handle<FeedbackMetadata> feedback_metadata = FeedbackMetadata::New (
328+ isolate, compilation_info->feedback_vector_spec ());
329+
351330 shared_info->set_bytecode_array (*compilation_info->bytecode_array ());
331+ shared_info->set_feedback_metadata (*feedback_metadata);
352332 } else {
353333 DCHECK (compilation_info->has_asm_wasm_data ());
354334 shared_info->set_asm_wasm_data (*compilation_info->asm_wasm_data ());
335+ shared_info->set_feedback_metadata (
336+ isolate->heap ()->empty_feedback_metadata ());
355337 }
356338
357339 // Install coverage info on the shared function info.
@@ -690,7 +672,6 @@ MaybeHandle<Code> GetOptimizedCode(Handle<JSFunction> function,
690672 std::unique_ptr<OptimizedCompilationJob> job (
691673 compiler::Pipeline::NewCompilationJob (function, has_script));
692674 OptimizedCompilationInfo* compilation_info = job->compilation_info ();
693- ParseInfo* parse_info = job->parse_info ();
694675
695676 compilation_info->SetOptimizingForOsr (osr_offset, osr_frame);
696677
@@ -734,7 +715,6 @@ MaybeHandle<Code> GetOptimizedCode(Handle<JSFunction> function,
734715
735716 // Reopen handles in the new CompilationHandleScope.
736717 compilation_info->ReopenHandlesInNewHandleScope ();
737- parse_info->ReopenHandlesInNewHandleScope ();
738718
739719 if (mode == ConcurrencyMode::kConcurrent ) {
740720 if (GetOptimizedCodeLater (job.get (), isolate)) {
@@ -843,9 +823,8 @@ MaybeHandle<SharedFunctionInfo> FinalizeTopLevel(
843823 DCHECK_EQ (kNoSourcePosition ,
844824 parse_info->literal ()->function_token_position ());
845825 Handle<SharedFunctionInfo> shared_info =
846- isolate->factory ()->NewSharedFunctionInfoForLiteral (parse_info->literal (),
847- parse_info->script ());
848- shared_info->set_is_toplevel (true );
826+ isolate->factory ()->NewSharedFunctionInfoForLiteral (
827+ parse_info->literal (), parse_info->script (), true );
849828
850829 // Finalize compilation of the unoptimized bytecode or asm-js data.
851830 if (!FinalizeUnoptimizedCode (parse_info, isolate, shared_info,
@@ -1900,12 +1879,8 @@ Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfo(
19001879
19011880 // Allocate a shared function info object which will be compiled lazily.
19021881 Handle<SharedFunctionInfo> result =
1903- isolate->factory ()->NewSharedFunctionInfoForLiteral (literal, script);
1904- result->set_is_toplevel (false );
1905- Scope* outer_scope = literal->scope ()->GetOuterScopeWithContext ();
1906- if (outer_scope) {
1907- result->set_outer_scope_info (*outer_scope->scope_info ());
1908- }
1882+ isolate->factory ()->NewSharedFunctionInfoForLiteral (literal, script,
1883+ false );
19091884 return result;
19101885}
19111886
0 commit comments