| Index: src/compiler.cc
|
| diff --git a/src/compiler.cc b/src/compiler.cc
|
| index a45d7aacc9679079ac36e6efcd14557f63600057..d3aaa69cdeb5c2713cd23ae080591e338e9f73b8 100644
|
| --- a/src/compiler.cc
|
| +++ b/src/compiler.cc
|
| @@ -366,7 +366,8 @@ bool ShouldUseIgnition(CompilationInfo* info) {
|
| return shared->PassesFilter(FLAG_ignition_filter);
|
| }
|
|
|
| -CompilationJob* GetUnoptimizedCompilationJob(CompilationInfo* info) {
|
| +CompilationJob* GetUnoptimizedCompilationJob(CompilationInfo* info,
|
| + LazyCompilationMode mode) {
|
| // Function should have been parsed and analyzed before creating a compilation
|
| // job.
|
| DCHECK_NOT_NULL(info->literal());
|
| @@ -374,9 +375,9 @@ CompilationJob* GetUnoptimizedCompilationJob(CompilationInfo* info) {
|
|
|
| EnsureFeedbackMetadata(info);
|
| if (ShouldUseIgnition(info)) {
|
| - return interpreter::Interpreter::NewCompilationJob(info);
|
| + return interpreter::Interpreter::NewCompilationJob(info, mode);
|
| } else {
|
| - return FullCodeGenerator::NewCompilationJob(info);
|
| + return FullCodeGenerator::NewCompilationJob(info, mode);
|
| }
|
| }
|
|
|
| @@ -439,7 +440,8 @@ bool GenerateUnoptimizedCode(CompilationInfo* info) {
|
| }
|
| }
|
|
|
| - std::unique_ptr<CompilationJob> job(GetUnoptimizedCompilationJob(info));
|
| + std::unique_ptr<CompilationJob> job(
|
| + GetUnoptimizedCompilationJob(info, LazyCompilationMode::kIfRequested));
|
| if (job->PrepareJob() != CompilationJob::SUCCEEDED) return false;
|
| if (job->ExecuteJob() != CompilationJob::SUCCEEDED) return false;
|
| if (FinalizeUnoptimizedCompilationJob(job.get()) !=
|
| @@ -1564,10 +1566,9 @@ Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfoForStreamedScript(
|
| return result;
|
| }
|
|
|
| -
|
| Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfo(
|
| FunctionLiteral* literal, Handle<Script> script,
|
| - CompilationInfo* outer_info) {
|
| + CompilationInfo* outer_info, LazyCompilationMode mode) {
|
| // Precondition: code has been parsed and scopes have been analyzed.
|
| Isolate* isolate = outer_info->isolate();
|
| MaybeHandle<SharedFunctionInfo> maybe_existing;
|
| @@ -1619,7 +1620,8 @@ Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfo(
|
| // This is especially important for generators. We must not replace the
|
| // code for generators, as there may be suspended generator objects.
|
| if (!result->is_compiled()) {
|
| - if (!literal->ShouldEagerCompile()) {
|
| + if (mode == LazyCompilationMode::kAlways ||
|
| + !literal->ShouldEagerCompile()) {
|
| info.SetCode(isolate->builtins()->CompileLazy());
|
| Scope* outer_scope = literal->scope()->GetOuterScopeWithContext();
|
| if (outer_scope) {
|
| @@ -1692,9 +1694,9 @@ MaybeHandle<Code> Compiler::GetOptimizedCodeForOSR(Handle<JSFunction> function,
|
| }
|
|
|
| CompilationJob* Compiler::PrepareUnoptimizedCompilationJob(
|
| - CompilationInfo* info) {
|
| + CompilationInfo* info, LazyCompilationMode mode) {
|
| VMState<COMPILER> state(info->isolate());
|
| - std::unique_ptr<CompilationJob> job(GetUnoptimizedCompilationJob(info));
|
| + std::unique_ptr<CompilationJob> job(GetUnoptimizedCompilationJob(info, mode));
|
| if (job->PrepareJob() != CompilationJob::SUCCEEDED) {
|
| return nullptr;
|
| }
|
|
|