Title: [285304] branches/safari-612-branch/Source/WTF/wtf/WeakPtr.h
Revision
285304
Author
[email protected]
Date
2021-11-04 13:02:17 -0700 (Thu, 04 Nov 2021)

Log Message

Unreviewed build fix. rdar://85029973

Support both makeWeakPtr and WeakPtr.

Modified Paths

Diff

Modified: branches/safari-612-branch/Source/WTF/wtf/WeakPtr.h (285303 => 285304)


--- branches/safari-612-branch/Source/WTF/wtf/WeakPtr.h	2021-11-04 19:56:29 UTC (rev 285303)
+++ branches/safari-612-branch/Source/WTF/wtf/WeakPtr.h	2021-11-04 20:02:17 UTC (rev 285304)
@@ -99,6 +99,34 @@
     template<typename U> WeakPtr(const WeakPtr<U, Counter>&);
     template<typename U> WeakPtr(WeakPtr<U, Counter>&&);
 
+    template<typename = std::enable_if_t<!IsSmartPtr<T>::value>> WeakPtr(T* object, EnableWeakPtrThreadingAssertions shouldEnableAssertions = EnableWeakPtrThreadingAssertions::Yes)
+        : m_impl(object ? implForObject(*object) : nullptr)
+#if ASSERT_ENABLED
+        , m_shouldEnableAssertions(shouldEnableAssertions == EnableWeakPtrThreadingAssertions::Yes)
+#endif
+    {
+        UNUSED_PARAM(shouldEnableAssertions);
+        ASSERT(!object || object == m_impl->template get<T>());
+    }
+
+    template<typename = std::enable_if_t<!IsSmartPtr<T>::value>> WeakPtr(T& object, EnableWeakPtrThreadingAssertions shouldEnableAssertions = EnableWeakPtrThreadingAssertions::Yes)
+        : m_impl(implForObject(object))
+#if ASSERT_ENABLED
+        , m_shouldEnableAssertions(shouldEnableAssertions == EnableWeakPtrThreadingAssertions::Yes)
+#endif
+    {
+        UNUSED_PARAM(shouldEnableAssertions);
+        ASSERT(&object == m_impl->template get<T>());
+    }
+
+    template<typename = std::enable_if_t<!IsSmartPtr<T>::value>> WeakPtr(Ref<T>& object, EnableWeakPtrThreadingAssertions shouldEnableAssertions = EnableWeakPtrThreadingAssertions::Yes)
+        : WeakPtr(object.get(), shouldEnableAssertions)
+    { }
+
+    template<typename = std::enable_if_t<!IsSmartPtr<T>::value>> WeakPtr(RefPtr<T>& object, EnableWeakPtrThreadingAssertions shouldEnableAssertions = EnableWeakPtrThreadingAssertions::Yes)
+        : WeakPtr(object.get(), shouldEnableAssertions)
+    { }
+
     T* get() const
     {
         // FIXME: Our GC threads currently need to get opaque pointers from WeakPtrs and have to be special-cased.
@@ -142,6 +170,12 @@
         UNUSED_PARAM(shouldEnableAssertions);
     }
 
+    template<typename U> static WeakPtrImpl<Counter>* implForObject(U& object)
+    {
+        object.weakPtrFactory().initializeIfNeeded(object);
+        return object.weakPtrFactory().m_impl.get();
+    }
+
     RefPtr<WeakPtrImpl<Counter>> m_impl;
 #if ASSERT_ENABLED
     bool m_shouldEnableAssertions { true };
@@ -204,6 +238,7 @@
 private:
     template<typename, typename> friend class WeakHashSet;
     template<typename, typename, typename> friend class WeakHashMap;
+    template<typename, typename> friend class WeakPtr;
 
     mutable RefPtr<WeakPtrImpl<Counter>> m_impl;
 #if ASSERT_ENABLED
@@ -266,11 +301,13 @@
     return *this;
 }
 
+// makeWeakPtr() is deprecated. Use WeakPtr { object } directly instead.
 template<typename T, typename = std::enable_if_t<!IsSmartPtr<T>::value>> inline auto makeWeakPtr(T& object, EnableWeakPtrThreadingAssertions enableWeakPtrThreadingAssertions = EnableWeakPtrThreadingAssertions::Yes)
 {
     return object.weakPtrFactory().template createWeakPtr<T>(object, enableWeakPtrThreadingAssertions);
 }
 
+// makeWeakPtr() is deprecated. Use WeakPtr { object } directly instead.
 template<typename T, typename = std::enable_if_t<!IsSmartPtr<T>::value>> inline auto makeWeakPtr(T* ptr, EnableWeakPtrThreadingAssertions enableWeakPtrThreadingAssertions = EnableWeakPtrThreadingAssertions::Yes) -> decltype(makeWeakPtr(*ptr))
 {
     if (!ptr)
@@ -278,11 +315,13 @@
     return makeWeakPtr(*ptr, enableWeakPtrThreadingAssertions);
 }
 
+// makeWeakPtr() is deprecated. Use WeakPtr { object } directly instead.
 template<typename T, typename = std::enable_if_t<!IsSmartPtr<T>::value>> inline auto makeWeakPtr(const Ref<T>& object, EnableWeakPtrThreadingAssertions enableWeakPtrThreadingAssertions = EnableWeakPtrThreadingAssertions::Yes)
 {
     return makeWeakPtr(object.get(), enableWeakPtrThreadingAssertions);
 }
 
+// makeWeakPtr() is deprecated. Use WeakPtr { object } directly instead.
 template<typename T, typename = std::enable_if_t<!IsSmartPtr<T>::value>> inline auto makeWeakPtr(const RefPtr<T>& object, EnableWeakPtrThreadingAssertions enableWeakPtrThreadingAssertions = EnableWeakPtrThreadingAssertions::Yes)
 {
     return makeWeakPtr(object.get(), enableWeakPtrThreadingAssertions);
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to