| Index: src/ast.h
|
| diff --git a/src/ast.h b/src/ast.h
|
| index f695e1233340d274df2b5aff68398c2623857c31..c55505ffd7fe8d231924cc96235e167bd1bb782c 100644
|
| --- a/src/ast.h
|
| +++ b/src/ast.h
|
| @@ -11,7 +11,6 @@
|
| #include "src/ast-value-factory.h"
|
| #include "src/bailout-reason.h"
|
| #include "src/factory.h"
|
| -#include "src/feedback-slots.h"
|
| #include "src/interface.h"
|
| #include "src/isolate.h"
|
| #include "src/jsregexp.h"
|
| @@ -233,6 +232,17 @@ class AstNode: public ZoneObject {
|
| virtual IterationStatement* AsIterationStatement() { return NULL; }
|
| virtual MaterializedLiteral* AsMaterializedLiteral() { return NULL; }
|
|
|
| + // The interface for feedback slots, with default no-op implementations for
|
| + // node types which don't actually have this. Note that this is conceptually
|
| + // not really nice, but multiple inheritance would introduce yet another
|
| + // vtable entry per node, something we don't want for space reasons.
|
| + static const int kInvalidFeedbackSlot = -1;
|
| + virtual int ComputeFeedbackSlotCount() {
|
| + UNREACHABLE();
|
| + return 0;
|
| + }
|
| + virtual void SetFirstFeedbackSlot(int slot) { UNREACHABLE(); }
|
| +
|
| protected:
|
| // Some nodes re-use bailout IDs for type feedback.
|
| static TypeFeedbackId reuse(BailoutId id) {
|
| @@ -914,8 +924,7 @@ class ForEachStatement : public IterationStatement {
|
| };
|
|
|
|
|
| -class ForInStatement FINAL : public ForEachStatement,
|
| - public FeedbackSlotInterface {
|
| +class ForInStatement FINAL : public ForEachStatement {
|
| public:
|
| DECLARE_NODE_TYPE(ForInStatement)
|
|
|
| @@ -1628,7 +1637,7 @@ class ArrayLiteral FINAL : public MaterializedLiteral {
|
| };
|
|
|
|
|
| -class VariableProxy FINAL : public Expression, public FeedbackSlotInterface {
|
| +class VariableProxy FINAL : public Expression {
|
| public:
|
| DECLARE_NODE_TYPE(VariableProxy)
|
|
|
| @@ -1672,7 +1681,7 @@ class VariableProxy FINAL : public Expression, public FeedbackSlotInterface {
|
| };
|
|
|
|
|
| -class Property FINAL : public Expression, public FeedbackSlotInterface {
|
| +class Property FINAL : public Expression {
|
| public:
|
| DECLARE_NODE_TYPE(Property)
|
|
|
| @@ -1741,7 +1750,7 @@ class Property FINAL : public Expression, public FeedbackSlotInterface {
|
| };
|
|
|
|
|
| -class Call FINAL : public Expression, public FeedbackSlotInterface {
|
| +class Call FINAL : public Expression {
|
| public:
|
| DECLARE_NODE_TYPE(Call)
|
|
|
| @@ -1844,7 +1853,7 @@ class Call FINAL : public Expression, public FeedbackSlotInterface {
|
| };
|
|
|
|
|
| -class CallNew FINAL : public Expression, public FeedbackSlotInterface {
|
| +class CallNew FINAL : public Expression {
|
| public:
|
| DECLARE_NODE_TYPE(CallNew)
|
|
|
| @@ -1907,7 +1916,7 @@ class CallNew FINAL : public Expression, public FeedbackSlotInterface {
|
| // language construct. Instead it is used to call a C or JS function
|
| // with a set of arguments. This is used from the builtins that are
|
| // implemented in JavaScript (see "v8natives.js").
|
| -class CallRuntime FINAL : public Expression, public FeedbackSlotInterface {
|
| +class CallRuntime FINAL : public Expression {
|
| public:
|
| DECLARE_NODE_TYPE(CallRuntime)
|
|
|
| @@ -2223,7 +2232,7 @@ class Assignment FINAL : public Expression {
|
| };
|
|
|
|
|
| -class Yield FINAL : public Expression, public FeedbackSlotInterface {
|
| +class Yield FINAL : public Expression {
|
| public:
|
| DECLARE_NODE_TYPE(Yield)
|
|
|
| @@ -3038,7 +3047,7 @@ class AstConstructionVisitor BASE_EMBEDDED {
|
| dont_turbofan_reason_ = reason;
|
| }
|
|
|
| - void add_slot_node(FeedbackSlotInterface* slot_node) {
|
| + void add_slot_node(AstNode* slot_node) {
|
| int count = slot_node->ComputeFeedbackSlotCount();
|
| if (count > 0) {
|
| slot_node->SetFirstFeedbackSlot(properties_.feedback_slots());
|
|
|