Merge V8 5.2.361.47 DO NOT MERGE
https://chromium.googlesource.com/v8/v8/+/5.2.361.47
FPIIM-449
Change-Id: Ibec421b85a9b88cb3a432ada642e469fe7e78346
(cherry picked from commit bcf72ee8e3b26f1d0726869c7ddb3921c68b09a8)
diff --git a/src/ast/ast-numbering.cc b/src/ast/ast-numbering.cc
index f54333f..bd96026 100644
--- a/src/ast/ast-numbering.cc
+++ b/src/ast/ast-numbering.cc
@@ -17,6 +17,7 @@
isolate_(isolate),
zone_(zone),
next_id_(BailoutId::FirstUsable().ToInt()),
+ yield_count_(0),
properties_(zone),
slot_cache_(zone),
dont_optimize_reason_(kNoReason) {
@@ -31,8 +32,6 @@
AST_NODE_LIST(DEFINE_VISIT)
#undef DEFINE_VISIT
- bool Finish(FunctionLiteral* node);
-
void VisitVariableProxyReference(VariableProxy* node);
void VisitPropertyReference(Property* node);
void VisitReference(Expression* expr);
@@ -76,6 +75,7 @@
Isolate* isolate_;
Zone* zone_;
int next_id_;
+ int yield_count_;
AstProperties properties_;
// The slot cache allows us to reuse certain feedback vector slots.
FeedbackVectorSlotCache slot_cache_;
@@ -217,6 +217,8 @@
void AstNumberingVisitor::VisitYield(Yield* node) {
+ node->set_yield_id(yield_count_);
+ yield_count_++;
IncrementNodeCount();
DisableOptimization(kYield);
ReserveFeedbackSlots(node);
@@ -284,8 +286,10 @@
IncrementNodeCount();
DisableSelfOptimization();
node->set_base_id(ReserveIdRange(DoWhileStatement::num_ids()));
+ node->set_first_yield_id(yield_count_);
Visit(node->body());
Visit(node->cond());
+ node->set_yield_count(yield_count_ - node->first_yield_id());
}
@@ -293,8 +297,10 @@
IncrementNodeCount();
DisableSelfOptimization();
node->set_base_id(ReserveIdRange(WhileStatement::num_ids()));
+ node->set_first_yield_id(yield_count_);
Visit(node->cond());
Visit(node->body());
+ node->set_yield_count(yield_count_ - node->first_yield_id());
}
@@ -377,9 +383,11 @@
IncrementNodeCount();
DisableSelfOptimization();
node->set_base_id(ReserveIdRange(ForInStatement::num_ids()));
+ Visit(node->enumerable()); // Not part of loop.
+ node->set_first_yield_id(yield_count_);
Visit(node->each());
- Visit(node->enumerable());
Visit(node->body());
+ node->set_yield_count(yield_count_ - node->first_yield_id());
ReserveFeedbackSlots(node);
}
@@ -388,11 +396,13 @@
IncrementNodeCount();
DisableCrankshaft(kForOfStatement);
node->set_base_id(ReserveIdRange(ForOfStatement::num_ids()));
- Visit(node->assign_iterator());
+ Visit(node->assign_iterator()); // Not part of loop.
+ node->set_first_yield_id(yield_count_);
Visit(node->next_result());
Visit(node->result_done());
Visit(node->assign_each());
Visit(node->body());
+ node->set_yield_count(yield_count_ - node->first_yield_id());
ReserveFeedbackSlots(node);
}
@@ -440,10 +450,12 @@
IncrementNodeCount();
DisableSelfOptimization();
node->set_base_id(ReserveIdRange(ForStatement::num_ids()));
- if (node->init() != NULL) Visit(node->init());
+ if (node->init() != NULL) Visit(node->init()); // Not part of loop.
+ node->set_first_yield_id(yield_count_);
if (node->cond() != NULL) Visit(node->cond());
if (node->next() != NULL) Visit(node->next());
Visit(node->body());
+ node->set_yield_count(yield_count_ - node->first_yield_id());
}
@@ -554,13 +566,6 @@
}
-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->new_target_var()) DisableCrankshaft(kSuperReference);
@@ -577,7 +582,10 @@
VisitDeclarations(scope->declarations());
VisitStatements(node->body());
- return Finish(node);
+ node->set_ast_properties(&properties_);
+ node->set_dont_optimize_reason(dont_optimize_reason());
+ node->set_yield_count(yield_count_);
+ return !HasStackOverflow();
}