WebKit Bugzilla
Attachment 347638 Details for
Bug 188785
: Allow creating WeakPtrs to const objects
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
patch
weakptr-const.patch (text/plain), 10.26 KB, created by
Antti Koivisto
on 2018-08-21 06:16:30 PDT
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Antti Koivisto
Created:
2018-08-21 06:16:30 PDT
Size:
10.26 KB
patch
obsolete
>Index: Source/WTF/ChangeLog >=================================================================== >--- Source/WTF/ChangeLog (revision 235110) >+++ Source/WTF/ChangeLog (working copy) >@@ -1,3 +1,19 @@ >+2018-08-21 Antti Koivisto <antti@apple.com> >+ >+ Allow creating WeakPtrs to const objects >+ https://bugs.webkit.org/show_bug.cgi?id=188785 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ const Foo foo; >+ WeakPtr<const Foo> weakConstFoo = makeWeakPtr(foo); >+ >+ * wtf/WeakPtr.h: >+ (WTF::WeakPtrFactory::createWeakPtr const): >+ >+ Add a separate factory function for const T. >+ The underlying WeakReference is kept non-const in all cases. >+ > 2018-08-20 Saam barati <sbarati@apple.com> > > Inline DataView accesses into DFG/FTL >Index: Source/WTF/wtf/WeakPtr.h >=================================================================== >--- Source/WTF/wtf/WeakPtr.h (revision 235110) >+++ Source/WTF/wtf/WeakPtr.h (working copy) >@@ -111,6 +111,13 @@ public: > return { makeRef(*m_ref) }; > } > >+ WeakPtr<const T> createWeakPtr(const T& ptr) const >+ { >+ if (!m_ref) >+ m_ref = WeakReference<T>::create(const_cast<T*>(&ptr)); >+ return { makeRef(reinterpret_cast<WeakReference<const T>&>(*m_ref)) }; >+ } >+ > void revokeAll() > { > if (!m_ref) >Index: Source/WebCore/ChangeLog >=================================================================== >--- Source/WebCore/ChangeLog (revision 235110) >+++ Source/WebCore/ChangeLog (working copy) >@@ -1,3 +1,25 @@ >+2018-08-21 Antti Koivisto <antti@apple.com> >+ >+ Allow creating WeakPtrs to const objects >+ https://bugs.webkit.org/show_bug.cgi?id=188785 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Remove some unneeded const_casts. >+ >+ * css/MediaQueryEvaluator.cpp: >+ (WebCore::MediaQueryEvaluator::MediaQueryEvaluator): >+ (WebCore::MediaQueryEvaluator::evaluate const): >+ * css/MediaQueryEvaluator.h: >+ * rendering/FloatingObjects.cpp: >+ (WebCore::ComputeFloatOffsetAdapter::ComputeFloatOffsetAdapter): >+ (WebCore::ComputeFloatOffsetForFloatLayoutAdapter::ComputeFloatOffsetForFloatLayoutAdapter): >+ (WebCore::ComputeFloatOffsetForLineLayoutAdapter::ComputeFloatOffsetForLineLayoutAdapter): >+ (WebCore::FindNextFloatLogicalBottomAdapter::FindNextFloatLogicalBottomAdapter): >+ (WebCore::FloatingObjects::FloatingObjects): >+ * rendering/FloatingObjects.h: >+ (WebCore::FloatingObjects::renderer const): >+ > 2018-08-21 Philippe Normand <philn@igalia.com> > > [GStreamer][MSE] Generic main thread notification support >Index: Source/WebCore/css/MediaQueryEvaluator.cpp >=================================================================== >--- Source/WebCore/css/MediaQueryEvaluator.cpp (revision 235110) >+++ Source/WebCore/css/MediaQueryEvaluator.cpp (working copy) >@@ -110,7 +110,7 @@ MediaQueryEvaluator::MediaQueryEvaluator > > MediaQueryEvaluator::MediaQueryEvaluator(const String& acceptedMediaType, const Document& document, const RenderStyle* style) > : m_mediaType(acceptedMediaType) >- , m_document(makeWeakPtr(const_cast<Document&>(document))) >+ , m_document(makeWeakPtr(document)) > , m_style(style) > { > } >@@ -787,7 +787,7 @@ bool MediaQueryEvaluator::evaluate(const > if (!m_document) > return m_fallbackResult; > >- Document& document = *m_document; >+ auto& document = *m_document; > auto* frame = document.frame(); > if (!frame || !frame->view() || !m_style) > return m_fallbackResult; >Index: Source/WebCore/css/MediaQueryEvaluator.h >=================================================================== >--- Source/WebCore/css/MediaQueryEvaluator.h (revision 235110) >+++ Source/WebCore/css/MediaQueryEvaluator.h (working copy) >@@ -75,7 +75,7 @@ public: > > private: > String m_mediaType; >- WeakPtr<Document> m_document; >+ WeakPtr<const Document> m_document; > const RenderStyle* m_style { nullptr }; > bool m_fallbackResult { false }; > }; >Index: Source/WebCore/rendering/FloatingObjects.cpp >=================================================================== >--- Source/WebCore/rendering/FloatingObjects.cpp (revision 235110) >+++ Source/WebCore/rendering/FloatingObjects.cpp (working copy) >@@ -124,7 +124,7 @@ class ComputeFloatOffsetAdapter { > public: > typedef FloatingObjectInterval IntervalType; > >- ComputeFloatOffsetAdapter(RenderBlockFlow& renderer, LayoutUnit lineTop, LayoutUnit lineBottom, LayoutUnit offset) >+ ComputeFloatOffsetAdapter(const RenderBlockFlow& renderer, LayoutUnit lineTop, LayoutUnit lineBottom, LayoutUnit offset) > : m_renderer(makeWeakPtr(renderer)) > , m_lineTop(lineTop) > , m_lineBottom(lineBottom) >@@ -144,7 +144,7 @@ public: > protected: > virtual bool updateOffsetIfNeeded(const FloatingObject&) = 0; > >- WeakPtr<RenderBlockFlow> m_renderer; >+ WeakPtr<const RenderBlockFlow> m_renderer; > LayoutUnit m_lineTop; > LayoutUnit m_lineBottom; > LayoutUnit m_offset; >@@ -154,7 +154,7 @@ protected: > template <FloatingObject::Type FloatTypeValue> > class ComputeFloatOffsetForFloatLayoutAdapter : public ComputeFloatOffsetAdapter<FloatTypeValue> { > public: >- ComputeFloatOffsetForFloatLayoutAdapter(RenderBlockFlow& renderer, LayoutUnit lineTop, LayoutUnit lineBottom, LayoutUnit offset) >+ ComputeFloatOffsetForFloatLayoutAdapter(const RenderBlockFlow& renderer, LayoutUnit lineTop, LayoutUnit lineBottom, LayoutUnit offset) > : ComputeFloatOffsetAdapter<FloatTypeValue>(renderer, lineTop, lineBottom, offset) > { > } >@@ -170,7 +170,7 @@ protected: > template <FloatingObject::Type FloatTypeValue> > class ComputeFloatOffsetForLineLayoutAdapter : public ComputeFloatOffsetAdapter<FloatTypeValue> { > public: >- ComputeFloatOffsetForLineLayoutAdapter(RenderBlockFlow& renderer, LayoutUnit lineTop, LayoutUnit lineBottom, LayoutUnit offset) >+ ComputeFloatOffsetForLineLayoutAdapter(const RenderBlockFlow& renderer, LayoutUnit lineTop, LayoutUnit lineBottom, LayoutUnit offset) > : ComputeFloatOffsetAdapter<FloatTypeValue>(renderer, lineTop, lineBottom, offset) > { > } >@@ -185,7 +185,7 @@ class FindNextFloatLogicalBottomAdapter > public: > typedef FloatingObjectInterval IntervalType; > >- FindNextFloatLogicalBottomAdapter(RenderBlockFlow& renderer, LayoutUnit belowLogicalHeight) >+ FindNextFloatLogicalBottomAdapter(const RenderBlockFlow& renderer, LayoutUnit belowLogicalHeight) > : m_renderer(makeWeakPtr(renderer)) > , m_belowLogicalHeight(belowLogicalHeight) > { >@@ -199,7 +199,7 @@ public: > LayoutUnit nextShapeLogicalBottom() const { return m_nextShapeLogicalBottom.value_or(nextLogicalBottom()); } > > private: >- WeakPtr<RenderBlockFlow> m_renderer; >+ WeakPtr<const RenderBlockFlow> m_renderer; > LayoutUnit m_belowLogicalHeight; > std::optional<LayoutUnit> m_nextLogicalBottom; > std::optional<LayoutUnit> m_nextShapeLogicalBottom; >@@ -250,7 +250,7 @@ FloatingObjects::FloatingObjects(const R > : m_leftObjectsCount(0) > , m_rightObjectsCount(0) > , m_horizontalWritingMode(renderer.isHorizontalWritingMode()) >- , m_renderer(makeWeakPtr(const_cast<RenderBlockFlow&>(renderer))) >+ , m_renderer(makeWeakPtr(renderer)) > { > } > >Index: Source/WebCore/rendering/FloatingObjects.h >=================================================================== >--- Source/WebCore/rendering/FloatingObjects.h (revision 235110) >+++ Source/WebCore/rendering/FloatingObjects.h (working copy) >@@ -161,7 +161,7 @@ public: > LayoutUnit findNextFloatLogicalBottomBelowForBlock(LayoutUnit logicalHeight); > > private: >- RenderBlockFlow& renderer() const { return *m_renderer; } >+ const RenderBlockFlow& renderer() const { return *m_renderer; } > void computePlacedFloatsTree(); > const FloatingObjectTree* placedFloatsTree(); > void increaseObjectsCount(FloatingObject::Type); >@@ -173,7 +173,7 @@ private: > unsigned m_leftObjectsCount; > unsigned m_rightObjectsCount; > bool m_horizontalWritingMode; >- WeakPtr<RenderBlockFlow> m_renderer; >+ WeakPtr<const RenderBlockFlow> m_renderer; > }; > > } // namespace WebCore >Index: Tools/ChangeLog >=================================================================== >--- Tools/ChangeLog (revision 235110) >+++ Tools/ChangeLog (working copy) >@@ -1,3 +1,15 @@ >+2018-08-21 Antti Koivisto <antti@apple.com> >+ >+ Allow creating WeakPtrs to const objects >+ https://bugs.webkit.org/show_bug.cgi?id=188785 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * TestWebKitAPI/Tests/WTF/WeakPtr.cpp: >+ (TestWebKitAPI::Base::weakPtrFactory const): >+ (TestWebKitAPI::TEST): >+ (TestWebKitAPI::Base::weakPtrFactory): Deleted. >+ > 2018-08-20 Jonathan Bedard <jbedard@apple.com> > > WebKitTestRunner: Add watchOS entitlements >Index: Tools/TestWebKitAPI/Tests/WTF/WeakPtr.cpp >=================================================================== >--- Tools/TestWebKitAPI/Tests/WTF/WeakPtr.cpp (revision 235110) >+++ Tools/TestWebKitAPI/Tests/WTF/WeakPtr.cpp (working copy) >@@ -206,7 +206,7 @@ public: > return 0; > } > >- auto& weakPtrFactory() { return m_weakPtrFactory; } >+ auto& weakPtrFactory() const { return m_weakPtrFactory; } > > private: > WeakPtrFactory<Base> m_weakPtrFactory; >@@ -284,4 +284,38 @@ TEST(WTF_WeakPtr, DerivedConstructAndAss > } > } > >+TEST(WTF_WeakPtr, DerivedConstructAndAssignConst) >+{ >+ const Derived derived; >+ { >+ auto derivedWeakPtr = makeWeakPtr(derived); >+ WeakPtr<const Base> baseWeakPtr { WTFMove(derivedWeakPtr) }; >+ EXPECT_EQ(baseWeakPtr.get(), &derived); >+ EXPECT_NULL(derivedWeakPtr.get()); >+ } >+ >+ { >+ auto derivedWeakPtr = makeWeakPtr(derived); >+ WeakPtr<const Base> baseWeakPtr { derivedWeakPtr }; >+ EXPECT_EQ(baseWeakPtr.get(), &derived); >+ EXPECT_EQ(derivedWeakPtr.get(), &derived); >+ } >+ >+ { >+ auto derivedWeakPtr = makeWeakPtr(derived); >+ WeakPtr<const Base> baseWeakPtr; >+ baseWeakPtr = WTFMove(derivedWeakPtr); >+ EXPECT_EQ(baseWeakPtr.get(), &derived); >+ EXPECT_NULL(derivedWeakPtr.get()); >+ } >+ >+ { >+ auto derivedWeakPtr = makeWeakPtr(derived); >+ WeakPtr<const Base> baseWeakPtr; >+ baseWeakPtr = derivedWeakPtr; >+ EXPECT_EQ(baseWeakPtr.get(), &derived); >+ EXPECT_EQ(derivedWeakPtr.get(), &derived); >+ } >+} >+ > } // namespace TestWebKitAPI
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 188785
:
347638
|
347996
|
347999