Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(375)

Unified Diff: src/handles.h

Issue 1319383002: Drop ambiguous MaybeHandle comparison and hashing ops. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@local_cleanup-includes-unique-2
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/compiler/js-type-feedback-lowering.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/handles.h
diff --git a/src/handles.h b/src/handles.h
index 312b7506df0d0f01c51ec65214c036630b632380..85fa839f3f3981758ac28b8f7d934e210d2a75ba 100644
--- a/src/handles.h
+++ b/src/handles.h
@@ -71,8 +71,14 @@ class HandleBase {
// ----------------------------------------------------------------------------
// A Handle provides a reference to an object that survives relocation by
// the garbage collector.
-// Handles are only valid within a HandleScope.
-// When a handle is created for an object a cell is allocated in the heap.
+//
+// Handles are only valid within a HandleScope. When a handle is created
+// for an object a cell is allocated in the current HandleScope.
+//
+// Also note that Handles do not provide default equality comparison or hashing
+// operators on purpose. Such operators would be misleading, because intended
+// semantics is ambiguous between Handle location and object identity. Instead
+// use either {is_identical_to} or {location} explicitly.
template <typename T>
class Handle final : public HandleBase {
public:
@@ -160,7 +166,12 @@ V8_INLINE Handle<T> handle(T* object) {
// A Handle can be converted into a MaybeHandle. Converting a MaybeHandle
// into a Handle requires checking that it does not point to NULL. This
// ensures NULL checks before use.
+//
// Do not use MaybeHandle as argument type.
+//
+// Also note that Handles do not provide default equality comparison or hashing
+// operators on purpose. Such operators would be misleading, because intended
+// semantics is ambiguous between Handle location and object identity.
template <typename T>
class MaybeHandle final {
public:
@@ -211,15 +222,6 @@ class MaybeHandle final {
bool is_null() const { return location_ == nullptr; }
- template <typename S>
- V8_INLINE bool operator==(MaybeHandle<S> that) const {
- return this->location_ == that.location_;
- }
- template <typename S>
- V8_INLINE bool operator!=(MaybeHandle<S> that) const {
- return this->location_ != that.location_;
- }
-
protected:
T** location_ = nullptr;
@@ -227,19 +229,10 @@ class MaybeHandle final {
// other's location_.
template <typename>
friend class MaybeHandle;
- // Utility functions are allowed to access location_.
- template <typename S>
- friend size_t hash_value(MaybeHandle<S>);
};
-template <typename T>
-V8_INLINE size_t hash_value(MaybeHandle<T> maybe_handle) {
- uintptr_t v = bit_cast<uintptr_t>(maybe_handle.location_);
- DCHECK_EQ(0u, v & ((1u << kPointerSizeLog2) - 1));
- return v >> kPointerSizeLog2;
-}
-
+// ----------------------------------------------------------------------------
// A stack-allocated class that governs a number of local handles.
// After a handle scope has been created, all local handles will be
// allocated within that handle scope until either the handle scope is
« no previous file with comments | « src/compiler/js-type-feedback-lowering.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698