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

Unified Diff: src/compiler.cc

Issue 1883583002: [compiler] Remove CompilationInfo::is_first_compile flag. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Rebased. Created 4 years, 8 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/compiler.h ('k') | src/objects.cc » ('j') | 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 1271070fccfaf4d95d51a8ac21846f6cfe1bbcaf..34fa7e0e68bbc1d2490e83b213c72aa51531359f 100644
--- a/src/compiler.cc
+++ b/src/compiler.cc
@@ -136,10 +136,6 @@ CompilationInfo::CompilationInfo(ParseInfo* parse_info,
if (FLAG_turbo_inlining) MarkAsInliningEnabled();
if (FLAG_turbo_source_positions) MarkAsSourcePositionsEnabled();
if (FLAG_turbo_splitting) MarkAsSplittingEnabled();
-
- if (has_shared_info()) {
- if (shared_info()->never_compiled()) MarkAsFirstCompile();
- }
}
@@ -346,7 +342,7 @@ OptimizedCompileJob::Status OptimizedCompileJob::CreateGraph() {
}
DCHECK(info()->shared_info()->has_deoptimization_support());
- DCHECK(!info()->is_first_compile());
+ DCHECK(!info()->shared_info()->never_compiled());
if (FLAG_trace_opt) {
OFStream os(stdout);
@@ -1020,8 +1016,6 @@ Handle<SharedFunctionInfo> CompileToplevel(CompilationInfo* info) {
DCHECK(!info->is_debug() || !parse_info->allow_lazy_parsing());
- info->MarkAsFirstCompile();
-
FunctionLiteral* lit = parse_info->literal();
LiveEditFunctionTracker live_edit_tracker(isolate, lit);
@@ -1207,8 +1201,6 @@ bool Compiler::EnsureDeoptimizationSupport(CompilationInfo* info) {
shared->EnableDeoptimizationSupport(*unoptimized.code());
- info->MarkAsCompiled();
-
// The scope info might not have been set if a lazily compiled
// function is inlined before being called for the first time.
if (shared->scope_info() == ScopeInfo::Empty(info->isolate())) {
@@ -1231,8 +1223,6 @@ void Compiler::CompileForLiveEdit(Handle<Script> script) {
PostponeInterruptsScope postpone(info.isolate());
VMState<COMPILER> state(info.isolate());
- // Get rid of old list of shared function infos.
- info.MarkAsFirstCompile();
info.MarkAsDebug();
info.parse_info()->set_global();
if (!Parser::ParseStatic(info.parse_info())) return;
@@ -1467,7 +1457,19 @@ Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfo(
// Precondition: code has been parsed and scopes have been analyzed.
Isolate* isolate = outer_info->isolate();
MaybeHandle<SharedFunctionInfo> maybe_existing;
- if (outer_info->is_first_compile()) {
+
+ // The only reason we ever get here without having a shared function info for
+ // the outer function, is when we are compiling for live edit. That is also
+ // the case in which we want to re-generate all inner shared function info
+ // objects by just assuming the top-most one has not been compiled yet.
+ DCHECK_IMPLIES(!outer_info->has_shared_info(),
+ isolate->debug()->live_edit_enabled());
+ bool outer_function_was_never_compiled =
+ !outer_info->has_shared_info() ||
+ outer_info->shared_info()->never_compiled();
+
+ // Find any previously allocated shared function info for the given literal.
+ if (outer_function_was_never_compiled) {
// On the first compile, there are no existing shared function info for
// inner functions yet, so do not try to find them. All bets are off for
// live edit though.
@@ -1476,6 +1478,7 @@ Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfo(
} else {
maybe_existing = script->FindSharedFunctionInfo(literal);
}
+
// We found an existing shared function info. If it's already compiled,
// don't worry about compiling it, and simply return it. If it's not yet
// compiled, continue to decide whether to eagerly compile.
@@ -1493,6 +1496,11 @@ Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfo(
if (!maybe_existing.ToHandle(&result)) {
result = NewSharedFunctionInfoForLiteral(isolate, literal, script);
result->set_is_toplevel(false);
+
+ // If the outer function has been compiled before, we cannot be sure that
+ // shared function info for this function literal has been created for the
+ // first time. It may have already been compiled previously.
+ result->set_never_compiled(outer_function_was_never_compiled);
}
Zone zone(isolate->allocator());
@@ -1503,7 +1511,6 @@ Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfo(
parse_info.set_scope(literal->scope());
parse_info.set_language_mode(literal->scope()->language_mode());
if (outer_info->will_serialize()) info.PrepareForSerializing();
- if (outer_info->is_first_compile()) info.MarkAsFirstCompile();
if (outer_info->is_debug()) info.MarkAsDebug();
LiveEditFunctionTracker live_edit_tracker(isolate, literal);
@@ -1554,11 +1561,6 @@ Handle<SharedFunctionInfo> Compiler::GetSharedFunctionInfo(
}
if (maybe_existing.is_null()) {
- // If the outer function has been compiled before, we cannot be sure that
- // shared function info for this function literal has been created for the
- // first time. It may have already been compiled previously.
- result->set_never_compiled(outer_info->is_first_compile() && lazy);
-
RecordFunctionCompilation(Logger::FUNCTION_TAG, &info, result);
live_edit_tracker.RecordFunctionInfo(result, literal, info.zone());
}
« no previous file with comments | « src/compiler.h ('k') | src/objects.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698