Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(82)

Unified Diff: src/compiler.cc

Issue 2643233002: Revert of [Compiler] Have renumber recurse into eagerly compiled function literals. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/ast/ast-numbering.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/compiler.cc
diff --git a/src/compiler.cc b/src/compiler.cc
index d979662fe351cd575e9d7fac60392d6680b4a566..1972fd10b6e64463cf5ddb872bbad5b451efa231 100644
--- a/src/compiler.cc
+++ b/src/compiler.cc
@@ -434,17 +434,6 @@
return status;
}
-void SetSharedFunctionFlagsFromLiteral(FunctionLiteral* literal,
- Handle<SharedFunctionInfo> shared_info) {
- shared_info->set_ast_node_count(literal->ast_node_count());
- if (literal->dont_optimize_reason() != kNoReason) {
- shared_info->DisableOptimization(literal->dont_optimize_reason());
- }
- if (literal->flags() & AstProperties::kMustUseIgnitionTurbo) {
- shared_info->set_must_use_ignition_turbo(true);
- }
-}
-
bool Renumber(ParseInfo* parse_info,
Compiler::EagerInnerFunctionLiterals* eager_literals) {
RuntimeCallTimerScope runtimeTimer(parse_info->isolate(),
@@ -454,9 +443,16 @@
parse_info->zone(), parse_info->literal(), eager_literals)) {
return false;
}
- if (!parse_info->shared_info().is_null()) {
- SetSharedFunctionFlagsFromLiteral(parse_info->literal(),
- parse_info->shared_info());
+ Handle<SharedFunctionInfo> shared_info = parse_info->shared_info();
+ if (!shared_info.is_null()) {
+ FunctionLiteral* lit = parse_info->literal();
+ shared_info->set_ast_node_count(lit->ast_node_count());
+ if (lit->dont_optimize_reason() != kNoReason) {
+ shared_info->DisableOptimization(lit->dont_optimize_reason());
+ }
+ if (lit->flags() & AstProperties::kMustUseIgnitionTurbo) {
+ shared_info->set_must_use_ignition_turbo(true);
+ }
}
return true;
}
@@ -485,7 +481,7 @@
return true;
}
-bool CompileUnoptimizedInnerFunctions(
+bool CompileUnoptimizedInnerFunctionsRecursively(
ThreadedList<ThreadedListZoneEntry<FunctionLiteral*>>* literals,
CompilationInfo* outer_info) {
Isolate* isolate = outer_info->isolate();
@@ -495,13 +491,21 @@
for (auto it : *literals) {
FunctionLiteral* literal = it->value();
- Handle<SharedFunctionInfo> shared =
- Compiler::GetSharedFunctionInfo(literal, script, outer_info);
- if (shared->is_compiled()) continue;
-
- // The {literal} has already been numbered because AstNumbering decends into
- // eagerly compiled function literals.
- SetSharedFunctionFlagsFromLiteral(literal, shared);
+
+ // Find any previously allocated shared function info for the given literal.
+ Handle<SharedFunctionInfo> shared;
+ MaybeHandle<SharedFunctionInfo> maybe_existing =
+ script->FindSharedFunctionInfo(isolate, literal);
+ if (maybe_existing.ToHandle(&shared)) {
+ DCHECK(!shared->is_toplevel());
+ // If we found an existing shared function info with compiled code,
+ // we are done.
+ if (shared->is_compiled()) continue;
+ } else {
+ shared =
+ isolate->factory()->NewSharedFunctionInfoForLiteral(literal, script);
+ shared->set_is_toplevel(false);
+ }
ParseInfo parse_info(script);
parse_info.set_literal(literal);
@@ -516,7 +520,11 @@
if (outer_info->will_serialize()) info.PrepareForSerializing();
if (outer_info->is_debug()) info.MarkAsDebug();
- if (!GenerateUnoptimizedCode(&info)) {
+ Compiler::EagerInnerFunctionLiterals inner_literals;
+ if (!Renumber(&parse_info, &inner_literals) ||
+ !CompileUnoptimizedInnerFunctionsRecursively(&inner_literals,
+ outer_info) ||
+ !GenerateUnoptimizedCode(&info)) {
if (!isolate->has_pending_exception()) isolate->StackOverflow();
return false;
}
@@ -536,7 +544,7 @@
Compiler::EagerInnerFunctionLiterals inner_literals;
if (!Compiler::Analyze(info->parse_info(), &inner_literals) ||
- !CompileUnoptimizedInnerFunctions(&inner_literals, info) ||
+ !CompileUnoptimizedInnerFunctionsRecursively(&inner_literals, info) ||
!GenerateUnoptimizedCode(info)) {
if (!isolate->has_pending_exception()) isolate->StackOverflow();
return false;
« no previous file with comments | « src/ast/ast-numbering.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698