| Index: src/compiler.cc
|
| diff --git a/src/compiler.cc b/src/compiler.cc
|
| index 7cfea6d8665193b579d607dbce8583afe8fa5d27..ef74578ad1ec1edcbccd0984bf969d87f8837b65 100644
|
| --- a/src/compiler.cc
|
| +++ b/src/compiler.cc
|
| @@ -1586,34 +1586,36 @@ Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfo(
|
| if (outer_info->will_serialize()) info.PrepareForSerializing();
|
| if (outer_info->is_debug()) info.MarkAsDebug();
|
|
|
| - // Generate code
|
| - TimerEventScope<TimerEventCompileCode> timer(isolate);
|
| - RuntimeCallTimerScope runtimeTimer(isolate, &RuntimeCallStats::CompileCode);
|
| - TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCode");
|
| -
|
| - if (result->is_compiled()) {
|
| - // If this inner function is already compiled, we don't need to compile
|
| - // again. When compiling for debug, we are not interested in having debug
|
| - // break slots in inner functions, neither for setting break points nor
|
| - // for revealing inner functions.
|
| - // This is especially important for generators. We must not replace the
|
| - // code for generators, as there may be suspended generator objects.
|
| - return result;
|
| - } else if (!literal->ShouldEagerCompile()) {
|
| - info.SetCode(isolate->builtins()->CompileLazy());
|
| - Scope* outer_scope = literal->scope()->GetOuterScopeWithContext();
|
| - if (outer_scope) {
|
| - result->set_outer_scope_info(*outer_scope->scope_info());
|
| - }
|
| - } else if (Renumber(info.parse_info()) && GenerateUnoptimizedCode(&info)) {
|
| - // Code generation will ensure that the feedback vector is present and
|
| - // appropriately sized.
|
| - DCHECK(!info.code().is_null());
|
| - if (literal->should_be_used_once_hint()) {
|
| - info.code()->MarkToBeExecutedOnce(isolate);
|
| + // If this inner function is already compiled, we don't need to compile
|
| + // again. When compiling for debug, we are not interested in having debug
|
| + // break slots in inner functions, neither for setting break points nor
|
| + // for revealing inner functions.
|
| + // 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()) {
|
| + info.SetCode(isolate->builtins()->CompileLazy());
|
| + Scope* outer_scope = literal->scope()->GetOuterScopeWithContext();
|
| + if (outer_scope) {
|
| + result->set_outer_scope_info(*outer_scope->scope_info());
|
| + }
|
| + } else {
|
| + // Generate code
|
| + TimerEventScope<TimerEventCompileCode> timer(isolate);
|
| + RuntimeCallTimerScope runtimeTimer(isolate,
|
| + &RuntimeCallStats::CompileCode);
|
| + TRACE_EVENT0(TRACE_DISABLED_BY_DEFAULT("v8.compile"), "V8.CompileCode");
|
| + if (Renumber(info.parse_info()) && GenerateUnoptimizedCode(&info)) {
|
| + // Code generation will ensure that the feedback vector is present and
|
| + // appropriately sized.
|
| + DCHECK(!info.code().is_null());
|
| + if (literal->should_be_used_once_hint()) {
|
| + info.code()->MarkToBeExecutedOnce(isolate);
|
| + }
|
| + } else {
|
| + return Handle<SharedFunctionInfo>::null();
|
| + }
|
| }
|
| - } else {
|
| - return Handle<SharedFunctionInfo>::null();
|
| }
|
|
|
| if (maybe_existing.is_null()) {
|
|
|