diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2010-09-08 17:14:42 -0700 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2010-09-08 17:14:42 -0700 |
commit | 8796ed22783bbbb9d286463e27db275325106fed (patch) | |
tree | c4d13c9a6dc9196925489392ffe589f4d43d8939 /deps/v8/src/rewriter.cc | |
parent | 512016fd7441d8919c29f369a38622ab1dd01942 (diff) | |
download | node-8796ed22783bbbb9d286463e27db275325106fed.tar.gz |
Upgrade V8 to 2.4.2
Diffstat (limited to 'deps/v8/src/rewriter.cc')
-rw-r--r-- | deps/v8/src/rewriter.cc | 64 |
1 files changed, 24 insertions, 40 deletions
diff --git a/deps/v8/src/rewriter.cc b/deps/v8/src/rewriter.cc index 73301b918..4ddf1bf6f 100644 --- a/deps/v8/src/rewriter.cc +++ b/deps/v8/src/rewriter.cc @@ -28,21 +28,15 @@ #include "v8.h" #include "ast.h" -#include "func-name-inferrer.h" #include "scopes.h" #include "rewriter.h" namespace v8 { namespace internal { - class AstOptimizer: public AstVisitor { public: explicit AstOptimizer() : has_function_literal_(false) {} - explicit AstOptimizer(Handle<String> enclosing_name) - : has_function_literal_(false) { - func_name_inferrer_.PushEnclosingName(enclosing_name); - } void Optimize(ZoneList<Statement*>* statements); @@ -50,8 +44,6 @@ class AstOptimizer: public AstVisitor { // Used for loop condition analysis. Cleared before visiting a loop // condition, set when a function literal is visited. bool has_function_literal_; - // Helper object for function name inferring. - FuncNameInferrer func_name_inferrer_; // Helpers void OptimizeArguments(ZoneList<Expression*>* arguments); @@ -113,7 +105,7 @@ void AstOptimizer::VisitWhileStatement(WhileStatement* node) { has_function_literal_ = false; node->cond()->set_no_negative_zero(true); Visit(node->cond()); - node->may_have_function_literal_ = has_function_literal_; + node->set_may_have_function_literal(has_function_literal_); Visit(node->body()); } @@ -126,7 +118,7 @@ void AstOptimizer::VisitForStatement(ForStatement* node) { has_function_literal_ = false; node->cond()->set_no_negative_zero(true); Visit(node->cond()); - node->may_have_function_literal_ = has_function_literal_; + node->set_may_have_function_literal(has_function_literal_); } Visit(node->body()); if (node->next() != NULL) { @@ -211,11 +203,6 @@ void AstOptimizer::VisitDebuggerStatement(DebuggerStatement* node) { void AstOptimizer::VisitFunctionLiteral(FunctionLiteral* node) { has_function_literal_ = true; - - if (node->name()->length() == 0) { - // Anonymous function. - func_name_inferrer_.AddFunction(node); - } } @@ -247,11 +234,6 @@ void AstOptimizer::VisitVariableProxy(VariableProxy* node) { var->type()->SetAsLikelySmi(); } - if (!var->is_this() && - !Heap::result_symbol()->Equals(*var->name())) { - func_name_inferrer_.PushName(var->name()); - } - if (FLAG_safe_int32_compiler) { if (var->IsStackAllocated() && !var->is_arguments() && @@ -268,11 +250,6 @@ void AstOptimizer::VisitLiteral(Literal* node) { if (literal->IsSmi()) { node->type()->SetAsLikelySmi(); node->set_side_effect_free(true); - } else if (literal->IsString()) { - Handle<String> lit_str(Handle<String>::cast(literal)); - if (!Heap::prototype_symbol()->Equals(*lit_str)) { - func_name_inferrer_.PushName(lit_str); - } } else if (literal->IsHeapNumber()) { if (node->to_int32()) { // Any HeapNumber has an int32 value if it is the input to a bit op. @@ -299,8 +276,6 @@ void AstOptimizer::VisitArrayLiteral(ArrayLiteral* node) { void AstOptimizer::VisitObjectLiteral(ObjectLiteral* node) { for (int i = 0; i < node->properties()->length(); i++) { - ScopedFuncNameInferrer scoped_fni(&func_name_inferrer_); - scoped_fni.Enter(); Visit(node->properties()->at(i)->key()); Visit(node->properties()->at(i)->value()); } @@ -314,17 +289,11 @@ void AstOptimizer::VisitCatchExtensionObject(CatchExtensionObject* node) { void AstOptimizer::VisitAssignment(Assignment* node) { - ScopedFuncNameInferrer scoped_fni(&func_name_inferrer_); switch (node->op()) { case Token::INIT_VAR: case Token::INIT_CONST: case Token::ASSIGN: // No type can be infered from the general assignment. - - // Don't infer if it is "a = function(){...}();"-like expression. - if (node->value()->AsCall() == NULL) { - scoped_fni.Enter(); - } break; case Token::ASSIGN_BIT_OR: case Token::ASSIGN_BIT_XOR: @@ -430,12 +399,6 @@ void AstOptimizer::VisitCallNew(CallNew* node) { void AstOptimizer::VisitCallRuntime(CallRuntime* node) { - ScopedFuncNameInferrer scoped_fni(&func_name_inferrer_); - if (Factory::InitializeVarGlobal_symbol()->Equals(*node->name()) && - node->arguments()->length() >= 2 && - node->arguments()->at(1)->AsFunctionLiteral() != NULL) { - scoped_fni.Enter(); - } OptimizeArguments(node->arguments()); } @@ -472,6 +435,11 @@ void AstOptimizer::VisitUnaryOperation(UnaryOperation* node) { } +void AstOptimizer::VisitIncrementOperation(IncrementOperation* node) { + UNREACHABLE(); +} + + void AstOptimizer::VisitCountOperation(CountOperation* node) { // Count operations assume that they work on Smis. node->expression()->set_no_negative_zero(node->is_prefix() ? @@ -704,6 +672,11 @@ void AstOptimizer::VisitCompareOperation(CompareOperation* node) { } +void AstOptimizer::VisitCompareToNull(CompareToNull* node) { + Visit(node->expression()); +} + + void AstOptimizer::VisitThisFunction(ThisFunction* node) { USE(node); } @@ -978,6 +951,11 @@ void Processor::VisitUnaryOperation(UnaryOperation* node) { } +void Processor::VisitIncrementOperation(IncrementOperation* node) { + UNREACHABLE(); +} + + void Processor::VisitCountOperation(CountOperation* node) { USE(node); UNREACHABLE(); @@ -996,6 +974,12 @@ void Processor::VisitCompareOperation(CompareOperation* node) { } +void Processor::VisitCompareToNull(CompareToNull* node) { + USE(node); + UNREACHABLE(); +} + + void Processor::VisitThisFunction(ThisFunction* node) { USE(node); UNREACHABLE(); @@ -1025,7 +1009,7 @@ bool Rewriter::Optimize(FunctionLiteral* function) { if (FLAG_optimize_ast && !body->is_empty()) { HistogramTimerScope timer(&Counters::ast_optimization); - AstOptimizer optimizer(function->name()); + AstOptimizer optimizer; optimizer.Optimize(body); if (optimizer.HasStackOverflow()) { return false; |