Commit 1af131cb authored by iposva@chromium.org's avatar iposva@chromium.org

Handle stack overflow errors correctly when rewriting the AST

for likely Smis.

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

git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@701 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
parent 779af439
...@@ -66,7 +66,11 @@ static Handle<Code> MakeCode(FunctionLiteral* literal, ...@@ -66,7 +66,11 @@ static Handle<Code> MakeCode(FunctionLiteral* literal,
#endif #endif
// Optimize the AST. // Optimize the AST.
Rewriter::Optimize(literal); if (!Rewriter::Optimize(literal)) {
// Signal a stack overflow by returning a null handle. The stack
// overflow exception will be thrown by the caller.
return Handle<Code>::null();
}
// Generate code and return it. // Generate code and return it.
Handle<Code> result = CodeGenerator::MakeCode(literal, script, is_eval); Handle<Code> result = CodeGenerator::MakeCode(literal, script, is_eval);
......
...@@ -761,17 +761,20 @@ bool Rewriter::Process(FunctionLiteral* function) { ...@@ -761,17 +761,20 @@ bool Rewriter::Process(FunctionLiteral* function) {
} }
void Rewriter::Optimize(FunctionLiteral* function) { bool Rewriter::Optimize(FunctionLiteral* function) {
ZoneList<Statement*>* body = function->body(); ZoneList<Statement*>* body = function->body();
if (body->is_empty()) return;
if (FLAG_optimize_ast) { if (FLAG_optimize_ast && !body->is_empty()) {
Scope* scope = function->scope(); Scope* scope = function->scope();
if (!scope->is_global_scope()) { if (!scope->is_global_scope()) {
AstOptimizer optimizer; AstOptimizer optimizer;
optimizer.Optimize(body); optimizer.Optimize(body);
if (optimizer.HasStackOverflow()) {
return false;
}
} }
} }
return true;
} }
......
...@@ -44,7 +44,7 @@ namespace v8 { namespace internal { ...@@ -44,7 +44,7 @@ namespace v8 { namespace internal {
class Rewriter { class Rewriter {
public: public:
static bool Process(FunctionLiteral* function); static bool Process(FunctionLiteral* function);
static void Optimize(FunctionLiteral* function); static bool Optimize(FunctionLiteral* function);
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment