// Copyright 2017 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_VECTOR_SLOT_PAIR_H_ #define V8_VECTOR_SLOT_PAIR_H_ #include "src/globals.h" #include "src/handles.h" #include "src/utils.h" namespace v8 { namespace internal { class FeedbackVector; // Defines a pair of {FeedbackVector} and {FeedbackSlot}, which // is used to access the type feedback for a certain {Node}. class V8_EXPORT_PRIVATE VectorSlotPair { public: VectorSlotPair(); VectorSlotPair(Handle vector, FeedbackSlot slot, InlineCacheState ic_state) : vector_(vector), slot_(slot), ic_state_(ic_state) {} bool IsValid() const { return !vector_.is_null() && !slot_.IsInvalid(); } Handle vector() const { return vector_; } FeedbackSlot slot() const { return slot_; } InlineCacheState ic_state() const { return ic_state_; } int index() const; private: Handle vector_; FeedbackSlot slot_; InlineCacheState ic_state_ = UNINITIALIZED; }; bool operator==(VectorSlotPair const&, VectorSlotPair const&); bool operator!=(VectorSlotPair const&, VectorSlotPair const&); V8_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os, VectorSlotPair const&); size_t hash_value(VectorSlotPair const&); } // namespace internal } // namespace v8 #endif // V8_VECTOR_SLOT_PAIR_H_