Index: src/compiler.cc |
diff --git a/src/compiler.cc b/src/compiler.cc |
index d35532f04583f2fcf6ba934d87d42cae3c481d4c..1499277fb27a5c341c0f3d30741a50ec8a5d0a2e 100644 |
--- a/src/compiler.cc |
+++ b/src/compiler.cc |
@@ -184,17 +184,9 @@ static void FinishOptimization(Handle<JSFunction> function, int64_t start) { |
static bool MakeCrankshaftCode(CompilationInfo* info) { |
- // Test if we can optimize this function when asked to. We can only |
- // do this after the scopes are computed. |
- if (!V8::UseCrankshaft()) { |
- info->DisableOptimization(); |
- } |
- |
- // In case we are not optimizing simply return the code from |
- // the full code generator. |
- if (!info->IsOptimizing()) { |
- return FullCodeGenerator::MakeCode(info); |
- } |
+ ASSERT(V8::UseCrankshaft()); |
+ ASSERT(info->IsOptimizing()); |
+ ASSERT(!info->IsCompilingForDebugging()); |
// We should never arrive here if there is not code object on the |
// shared function object. |
@@ -330,9 +322,19 @@ static bool MakeCrankshaftCode(CompilationInfo* info) { |
static bool GenerateCode(CompilationInfo* info) { |
- return info->IsCompilingForDebugging() || !V8::UseCrankshaft() ? |
- FullCodeGenerator::MakeCode(info) : |
- MakeCrankshaftCode(info); |
+ bool is_optimizing = V8::UseCrankshaft() && |
+ !info->IsCompilingForDebugging() && |
+ info->IsOptimizing(); |
+ if (is_optimizing) { |
+ return MakeCrankshaftCode(info); |
+ } else { |
+ if (info->IsOptimizing()) { |
+ // Have the CompilationInfo decide if the compilation should be |
+ // BASE or NONOPT. |
+ info->DisableOptimization(); |
+ } |
+ return FullCodeGenerator::MakeCode(info); |
+ } |
} |
@@ -762,8 +764,7 @@ Handle<SharedFunctionInfo> Compiler::BuildFunctionInfo(FunctionLiteral* literal, |
if (FLAG_lazy && allow_lazy) { |
Handle<Code> code = info.isolate()->builtins()->LazyCompile(); |
info.SetCode(code); |
- } else if ((V8::UseCrankshaft() && MakeCrankshaftCode(&info)) || |
- (!V8::UseCrankshaft() && FullCodeGenerator::MakeCode(&info))) { |
+ } else if (GenerateCode(&info)) { |
ASSERT(!info.code().is_null()); |
scope_info = ScopeInfo::Create(info.scope(), info.zone()); |
} else { |