Index: src/ast/ast.h |
diff --git a/src/ast/ast.h b/src/ast/ast.h |
index 299a94b9258f85f7bd53939d913bd40950082eb6..12e8de97158c3d44c8b6c28f469aec59b3642461 100644 |
--- a/src/ast/ast.h |
+++ b/src/ast/ast.h |
@@ -2567,6 +2567,18 @@ class FunctionLiteral final : public Expression { |
} |
LanguageMode language_mode() const; |
+ void AssignFeedbackVectorSlots(Isolate* isolate, FeedbackVectorSpec* spec, |
+ FeedbackVectorSlotCache* cache) { |
+ // The + 1 is because we need an array with room for the literals |
+ // as well as the feedback vector. |
+ literal_feedback_slot_ = |
+ spec->AddCreateClosureSlot(materialized_literal_count_ + 1); |
+ } |
+ |
+ FeedbackVectorSlot LiteralFeedbackSlot() const { |
+ return literal_feedback_slot_; |
+ } |
+ |
static bool NeedsHomeObject(Expression* expr); |
int materialized_literal_count() { return materialized_literal_count_; } |
@@ -2734,6 +2746,7 @@ class FunctionLiteral final : public Expression { |
Handle<String> inferred_name_; |
AstProperties ast_properties_; |
int function_literal_id_; |
+ FeedbackVectorSlot literal_feedback_slot_; |
}; |
// Property is used for passing information |
@@ -2824,6 +2837,19 @@ class NativeFunctionLiteral final : public Expression { |
public: |
Handle<String> name() const { return name_->string(); } |
v8::Extension* extension() const { return extension_; } |
+ FeedbackVectorSlot LiteralFeedbackSlot() const { |
+ return literal_feedback_slot_; |
+ } |
+ |
+ void AssignFeedbackVectorSlots(Isolate* isolate, FeedbackVectorSpec* spec, |
+ FeedbackVectorSlotCache* cache) { |
+ // 0 is a magic number here. It means we are holding the literals |
+ // array for a native function literal, which needs to be |
+ // the empty literals array. |
+ // TODO(mvstanton): The FeedbackVectorSlotCache can be adapted |
+ // to always return the same slot for this case. |
+ literal_feedback_slot_ = spec->AddCreateClosureSlot(0); |
+ } |
private: |
friend class AstNodeFactory; |
@@ -2836,6 +2862,7 @@ class NativeFunctionLiteral final : public Expression { |
const AstRawString* name_; |
v8::Extension* extension_; |
+ FeedbackVectorSlot literal_feedback_slot_; |
}; |