Index: src/type-feedback-vector.h |
diff --git a/src/type-feedback-vector.h b/src/type-feedback-vector.h |
index aba42a6c91027a4d6a660594f82ed77519131941..c26a2d3e0d5670e4d92a71208e41993ff107e8ad 100644 |
--- a/src/type-feedback-vector.h |
+++ b/src/type-feedback-vector.h |
@@ -12,18 +12,44 @@ |
#include "src/heap/heap.h" |
#include "src/isolate.h" |
#include "src/objects.h" |
+#include "src/zone-containers.h" |
namespace v8 { |
namespace internal { |
class FeedbackVectorSpec { |
public: |
- FeedbackVectorSpec() : slots_(0), ic_slots_(0) {} |
- FeedbackVectorSpec(int slots, int ic_slots) |
- : slots_(slots), ic_slots_(ic_slots) { |
- if (FLAG_vector_ics) ic_slot_kinds_.resize(ic_slots); |
+ FeedbackVectorSpec() : slots_(0), has_ic_slot_(false) {} |
+ explicit FeedbackVectorSpec(int slots) : slots_(slots), has_ic_slot_(false) {} |
+ FeedbackVectorSpec(int slots, Code::Kind ic_slot_kind) |
+ : slots_(slots), has_ic_slot_(true), ic_kind_(ic_slot_kind) {} |
+ |
+ int slots() const { return slots_; } |
+ |
+ int ic_slots() const { return has_ic_slot_ ? 1 : 0; } |
+ |
+ Code::Kind GetKind(int ic_slot) const { |
+ DCHECK(FLAG_vector_ics && has_ic_slot_ && ic_slot == 0); |
+ return ic_kind_; |
} |
+ private: |
+ int slots_; |
+ bool has_ic_slot_; |
+ Code::Kind ic_kind_; |
+}; |
+ |
+ |
+class ZoneFeedbackVectorSpec { |
+ public: |
+ explicit ZoneFeedbackVectorSpec(Zone* zone) |
+ : slots_(0), ic_slots_(0), ic_slot_kinds_(zone) {} |
+ |
+ ZoneFeedbackVectorSpec(Zone* zone, int slots, int ic_slots) |
+ : slots_(slots), |
+ ic_slots_(ic_slots), |
+ ic_slot_kinds_(FLAG_vector_ics ? ic_slots : 0, zone) {} |
+ |
int slots() const { return slots_; } |
void increase_slots(int count) { slots_ += count; } |
@@ -46,7 +72,7 @@ class FeedbackVectorSpec { |
private: |
int slots_; |
int ic_slots_; |
- std::vector<unsigned char> ic_slot_kinds_; |
+ ZoneVector<unsigned char> ic_slot_kinds_; |
}; |
@@ -161,8 +187,9 @@ class TypeFeedbackVector : public FixedArray { |
// IC slots need metadata to recognize the type of IC. |
Code::Kind GetKind(FeedbackVectorICSlot slot) const; |
+ template <typename Spec> |
static Handle<TypeFeedbackVector> Allocate(Isolate* isolate, |
- const FeedbackVectorSpec& spec); |
+ const Spec* spec); |
static Handle<TypeFeedbackVector> Copy(Isolate* isolate, |
Handle<TypeFeedbackVector> vector); |