⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 278344 in webkit


Ignore:
Timestamp:
Jun 2, 2021, 1:43:13 AM (5 years ago)
Author:
rniwa@webkit.org
Message:

Add CheckedPtr
https://bugs.webkit.org/show_bug.cgi?id=226158

Reviewed by Antti Koivisto.

Source/WTF:

This patch introduces a new type of smart pointer, CheckedPtr, which behaves like RefPtr and
let each object keep track of pointers pointing to the object. Unlike CheckedPtr, the purpose of
this internal counter is to release assert that there is no outstanding pointer at the time
of destruction instead of keeping the object alive when there is one.

  • WTF.xcodeproj/project.pbxproj:
  • wtf/CheckedPtr.h: Added.

(WTF::CheckedPtr): Added.
(WTF::CheckedPtr::CheckedPtr): Added.
(WTF::CheckedPtr::~CheckedPtr): Added.
(WTF::CheckedPtr::isHashTableDeletedValue const): Added.
(WTF::CheckedPtr::operator UnspecifiedBoolType const): Added.
(WTF::CheckedPtr::operator! const): Added.
(WTF::CheckedPtr::get const): Added.
(WTF::CheckedPtr::get): Added.
(WTF::CheckedPtr::operator* const): Added.
(WTF::CheckedPtr::operator*): Added.
(WTF::CheckedPtr::operator-> const): Added.
(WTF::CheckedPtr::operator->): Added.
(WTF::CheckedPtr::operator== const): Added.
(WTF::CheckedPtr::operator=): Added.
(WTF::CheckedPtr::unspecifiedBoolTypeInstance const): Added.
(WTF::CheckedPtr::refIfNotNull): Added.
(WTF::CheckedPtr::derefIfNotNull): Added.
(WTF::makeCheckedPtr): Added.
(WTF::is): Added.
(WTF::CanMakeCheckedPtr): Added.
(WTF::CanMakeCheckedPtr::~CanMakeCheckedPtr): Added. Release assert that m_ptrCount is 0.
(WTF::CanMakeCheckedPtr::ptrCount const): Added.
(WTF::CanMakeCheckedPtr::incrementPtrCount): Added.
(WTF::CanMakeCheckedPtr::decrementPtrCount): Added. Note that we don't do anything when m_ptrCount
becomes 0 unlike RefPtr.
(WTF::HashTraits<CheckedPtr<P>>): Added.
(WTF::HashTraits<CheckedPtr<P>>::emptyValue): Added.
(WTF::HashTraits<CheckedPtr<P>>::peek): Added.
(WTF::HashTraits<CheckedPtr<P>>::customDeleteBucket): Added.

Tools:

Added basic tests.

  • TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
  • TestWebKitAPI/Tests/WTF/CheckedPtr.cpp: Added.

(TestWebKitAPI::CheckedObject): Added.
(TestWebKitAPI::DerivedCheckedObject): Added.
(WTF_CheckedPtr.Basic):
(WTF_CheckedPtr.DerivedClass):
(WTF_CheckedPtr.HashSet):

