Title: [176078] trunk
Revision
176078
Author
[email protected]
Date
2014-11-13 11:07:11 -0800 (Thu, 13 Nov 2014)

Log Message

Allow constructing a base PassRef with a derived Ref
https://bugs.webkit.org/show_bug.cgi?id=138701

Reviewed by Andreas Kling

Source/WTF:

* wtf/PassRef.h:
(WTF::PassRef<T>::PassRef):

Tools:

* TestWebKitAPI/Tests/WTF/Ref.cpp:
(TestWebKitAPI::passWithPassRef):
(TestWebKitAPI::passWithPassRefPtr):
(TestWebKitAPI::TEST):

Modified Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (176077 => 176078)


--- trunk/Source/WTF/ChangeLog	2014-11-13 18:52:55 UTC (rev 176077)
+++ trunk/Source/WTF/ChangeLog	2014-11-13 19:07:11 UTC (rev 176078)
@@ -1,3 +1,13 @@
+2014-11-13  Myles C. Maxfield  <[email protected]>
+
+        Allow constructing a base PassRef with a derived Ref
+        https://bugs.webkit.org/show_bug.cgi?id=138701
+
+        Reviewed by Andreas Kling
+
+        * wtf/PassRef.h:
+        (WTF::PassRef<T>::PassRef):
+
 2014-11-12  Ryuan Choi  <[email protected]>
 
         [EFL] Fix the build with EFL 1.12

Modified: trunk/Source/WTF/wtf/PassRef.h (176077 => 176078)


--- trunk/Source/WTF/wtf/PassRef.h	2014-11-13 18:52:55 UTC (rev 176077)
+++ trunk/Source/WTF/wtf/PassRef.h	2014-11-13 19:07:11 UTC (rev 176078)
@@ -100,7 +100,7 @@
 }
 
 template<typename T> template<typename U> inline PassRef<T>::PassRef(const Ref<U>& other)
-    : m_reference(const_cast<T&>(other.get()))
+    : m_reference(static_cast<T&>(const_cast<U&>(other.get())))
 #ifndef NDEBUG
     , m_gaveUpReference(false)
 #endif

Modified: trunk/Tools/ChangeLog (176077 => 176078)


--- trunk/Tools/ChangeLog	2014-11-13 18:52:55 UTC (rev 176077)
+++ trunk/Tools/ChangeLog	2014-11-13 19:07:11 UTC (rev 176078)
@@ -1,3 +1,15 @@
+2014-11-13  Myles C. Maxfield  <[email protected]>
+
+        Allow constructing a base PassRef with a derived Ref
+        https://bugs.webkit.org/show_bug.cgi?id=138701
+
+        Reviewed by Andreas Kling
+
+        * TestWebKitAPI/Tests/WTF/Ref.cpp:
+        (TestWebKitAPI::passWithPassRef):
+        (TestWebKitAPI::passWithPassRefPtr):
+        (TestWebKitAPI::TEST):
+
 2014-11-05  Ada Chan  <[email protected]>
 
         Implement new plug-in API for muting plug-ins

Modified: trunk/Tools/TestWebKitAPI/Tests/WTF/Ref.cpp (176077 => 176078)


--- trunk/Tools/TestWebKitAPI/Tests/WTF/Ref.cpp	2014-11-13 18:52:55 UTC (rev 176077)
+++ trunk/Tools/TestWebKitAPI/Tests/WTF/Ref.cpp	2014-11-13 19:07:11 UTC (rev 176078)
@@ -98,12 +98,12 @@
     ASSERT_STREQ("ref(a) | deref(a) | deref(c) ", takeLogStr().c_str());
 }
 
-PassRef<RefLogger> passWithPassRef(PassRef<RefLogger> reference)
+static PassRef<RefLogger> passWithPassRef(PassRef<RefLogger> reference)
 {
     return reference;
 }
 
-RefPtr<RefLogger> passWithPassRefPtr(PassRefPtr<RefLogger> reference)
+static RefPtr<RefLogger> passWithPassRefPtr(PassRefPtr<RefLogger> reference)
 {
     return reference;
 }
@@ -141,6 +141,22 @@
         ASSERT_EQ(&a, ptr.get());
     }
     ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
+
+    {
+        RefPtr<DerivedRefLogger> ptr(&a);
+        RefPtr<RefLogger> ptr2(WTF::move(ptr));
+        ASSERT_EQ(nullptr, ptr.get());
+        ASSERT_EQ(&a, ptr2.get());
+    }
+    ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
+
+    {
+        Ref<DerivedRefLogger> derivedReference(a);
+        Ref<RefLogger> baseReference(passWithPassRef(derivedReference));
+        ASSERT_EQ(&a, derivedReference.ptr());
+        ASSERT_EQ(&a, baseReference.ptr());
+    }
+    ASSERT_STREQ("ref(a) ref(a) deref(a) deref(a) ", takeLogStr().c_str());
 }
 
 } // namespace TestWebKitAPI
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to