Index: src/ast.cc |
diff --git a/src/ast.cc b/src/ast.cc |
index 9cce1da71df71fa3c11854a9a15a4a4f87593fa8..cff4928f38f12bb9f9bba3da3e8974ab58ff680a 100644 |
--- a/src/ast.cc |
+++ b/src/ast.cc |
@@ -65,7 +65,8 @@ VariableProxy::VariableProxy(Zone* zone, Variable* var, int position) |
var_(NULL), // Will be set by the call to BindTo. |
is_this_(var->is_this()), |
is_assigned_(false), |
- interface_(var->interface()) { |
+ interface_(var->interface()), |
+ variable_feedback_slot_(kInvalidFeedbackSlot) { |
BindTo(var); |
} |
@@ -80,7 +81,8 @@ VariableProxy::VariableProxy(Zone* zone, |
var_(NULL), |
is_this_(is_this), |
is_assigned_(false), |
- interface_(interface) { |
+ interface_(interface), |
+ variable_feedback_slot_(kInvalidFeedbackSlot) { |
} |
@@ -1030,7 +1032,14 @@ CaseClause::CaseClause(Zone* zone, |
set_dont_optimize_reason(k##NodeType); \ |
add_flag(kDontSelfOptimize); \ |
} |
-#define DONT_SELFOPTIMIZE_NODE(NodeType) \ |
+#define DONT_OPTIMIZE_NODE_WITH_FEEDBACK_SLOTS(NodeType) \ |
+ void AstConstructionVisitor::Visit##NodeType(NodeType* node) { \ |
+ increase_node_count(); \ |
+ add_slot_node(node); \ |
+ set_dont_optimize_reason(k##NodeType); \ |
+ add_flag(kDontSelfOptimize); \ |
+ } |
+#define DONT_SELFOPTIMIZE_NODE(NodeType) \ |
void AstConstructionVisitor::Visit##NodeType(NodeType* node) { \ |
increase_node_count(); \ |
add_flag(kDontSelfOptimize); \ |
@@ -1068,7 +1077,7 @@ REGULAR_NODE(RegExpLiteral) |
REGULAR_NODE(FunctionLiteral) |
REGULAR_NODE(Assignment) |
REGULAR_NODE(Throw) |
-REGULAR_NODE(Property) |
+REGULAR_NODE_WITH_FEEDBACK_SLOTS(Property) |
REGULAR_NODE(UnaryOperation) |
REGULAR_NODE(CountOperation) |
REGULAR_NODE(BinaryOperation) |
@@ -1081,7 +1090,8 @@ REGULAR_NODE_WITH_FEEDBACK_SLOTS(CallNew) |
// set_dont_optimize_reason(kReferenceToAVariableWhichRequiresDynamicLookup); |
// But node->var() is usually not bound yet at VariableProxy creation time, and |
// LOOKUP variables only result from constructs that cannot be inlined anyway. |
-REGULAR_NODE(VariableProxy) |
+ |
+REGULAR_NODE_WITH_FEEDBACK_SLOTS(VariableProxy) |
// We currently do not optimize any modules. |
DONT_OPTIMIZE_NODE(ModuleDeclaration) |
@@ -1091,7 +1101,7 @@ DONT_OPTIMIZE_NODE(ModuleVariable) |
DONT_OPTIMIZE_NODE(ModulePath) |
DONT_OPTIMIZE_NODE(ModuleUrl) |
DONT_OPTIMIZE_NODE(ModuleStatement) |
-DONT_OPTIMIZE_NODE(Yield) |
+DONT_OPTIMIZE_NODE_WITH_FEEDBACK_SLOTS(Yield) |
Toon Verwaest
2014/07/18 09:52:16
Some sorting would be nice...
mvstanton
2014/07/18 13:35:04
Done.
|
DONT_OPTIMIZE_NODE(WithStatement) |
DONT_OPTIMIZE_NODE(TryCatchStatement) |
DONT_OPTIMIZE_NODE(TryFinallyStatement) |
@@ -1109,6 +1119,7 @@ DONT_CACHE_NODE(ModuleLiteral) |
void AstConstructionVisitor::VisitCallRuntime(CallRuntime* node) { |
increase_node_count(); |
+ add_slot_node(node); |
if (node->is_jsruntime()) { |
// Don't try to optimize JS runtime calls because we bailout on them. |
set_dont_optimize_reason(kCallToAJavaScriptRuntimeFunction); |