Fix a bug where if a non-lazily-compiled function is a candidate for

toplevel compilation and the toplevel compiler cannot handle the
function, we would erroneously signal a stack overflow instead of
falling back on the optimizing compiler.

Review URL: http://codereview.chromium.org/366005

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@3219 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
This commit is contained in:
kmillikin@chromium.org 2009-11-04 18:39:44 +00:00
parent 0ce4eab1b2
commit 0bf546f243

View File

@ -503,6 +503,7 @@ Handle<JSFunction> Compiler::BuildBoilerplate(FunctionLiteral* literal,
} }
// Generate code and return it. // Generate code and return it.
bool is_compiled = false;
if (FLAG_fast_compiler && literal->try_fast_codegen()) { if (FLAG_fast_compiler && literal->try_fast_codegen()) {
CodeGenSelector selector; CodeGenSelector selector;
CodeGenSelector::CodeGenTag code_gen = selector.Select(literal); CodeGenSelector::CodeGenTag code_gen = selector.Select(literal);
@ -510,9 +511,12 @@ Handle<JSFunction> Compiler::BuildBoilerplate(FunctionLiteral* literal,
code = FastCodeGenerator::MakeCode(literal, code = FastCodeGenerator::MakeCode(literal,
script, script,
false); // Not eval. false); // Not eval.
is_compiled = true;
} }
ASSERT(code_gen == CodeGenSelector::NORMAL); }
} else {
if (!is_compiled) {
// We didn't try the fast compiler, or we failed to select it.
code = CodeGenerator::MakeCode(literal, code = CodeGenerator::MakeCode(literal,
script, script,
false); // Not eval. false); // Not eval.