Location:
trunk
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WTF/ChangeLog

    r278340 r278344  
     12021-05-23  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        Add CheckedPtr
     4        https://bugs.webkit.org/show_bug.cgi?id=226158
     5
     6        Reviewed by Antti Koivisto.
     7
     8        This patch introduces a new type of smart pointer, CheckedPtr, which behaves like RefPtr and
     9        let each object keep track of pointers pointing to the object. Unlike CheckedPtr, the purpose of
     10        this internal counter is to release assert that there is no outstanding pointer at the time
     11        of destruction instead of keeping the object alive when there is one.
     12
     13        * WTF.xcodeproj/project.pbxproj:
     14        * wtf/CheckedPtr.h: Added.
     15        (WTF::CheckedPtr): Added.
     16        (WTF::CheckedPtr::CheckedPtr): Added.
     17        (WTF::CheckedPtr::~CheckedPtr): Added.
     18        (WTF::CheckedPtr::isHashTableDeletedValue const): Added.
     19        (WTF::CheckedPtr::operator UnspecifiedBoolType const): Added.
     20        (WTF::CheckedPtr::operator! const): Added.
     21        (WTF::CheckedPtr::get const): Added.
     22        (WTF::CheckedPtr::get): Added.
     23        (WTF::CheckedPtr::operator* const): Added.
     24        (WTF::CheckedPtr::operator*): Added.
     25        (WTF::CheckedPtr::operator-> const): Added.
     26        (WTF::CheckedPtr::operator->): Added.
     27        (WTF::CheckedPtr::operator== const): Added.
     28        (WTF::CheckedPtr::operator=): Added.
     29        (WTF::CheckedPtr::unspecifiedBoolTypeInstance const): Added.
     30        (WTF::CheckedPtr::refIfNotNull): Added.
     31        (WTF::CheckedPtr::derefIfNotNull): Added.
     32        (WTF::makeCheckedPtr): Added.
     33        (WTF::is): Added.
     34        (WTF::CanMakeCheckedPtr): Added.
     35        (WTF::CanMakeCheckedPtr::~CanMakeCheckedPtr): Added. Release assert that m_ptrCount is 0.
     36        (WTF::CanMakeCheckedPtr::ptrCount const): Added.
     37        (WTF::CanMakeCheckedPtr::incrementPtrCount): Added.
     38        (WTF::CanMakeCheckedPtr::decrementPtrCount): Added. Note that we don't do anything when m_ptrCount
     39        becomes 0 unlike RefPtr.
     40        (WTF::HashTraits<CheckedPtr<P>>): Added.
     41        (WTF::HashTraits<CheckedPtr<P>>::emptyValue): Added.
     42        (WTF::HashTraits<CheckedPtr<P>>::peek): Added.
     43        (WTF::HashTraits<CheckedPtr<P>>::customDeleteBucket): Added.
     44
    1452021-06-01  Darin Adler  <darin@apple.com>
    246
  • trunk/Source/WTF/WTF.xcodeproj/project.pbxproj

    r278340 r278344  
    508508                9B67F3F12228D5310030DE9C /* WeakHashSet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WeakHashSet.h; sourceTree = "<group>"; };
    509509                9B96E9B324FF77B8001756C3 /* CompactUniquePtrTuple.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CompactUniquePtrTuple.h; sourceTree = "<group>"; };
     510                9BB91F512648EA4D00A56217 /* CheckedPtr.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CheckedPtr.h; sourceTree = "<group>"; };
    510511                9BC70F04176C379D00101DEC /* AtomStringTable.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AtomStringTable.cpp; sourceTree = "<group>"; };
    511512                9BD8F40A176C2AD80002D865 /* AtomStringTable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AtomStringTable.h; sourceTree = "<group>"; };
     
    984985                                A8A4726A151A825A004123FF /* CheckedArithmetic.h */,
    985986                                A8A4726B151A825A004123FF /* CheckedBoolean.h */,
     987                                9BB91F512648EA4D00A56217 /* CheckedPtr.h */,
    986988                                0F66B2801DC97BAB004A1D3F /* ClockType.cpp */,
    987989                                0F66B2811DC97BAB004A1D3F /* ClockType.h */,
  • trunk/Tools/ChangeLog

    r278340 r278344  
     12021-05-23  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        Add CheckedPtr
     4        https://bugs.webkit.org/show_bug.cgi?id=226158
     5
     6        Reviewed by Antti Koivisto.
     7
     8        Added basic tests.
     9
     10        * TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj:
     11        * TestWebKitAPI/Tests/WTF/CheckedPtr.cpp: Added.
     12        (TestWebKitAPI::CheckedObject): Added.
     13        (TestWebKitAPI::DerivedCheckedObject): Added.
     14        (WTF_CheckedPtr.Basic):
     15        (WTF_CheckedPtr.DerivedClass):
     16        (WTF_CheckedPtr.HashSet):
     17
    1182021-06-01  Darin Adler  <darin@apple.com>
    219
  • trunk/Tools/TestWebKitAPI/TestWebKitAPI.xcodeproj/project.pbxproj

    r278254 r278344  
    904904                9BAD7F3E22690F2000F8DA66 /* DeallocWebViewInEventListener.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BAD7F3D22690F1400F8DA66 /* DeallocWebViewInEventListener.mm */; };
    905905                9BAE177B22E2BBFB00DF3098 /* cocoa-writer-markup-with-system-fonts.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 9BAE177A22E2BB6B00DF3098 /* cocoa-writer-markup-with-system-fonts.html */; };
     906                9BBCA4DF265ACA5B00DFE723 /* CheckedPtr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9BBCA4DE265ACA5B00DFE723 /* CheckedPtr.cpp */; };
    906907                9BCB7C2820130600003E7C0C /* PasteHTML.mm in Sources */ = {isa = PBXBuildFile; fileRef = 9BCB7C2620130600003E7C0C /* PasteHTML.mm */; };
    907908                9BCD411A206DBCA3001D71BE /* mso-list-on-h4.html in Copy Resources */ = {isa = PBXBuildFile; fileRef = 9BCD4119206D5ED7001D71BE /* mso-list-on-h4.html */; };
     
    26172618                9BAD7F3D22690F1400F8DA66 /* DeallocWebViewInEventListener.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DeallocWebViewInEventListener.mm; sourceTree = "<group>"; };
    26182619                9BAE177A22E2BB6B00DF3098 /* cocoa-writer-markup-with-system-fonts.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = "cocoa-writer-markup-with-system-fonts.html"; sourceTree = "<group>"; };
     2620                9BBCA4DE265ACA5B00DFE723 /* CheckedPtr.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CheckedPtr.cpp; sourceTree = "<group>"; };
    26192621                9BCB7C2620130600003E7C0C /* PasteHTML.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = PasteHTML.mm; sourceTree = "<group>"; };
    26202622                9BCD4119206D5ED7001D71BE /* mso-list-on-h4.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = "mso-list-on-h4.html"; sourceTree = "<group>"; };
     
    44164418                                0451A5A6235E438E009DF945 /* BumpPointerAllocator.cpp */,
    44174419                                A7A966DA140ECCC8005EF9B4 /* CheckedArithmeticOperations.cpp */,
     4420                                9BBCA4DE265ACA5B00DFE723 /* CheckedPtr.cpp */,
    44184421                                E302BDA92404B92300865277 /* CompactRefPtrTuple.cpp */,
    44194422                                9B0C051824FDFB7000F2FE31 /* CompactUniquePtrTuple.cpp */,
     
    51785181                                04DB2396235E43EC00328F17 /* BumpPointerAllocator.cpp in Sources */,
    51795182                                7C83DEA01D0A590C00FEBCF3 /* CheckedArithmeticOperations.cpp in Sources */,
     5183                                9BBCA4DF265ACA5B00DFE723 /* CheckedPtr.cpp in Sources */,
    51805184                                E302BDAA2404B92400865277 /* CompactRefPtrTuple.cpp in Sources */,
    51815185                                9B0C051924FDFB7D00F2FE31 /* CompactUniquePtrTuple.cpp in Sources */,
Note: See TracChangeset for help on using the changeset viewer.