summaryrefslogtreecommitdiff
path: root/deps/v8/src/ast-numbering.cc
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/ast-numbering.cc')
-rw-r--r--deps/v8/src/ast-numbering.cc53
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);