Changeset 176078 in webkit


Ignore:
Timestamp:
Nov 13, 2014, 11:07:11 AM (11 years ago)
Author:
mmaxfield@apple.com
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):

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r176066 r176078  
     12014-11-13  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        Allow constructing a base PassRef with a derived Ref
     4        https://bugs.webkit.org/show_bug.cgi?id=138701
     5
     6        Reviewed by Andreas Kling
     7
     8        * wtf/PassRef.h:
     9        (WTF::PassRef<T>::PassRef):
     10
    1112014-11-12  Ryuan Choi  <ryuan.choi@navercorp.com>
    212
  • trunk/Source/WTF/wtf/PassRef.h

    r175648 r176078  
    101101
    102102template<typename T> template<typename U> inline PassRef<T>::PassRef(const Ref<U>& other)
    103     : m_reference(const_cast<T&>(other.get()))
     103    : m_reference(static_cast<T&>(const_cast<U&>(other.get())))
    104104#ifndef NDEBUG
    105105    , m_gaveUpReference(false)
  • trunk/Tools/ChangeLog

    r176039 r176078  
     12014-11-13  Myles C. Maxfield  <mmaxfield@apple.com>
     2
     3        Allow constructing a base PassRef with a derived Ref
     4        https://bugs.webkit.org/show_bug.cgi?id=138701
     5
     6        Reviewed by Andreas Kling
     7
     8        * TestWebKitAPI/Tests/WTF/Ref.cpp:
     9        (TestWebKitAPI::passWithPassRef):
     10        (TestWebKitAPI::passWithPassRefPtr):
     11        (TestWebKitAPI::TEST):
     12
    1132014-11-05  Ada Chan  <adachan@apple.com>
    214
  • trunk/Tools/TestWebKitAPI/Tests/WTF/Ref.cpp

    r175583 r176078  
    9999}
    100100
    101 PassRef<RefLogger> passWithPassRef(PassRef<RefLogger> reference)
     101static PassRef<RefLogger> passWithPassRef(PassRef<RefLogger> reference)
    102102{
    103103    return reference;
    104104}
    105105
    106 RefPtr<RefLogger> passWithPassRefPtr(PassRefPtr<RefLogger> reference)
     106static RefPtr<RefLogger> passWithPassRefPtr(PassRefPtr<RefLogger> reference)
    107107{
    108108    return reference;
     
    142142    }
    143143    ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
     144
     145    {
     146        RefPtr<DerivedRefLogger> ptr(&a);
     147        RefPtr<RefLogger> ptr2(WTF::move(ptr));
     148        ASSERT_EQ(nullptr, ptr.get());
     149        ASSERT_EQ(&a, ptr2.get());
     150    }
     151    ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
     152
     153    {
     154        Ref<DerivedRefLogger> derivedReference(a);
     155        Ref<RefLogger> baseReference(passWithPassRef(derivedReference));
     156        ASSERT_EQ(&a, derivedReference.ptr());
     157        ASSERT_EQ(&a, baseReference.ptr());
     158    }
     159    ASSERT_STREQ("ref(a) ref(a) deref(a) deref(a) ", takeLogStr().c_str());
    144160}
    145161
Note: See TracChangeset for help on using the changeset viewer.