Skip to content

Commit

Permalink
Merge r180535 - WTF::WeakPtr should rename 'forgot' to 'clear' and su…
Browse files Browse the repository at this point in the history
…pport nullptr assignment

https://bugs.webkit.org/show_bug.cgi?id=141935

Reviewed by Myles C. Maxfield.

Source/WTF:

* wtf/WeakPtr.h:
(WTF::WeakPtr::operator=): Added 'nullptr_t' overload.
(WTF::WeakPtr::clear): Renamed from 'forget'
(WTF::WeakPtr::forget): Deleted.

Tools:

* TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
(TestWebKitAPI::TEST): Updated for 'clear' method rename, and added a few
tests for assigning from nullptr.
  • Loading branch information
Brent Fulgham authored and carlosgcampos committed Feb 28, 2015
1 parent 7f91720 commit 7c1199b
Show file tree
Hide file tree
Showing 4 changed files with 53 additions and 9 deletions.
12 changes: 12 additions & 0 deletions Source/WTF/ChangeLog
@@ -1,3 +1,15 @@
2015-02-23 Brent Fulgham <bfulgham@apple.com>

WTF::WeakPtr should rename 'forgot' to 'clear' and support nullptr assignment
https://bugs.webkit.org/show_bug.cgi?id=141935

Reviewed by Myles C. Maxfield.

* wtf/WeakPtr.h:
(WTF::WeakPtr::operator=): Added 'nullptr_t' overload.
(WTF::WeakPtr::clear): Renamed from 'forget'
(WTF::WeakPtr::forget): Deleted.

2015-02-23 Brent Fulgham <bfulgham@apple.com>

WTF::WeakPtr should have a 'forget' method
Expand Down
3 changes: 2 additions & 1 deletion Source/WTF/wtf/WeakPtr.h
Expand Up @@ -100,10 +100,11 @@ class WeakPtr {

WeakPtr& operator=(const WeakPtr& o) { m_ref = o.m_ref.copyRef(); return *this; }
template<typename U> WeakPtr& operator=(const WeakPtr<U>& o) { m_ref = o.m_ref.copyRef(); return *this; }
WeakPtr& operator=(std::nullptr_t) { m_ref = WeakReference<T>::create(nullptr); return *this; }

T* operator->() const { return m_ref->get(); }

void forget() { m_ref = WeakReference<T>::create(nullptr); }
void clear() { m_ref = WeakReference<T>::create(nullptr); }

private:
friend class WeakPtrFactory<T>;
Expand Down
11 changes: 11 additions & 0 deletions Tools/ChangeLog
@@ -1,3 +1,14 @@
2015-02-23 Brent Fulgham <bfulgham@apple.com>

WTF::WeakPtr should rename 'forgot' to 'clear' and support nullptr assignment
https://bugs.webkit.org/show_bug.cgi?id=141935

Reviewed by Myles C. Maxfield.

* TestWebKitAPI/Tests/WTF/WeakPtr.cpp:
(TestWebKitAPI::TEST): Updated for 'clear' method rename, and added a few
tests for assigning from nullptr.

2015-02-23 Brent Fulgham <bfulgham@apple.com>

WTF::WeakPtr should have a 'forget' method.
Expand Down
36 changes: 28 additions & 8 deletions Tools/TestWebKitAPI/Tests/WTF/WeakPtr.cpp
Expand Up @@ -125,29 +125,41 @@ TEST(WTF_WeakPtr, Forget)
int dummy2 = 7;

WeakPtrFactory<int> outerFactory(&dummy2);
WeakPtr<int> weakPtr1, weakPtr2, weakPtr4;
WeakPtr<int> weakPtr1, weakPtr2, weakPtr3, weakPtr4;
{
WeakPtrFactory<int> innerFactory(&dummy);
weakPtr1 = innerFactory.createWeakPtr();
weakPtr2 = innerFactory.createWeakPtr();
weakPtr3 = innerFactory.createWeakPtr();
EXPECT_EQ(weakPtr1.get(), &dummy);
EXPECT_EQ(weakPtr2.get(), &dummy);
weakPtr1.forget();
EXPECT_EQ(weakPtr3.get(), &dummy);
weakPtr1.clear();
weakPtr3 = nullptr;
EXPECT_NULL(weakPtr1.get());
EXPECT_EQ(weakPtr2.get(), &dummy);
weakPtr1.forget();
EXPECT_NULL(weakPtr3.get());
weakPtr1.clear();
weakPtr3.clear();
EXPECT_NULL(weakPtr1.get());
EXPECT_EQ(weakPtr2.get(), &dummy);
WeakPtr<int> weakPtr3 = weakPtr2;
EXPECT_EQ(weakPtr2.get(), &dummy);
EXPECT_EQ(weakPtr3.get(), &dummy);
weakPtr3.forget();
EXPECT_NULL(weakPtr3.get());
weakPtr3 = nullptr;
EXPECT_NULL(weakPtr1.get());
EXPECT_EQ(weakPtr2.get(), &dummy);
EXPECT_NULL(weakPtr3.get());

weakPtr4 = weakPtr2;
EXPECT_EQ(weakPtr2.get(), &dummy);
EXPECT_EQ(weakPtr4.get(), &dummy);

WeakPtr<int> weakPtr5 = weakPtr2;
EXPECT_EQ(weakPtr2.get(), &dummy);
EXPECT_EQ(weakPtr5.get(), &dummy);
weakPtr5.clear();
EXPECT_NULL(weakPtr5.get());
EXPECT_EQ(weakPtr2.get(), &dummy);

weakPtr4 = outerFactory.createWeakPtr();
EXPECT_EQ(weakPtr2.get(), &dummy);
EXPECT_EQ(weakPtr4.get(), &dummy2);
Expand All @@ -160,11 +172,19 @@ TEST(WTF_WeakPtr, Forget)
WeakPtr<int> weakPtr5 = weakPtr4;
EXPECT_EQ(weakPtr4.get(), &dummy2);
EXPECT_EQ(weakPtr5.get(), &dummy2);
weakPtr5.forget();
weakPtr5.clear();
EXPECT_NULL(weakPtr5.get());
WeakPtr<int> weakPtr6 = weakPtr5;
EXPECT_NULL(weakPtr6.get());
EXPECT_EQ(weakPtr5.get(), weakPtr6.get());

WeakPtr<int> weakPtr7 = outerFactory.createWeakPtr();
EXPECT_EQ(weakPtr7.get(), &dummy2);
weakPtr7 = nullptr;
EXPECT_NULL(weakPtr7.get());

int doNotCopyMe = 152;
weakPtr7 = &doNotCopyMe;
}

} // namespace TestWebKitAPI

0 comments on commit 7c1199b

Please sign in to comment.