| Index: src/ast-numbering.cc
|
| diff --git a/src/ast-numbering.cc b/src/ast-numbering.cc
|
| index e9b9050ae7d0caec6cb018e0e11b54e94fbd1b1b..c2dd70e1bbe75086a0de3e9097aac6d2b3dc49c1 100644
|
| --- a/src/ast-numbering.cc
|
| +++ b/src/ast-numbering.cc
|
| @@ -23,7 +23,7 @@ class AstNumberingVisitor FINAL : public AstVisitor {
|
| InitializeAstVisitor(zone);
|
| }
|
|
|
| - void Renumber(FunctionLiteral* node);
|
| + bool Renumber(FunctionLiteral* node);
|
|
|
| private:
|
| // AST node visitor interface.
|
| @@ -31,6 +31,8 @@ class AstNumberingVisitor FINAL : public AstVisitor {
|
| AST_NODE_LIST(DEFINE_VISIT)
|
| #undef DEFINE_VISIT
|
|
|
| + bool Finish(FunctionLiteral* node);
|
| +
|
| void VisitStatements(ZoneList<Statement*>* statements) OVERRIDE;
|
| void VisitDeclarations(ZoneList<Declaration*>* declarations) OVERRIDE;
|
| void VisitArguments(ZoneList<Expression*>* arguments);
|
| @@ -537,14 +539,26 @@ void AstNumberingVisitor::VisitFunctionLiteral(FunctionLiteral* node) {
|
| }
|
|
|
|
|
| -void AstNumberingVisitor::Renumber(FunctionLiteral* node) {
|
| - if (node->scope()->HasIllegalRedeclaration()) {
|
| - node->scope()->VisitIllegalRedeclaration(this);
|
| - node->set_ast_properties(&properties_);
|
| - return;
|
| - }
|
| +bool AstNumberingVisitor::Finish(FunctionLiteral* node) {
|
| + node->set_ast_properties(&properties_);
|
| + node->set_dont_optimize_reason(dont_optimize_reason());
|
| + return !HasStackOverflow();
|
| +}
|
| +
|
|
|
| +bool AstNumberingVisitor::Renumber(FunctionLiteral* node) {
|
| Scope* scope = node->scope();
|
| +
|
| + if (scope->HasIllegalRedeclaration()) {
|
| + scope->VisitIllegalRedeclaration(this);
|
| + DisableCrankshaft(kFunctionWithIllegalRedeclaration);
|
| + return Finish(node);
|
| + }
|
| + if (scope->calls_eval()) DisableCrankshaft(kFunctionCallsEval);
|
| + if (scope->arguments() != NULL && !scope->arguments()->IsStackAllocated()) {
|
| + DisableCrankshaft(kContextAllocatedArguments);
|
| + }
|
| +
|
| VisitDeclarations(scope->declarations());
|
| if (scope->is_function_scope() && scope->function() != NULL) {
|
| // Visit the name of the named function expression.
|
| @@ -552,15 +566,13 @@ void AstNumberingVisitor::Renumber(FunctionLiteral* node) {
|
| }
|
| VisitStatements(node->body());
|
|
|
| - node->set_ast_properties(&properties_);
|
| - node->set_dont_optimize_reason(dont_optimize_reason());
|
| + return Finish(node);
|
| }
|
|
|
|
|
| bool AstNumbering::Renumber(FunctionLiteral* function, Zone* zone) {
|
| AstNumberingVisitor visitor(zone);
|
| - visitor.Renumber(function);
|
| - return !visitor.HasStackOverflow();
|
| + return visitor.Renumber(function);
|
| }
|
| }
|
| } // namespace v8::internal
|
|
|