diff options
Diffstat (limited to 'deps/v8/src/ast-numbering.cc')
-rw-r--r-- | deps/v8/src/ast-numbering.cc | 53 |
1 files changed, 36 insertions, 17 deletions
diff --git a/deps/v8/src/ast-numbering.cc b/deps/v8/src/ast-numbering.cc index 151cc8abc1..dc0528caa0 100644 --- a/deps/v8/src/ast-numbering.cc +++ b/deps/v8/src/ast-numbering.cc @@ -2,19 +2,17 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include "src/v8.h" +#include "src/ast-numbering.h" #include "src/ast.h" -#include "src/ast-numbering.h" #include "src/scopes.h" namespace v8 { namespace internal { - class AstNumberingVisitor final : public AstVisitor { public: - explicit AstNumberingVisitor(Isolate* isolate, Zone* zone) + AstNumberingVisitor(Isolate* isolate, Zone* zone) : AstVisitor(), next_id_(BailoutId::FirstUsable().ToInt()), properties_(zone), @@ -33,6 +31,10 @@ class AstNumberingVisitor final : public AstVisitor { bool Finish(FunctionLiteral* node); + void VisitVariableProxyReference(VariableProxy* node); + void VisitPropertyReference(Property* node); + void VisitReference(Expression* expr); + void VisitStatements(ZoneList<Statement*>* statements) override; void VisitDeclarations(ZoneList<Declaration*>* declarations) override; void VisitArguments(ZoneList<Expression*>* arguments); @@ -46,7 +48,7 @@ class AstNumberingVisitor final : public AstVisitor { void IncrementNodeCount() { properties_.add_node_count(1); } void DisableSelfOptimization() { - properties_.flags()->Add(kDontSelfOptimize); + properties_.flags() |= AstProperties::kDontSelfOptimize; } void DisableOptimization(BailoutReason reason) { dont_optimize_reason_ = reason; @@ -54,10 +56,11 @@ class AstNumberingVisitor final : public AstVisitor { } void DisableCrankshaft(BailoutReason reason) { if (FLAG_turbo_shipping) { - return properties_.flags()->Add(kDontCrankshaft); + properties_.flags() |= AstProperties::kDontCrankshaft; + } else { + dont_optimize_reason_ = reason; + DisableSelfOptimization(); } - dont_optimize_reason_ = reason; - DisableSelfOptimization(); } template <typename Node> @@ -147,16 +150,21 @@ void AstNumberingVisitor::VisitRegExpLiteral(RegExpLiteral* node) { } -void AstNumberingVisitor::VisitVariableProxy(VariableProxy* node) { +void AstNumberingVisitor::VisitVariableProxyReference(VariableProxy* node) { IncrementNodeCount(); if (node->var()->IsLookupSlot()) { DisableCrankshaft(kReferenceToAVariableWhichRequiresDynamicLookup); } - ReserveFeedbackSlots(node); node->set_base_id(ReserveIdRange(VariableProxy::num_ids())); } +void AstNumberingVisitor::VisitVariableProxy(VariableProxy* node) { + VisitVariableProxyReference(node); + ReserveFeedbackSlots(node); +} + + void AstNumberingVisitor::VisitThisFunction(ThisFunction* node) { IncrementNodeCount(); node->set_base_id(ReserveIdRange(ThisFunction::num_ids())); @@ -306,20 +314,35 @@ void AstNumberingVisitor::VisitTryFinallyStatement(TryFinallyStatement* node) { } -void AstNumberingVisitor::VisitProperty(Property* node) { +void AstNumberingVisitor::VisitPropertyReference(Property* node) { IncrementNodeCount(); - ReserveFeedbackSlots(node); node->set_base_id(ReserveIdRange(Property::num_ids())); Visit(node->key()); Visit(node->obj()); } +void AstNumberingVisitor::VisitReference(Expression* expr) { + DCHECK(expr->IsProperty() || expr->IsVariableProxy()); + if (expr->IsProperty()) { + VisitPropertyReference(expr->AsProperty()); + } else { + VisitVariableProxyReference(expr->AsVariableProxy()); + } +} + + +void AstNumberingVisitor::VisitProperty(Property* node) { + VisitPropertyReference(node); + ReserveFeedbackSlots(node); +} + + void AstNumberingVisitor::VisitAssignment(Assignment* node) { IncrementNodeCount(); node->set_base_id(ReserveIdRange(Assignment::num_ids())); if (node->is_compound()) VisitBinaryOperation(node->binary_operation()); - Visit(node->target()); + VisitReference(node->target()); Visit(node->value()); ReserveFeedbackSlots(node); } @@ -540,10 +563,6 @@ bool AstNumberingVisitor::Renumber(FunctionLiteral* node) { } VisitDeclarations(scope->declarations()); - if (scope->is_function_scope() && scope->function() != NULL) { - // Visit the name of the named function expression. - Visit(scope->function()); - } VisitStatements(node->body()); return Finish(node); |