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);