Index: src/compiler.cc |
diff --git a/src/compiler.cc b/src/compiler.cc |
index 7b391f5a22a2e030eb5a10cc89a0cb0fe0506684..5d0b22fd0c7d12433fe7d1e6d2e5ab84e9ff7752 100644 |
--- a/src/compiler.cc |
+++ b/src/compiler.cc |
@@ -1394,6 +1394,10 @@ bool Compiler::EnsureDeoptimizationSupport(CompilationInfo* info) { |
} |
} |
+ // When we call PrepareForSerializing below, we will change the shared |
+ // ParseInfo. Make sure to reset it. |
+ bool old_will_serialize_value = info->parse_info()->will_serialize(); |
+ |
// If the current code has reloc info for serialization, also include |
// reloc info for serialization for the new code, so that deopt support |
// can be added without losing IC state. |
@@ -1404,6 +1408,8 @@ bool Compiler::EnsureDeoptimizationSupport(CompilationInfo* info) { |
EnsureFeedbackMetadata(&unoptimized); |
if (!FullCodeGenerator::MakeCode(&unoptimized)) return false; |
+ info->parse_info()->set_will_serialize(old_will_serialize_value); |
+ |
// TODO(4280): For now we play it safe and remove the bytecode array when we |
// switch to baseline code. We might consider keeping around the bytecode so |
// that it can be used as the "source of truth" eventually. Note that this |
@@ -1764,31 +1770,12 @@ Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfo( |
if (outer_info->will_serialize()) info.PrepareForSerializing(); |
if (outer_info->is_debug()) info.MarkAsDebug(); |
- // Determine if the function can be lazily compiled. This is necessary to |
- // allow some of our builtin JS files to be lazily compiled. These |
- // builtins cannot be handled lazily by the parser, since we have to know |
- // if a function uses the special natives syntax, which is something the |
- // parser records. |
- // If the debugger requests compilation for break points, we cannot be |
- // aggressive about lazy compilation, because it might trigger compilation |
- // of functions without an outer context when setting a breakpoint through |
- // Debug::FindSharedFunctionInfoInScript. |
- bool allow_lazy = literal->AllowsLazyCompilation() && !info.is_debug(); |
- bool lazy = FLAG_lazy && allow_lazy && !literal->should_eager_compile(); |
- |
- // Consider compiling eagerly when targeting the code cache. |
- lazy &= !(FLAG_serialize_eager && info.will_serialize()); |
- |
- // Consider compiling eagerly when compiling bytecode for Ignition. |
- lazy &= |
- !(FLAG_ignition && FLAG_ignition_eager && !isolate->serializer_enabled()); |
- |
// Generate code |
TimerEventScope<TimerEventCompileCode> timer(isolate); |
RuntimeCallTimerScope runtimeTimer(isolate, &RuntimeCallStats::CompileCode); |
TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCode"); |
- if (lazy) { |
+ if (!literal->ShouldEagerCompile()) { |
info.SetCode(isolate->builtins()->CompileLazy()); |
Scope* outer_scope = literal->scope()->GetOuterScopeWithContext(); |
if (outer_scope) { |
@@ -1798,8 +1785,7 @@ Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfo( |
// Code generation will ensure that the feedback vector is present and |
// appropriately sized. |
DCHECK(!info.code().is_null()); |
- if (literal->should_eager_compile() && |
- literal->should_be_used_once_hint()) { |
+ if (literal->should_be_used_once_hint()) { |
info.code()->MarkToBeExecutedOnce(isolate); |
} |
// Update the shared function info with the scope info. |