Index: src/ast/ast-numbering.cc |
diff --git a/src/ast/ast-numbering.cc b/src/ast/ast-numbering.cc |
index 07d60cf84ab6fd5085b861834a4eb48c6ff149ed..d354c876cf1e79731b98950ce88e5a3d14c92d1c 100644 |
--- a/src/ast/ast-numbering.cc |
+++ b/src/ast/ast-numbering.cc |
@@ -6,15 +6,19 @@ |
#include "src/ast/ast.h" |
#include "src/ast/scopes.h" |
+#include "src/zone/zone-containers.h" |
namespace v8 { |
namespace internal { |
class AstNumberingVisitor final : public AstVisitor<AstNumberingVisitor> { |
public: |
- AstNumberingVisitor(Isolate* isolate, Zone* zone) |
+ AstNumberingVisitor(Isolate* isolate, Zone* zone, |
+ ThreadedList<ThreadedListZoneEntry<FunctionLiteral*>>* |
+ eager_inner_functions) |
: isolate_(isolate), |
zone_(zone), |
+ eager_inner_functions_(eager_inner_functions), |
next_id_(BailoutId::FirstUsable().ToInt()), |
yield_count_(0), |
properties_(zone), |
@@ -69,8 +73,11 @@ class AstNumberingVisitor final : public AstVisitor<AstNumberingVisitor> { |
BailoutReason dont_optimize_reason() const { return dont_optimize_reason_; } |
+ Zone* zone() const { return zone_; } |
+ |
Isolate* isolate_; |
Zone* zone_; |
+ ThreadedList<ThreadedListZoneEntry<FunctionLiteral*>>* eager_inner_functions_; |
int next_id_; |
int yield_count_; |
AstProperties properties_; |
@@ -593,6 +600,10 @@ void AstNumberingVisitor::VisitArguments(ZoneList<Expression*>* arguments) { |
void AstNumberingVisitor::VisitFunctionLiteral(FunctionLiteral* node) { |
IncrementNodeCount(); |
node->set_base_id(ReserveIdRange(FunctionLiteral::num_ids())); |
+ if (node->ShouldEagerCompile()) { |
+ eager_inner_functions_->Add( |
+ new (zone()) ThreadedListZoneEntry<FunctionLiteral*>(node)); |
+ } |
// We don't recurse into the declarations or body of the function literal: |
// you have to separately Renumber() each FunctionLiteral that you compile. |
} |
@@ -648,10 +659,11 @@ bool AstNumberingVisitor::Renumber(FunctionLiteral* node) { |
return !HasStackOverflow(); |
} |
- |
-bool AstNumbering::Renumber(Isolate* isolate, Zone* zone, |
- FunctionLiteral* function) { |
- AstNumberingVisitor visitor(isolate, zone); |
+bool AstNumbering::Renumber( |
+ Isolate* isolate, Zone* zone, FunctionLiteral* function, |
+ ThreadedList<ThreadedListZoneEntry<FunctionLiteral*>>* |
+ eager_inner_functions) { |
+ AstNumberingVisitor visitor(isolate, zone, eager_inner_functions); |
return visitor.Renumber(function); |
} |
} // namespace internal |