Changeset 86383 in webkit
- Timestamp:
- May 12, 2011 2:56:45 PM (13 years ago)
- Location:
- trunk/Source
- Files:
-
- 1 added
- 9 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r86335 r86383 1 2011-05-12 Maciej Stachowiak <mjs@apple.com> 2 3 Reviewed by Darin Adler. 4 5 XMLDocumentParserLibxml2 should play nice with strict OwnPtrs 6 https://bugs.webkit.org/show_bug.cgi?id=59394 7 8 This portion of the change introduces a PassTraits template, which 9 is used to enable takeFirst() to work for a Deque holding OwnPtrs, 10 and optimize it for a Deque holding RefPtrs. In the future it can 11 be deployed elsewhere to make our data structures work better with 12 our smart pointers. 13 14 * GNUmakefile.list.am: 15 * JavaScriptCore.gypi: 16 * JavaScriptCore.vcproj/WTF/WTF.vcproj: 17 * JavaScriptCore.xcodeproj/project.pbxproj: 18 * wtf/CMakeLists.txt: 19 * wtf/Deque.h: 20 (WTF::::takeFirst): 21 * wtf/PassTraits.h: Added. 22 (WTF::PassTraits::transfer): 23 1 24 2011-05-12 Nikolas Zimmermann <nzimmermann@rim.com> 2 25 -
trunk/Source/JavaScriptCore/GNUmakefile.list.am
r86330 r86383 480 480 Source/JavaScriptCore/wtf/PassOwnPtr.h \ 481 481 Source/JavaScriptCore/wtf/PassRefPtr.h \ 482 Source/JavaScriptCore/wtf/PassTraits.h \ 482 483 Source/JavaScriptCore/wtf/ParallelJobs.h \ 483 484 Source/JavaScriptCore/wtf/ParallelJobsGeneric.cpp \ -
trunk/Source/JavaScriptCore/JavaScriptCore.gypi
r86330 r86383 188 188 'wtf/PassOwnPtr.h', 189 189 'wtf/PassRefPtr.h', 190 'wtf/PassTraits.h', 190 191 'wtf/Platform.h', 191 192 'wtf/PossiblyNull.h', -
trunk/Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj
r86330 r86383 850 850 </File> 851 851 <File 852 RelativePath="..\..\wtf\PassTraits.h" 853 > 854 </File> 855 <File 852 856 RelativePath="..\..\wtf\ParallelJobs.h" 853 857 > -
trunk/Source/JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
r86330 r86383 219 219 5DE6E5B30E1728EC00180407 /* create_hash_table in Headers */ = {isa = PBXBuildFile; fileRef = F692A8540255597D01FF60F7 /* create_hash_table */; settings = {ATTRIBUTES = (); }; }; 220 220 6507D29E0E871E5E00D7D896 /* JSTypeInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 6507D2970E871E4A00D7D896 /* JSTypeInfo.h */; settings = {ATTRIBUTES = (Private, ); }; }; 221 651DCA04136A6FEF00F74194 /* PassTraits.h in Headers */ = {isa = PBXBuildFile; fileRef = 651DCA02136A6FAB00F74194 /* PassTraits.h */; settings = {ATTRIBUTES = (Private, ); }; }; 221 222 655EB29B10CE2581001A990E /* NodesCodegen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 655EB29A10CE2581001A990E /* NodesCodegen.cpp */; }; 222 223 65DFC93308EA173A00F7300B /* HashTable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 65DFC92D08EA173A00F7300B /* HashTable.cpp */; }; … … 869 870 5DE3D0F40DD8DDFB00468714 /* WebKitAvailability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebKitAvailability.h; sourceTree = "<group>"; }; 870 871 6507D2970E871E4A00D7D896 /* JSTypeInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSTypeInfo.h; sourceTree = "<group>"; }; 872 651DCA02136A6FAB00F74194 /* PassTraits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PassTraits.h; sourceTree = "<group>"; }; 871 873 651F6412039D5B5F0078395C /* dtoa.cpp */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dtoa.cpp; sourceTree = "<group>"; tabWidth = 8; }; 872 874 651F6413039D5B5F0078395C /* dtoa.h */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.c.h; path = dtoa.h; sourceTree = "<group>"; tabWidth = 8; }; … … 1725 1727 44DD48520FAEA85000D6B4EB /* PassOwnPtr.h */, 1726 1728 6580F795094070560082C219 /* PassRefPtr.h */, 1729 651DCA02136A6FAB00F74194 /* PassTraits.h */, 1727 1730 7934BB761361979300CB99A1 /* ParallelJobs.h */, 1728 1731 7934BB771361979300CB99A1 /* ParallelJobsGeneric.cpp */, … … 2604 2607 7934BB7E1361979400CB99A1 /* ParallelJobsLibdispatch.h in Headers */, 2605 2608 7934BB7F1361979400CB99A1 /* ParallelJobsOpenMP.h in Headers */, 2609 651DCA04136A6FEF00F74194 /* PassTraits.h in Headers */, 2606 2610 ); 2607 2611 runOnlyForDeploymentPostprocessing = 0; -
trunk/Source/JavaScriptCore/wtf/CMakeLists.txt
r85253 r86383 59 59 PassOwnPtr.h 60 60 PassRefPtr.h 61 PassTraits.h 61 62 ParallelJobs.h 62 63 ParallelJobsGeneric.h -
trunk/Source/JavaScriptCore/wtf/Deque.h
r79538 r86383 34 34 // Deque doesn't actually use Vector. 35 35 36 #include "PassTraits.h" 36 37 #include "Vector.h" 37 38 … … 52 53 typedef DequeReverseIterator<T, inlineCapacity> reverse_iterator; 53 54 typedef DequeConstReverseIterator<T, inlineCapacity> const_reverse_iterator; 55 typedef PassTraits<T> Pass; 56 typedef typename PassTraits<T>::PassType PassType; 54 57 55 58 Deque(); … … 74 77 T& first() { ASSERT(m_start != m_end); return m_buffer.buffer()[m_start]; } 75 78 const T& first() const { ASSERT(m_start != m_end); return m_buffer.buffer()[m_start]; } 76 TtakeFirst();79 PassType takeFirst(); 77 80 78 81 template<typename U> void append(const U&); … … 437 440 438 441 template<typename T, size_t inlineCapacity> 439 inline TDeque<T, inlineCapacity>::takeFirst()440 { 441 T oldFirst = first();442 inline typename Deque<T, inlineCapacity>::PassType Deque<T, inlineCapacity>::takeFirst() 443 { 444 T oldFirst = Pass::transfer(first()); 442 445 removeFirst(); 443 return oldFirst;446 return Pass::transfer(oldFirst); 444 447 } 445 448 -
trunk/Source/WebCore/ChangeLog
r86381 r86383 1 2011-05-12 Maciej Stachowiak <mjs@apple.com> 2 3 Reviewed by Darin Adler. 4 5 XMLDocumentParserLibxml2 should play nice with strict OwnPtrs 6 https://bugs.webkit.org/show_bug.cgi?id=59394 7 8 Properly fix this (formerly rolled out for breaking the build). I think the original 9 failure had nothing to do with Deque<OwnPtr>, which in fact appears to work fine. 10 11 * dom/XMLDocumentParserLibxml2.cpp: 12 (WebCore::PendingCallbacks::~PendingCallbacks): 13 (WebCore::PendingCallbacks::create): 14 (WebCore::PendingCallbacks::appendStartElementNSCallback): 15 (WebCore::PendingCallbacks::appendEndElementNSCallback): 16 (WebCore::PendingCallbacks::appendCharactersCallback): 17 (WebCore::PendingCallbacks::appendProcessingInstructionCallback): 18 (WebCore::PendingCallbacks::appendCDATABlockCallback): 19 (WebCore::PendingCallbacks::appendCommentCallback): 20 (WebCore::PendingCallbacks::appendInternalSubsetCallback): 21 (WebCore::PendingCallbacks::appendErrorCallback): 22 (WebCore::PendingCallbacks::PendingCallbacks): 23 (WebCore::XMLDocumentParser::XMLDocumentParser): 24 1 25 2011-05-12 Daniel Bates <dbates@rim.com> 2 26 -
trunk/Source/WebCore/dom/XMLDocumentParserLibxml2.cpp
r86330 r86383 26 26 27 27 #include "config.h" 28 29 // FIXME: Remove this define!30 #define LOOSE_OWN_PTR31 32 28 #include "XMLDocumentParser.h" 33 29 … … 85 81 WTF_MAKE_NONCOPYABLE(PendingCallbacks); 86 82 public: 87 PendingCallbacks() { }88 ~PendingCallbacks()83 ~PendingCallbacks() { } 84 static PassOwnPtr<PendingCallbacks> create() 89 85 { 90 deleteAllValues(m_callbacks);91 } 92 86 return adoptPtr(new PendingCallbacks); 87 } 88 93 89 void appendStartElementNSCallback(const xmlChar* xmlLocalName, const xmlChar* xmlPrefix, const xmlChar* xmlURI, int nb_namespaces, 94 90 const xmlChar** namespaces, int nb_attributes, int nb_defaulted, const xmlChar** attributes) 95 91 { 96 PendingStartElementNSCallback* callback = new PendingStartElementNSCallback;92 OwnPtr<PendingStartElementNSCallback> callback = adoptPtr(new PendingStartElementNSCallback); 97 93 98 94 callback->xmlLocalName = xmlStrdup(xmlLocalName); … … 119 115 } 120 116 121 m_callbacks.append(callback );117 m_callbacks.append(callback.release()); 122 118 } 123 119 124 120 void appendEndElementNSCallback() 125 121 { 126 PendingEndElementNSCallback* callback = new PendingEndElementNSCallback; 127 128 m_callbacks.append(callback); 122 m_callbacks.append(adoptPtr(new PendingEndElementNSCallback)); 129 123 } 130 124 131 125 void appendCharactersCallback(const xmlChar* s, int len) 132 126 { 133 PendingCharactersCallback* callback = new PendingCharactersCallback;127 OwnPtr<PendingCharactersCallback> callback = adoptPtr(new PendingCharactersCallback); 134 128 135 129 callback->s = xmlStrndup(s, len); 136 130 callback->len = len; 137 131 138 m_callbacks.append(callback );132 m_callbacks.append(callback.release()); 139 133 } 140 134 141 135 void appendProcessingInstructionCallback(const xmlChar* target, const xmlChar* data) 142 136 { 143 PendingProcessingInstructionCallback* callback = new PendingProcessingInstructionCallback;137 OwnPtr<PendingProcessingInstructionCallback> callback = adoptPtr(new PendingProcessingInstructionCallback); 144 138 145 139 callback->target = xmlStrdup(target); 146 140 callback->data = xmlStrdup(data); 147 141 148 m_callbacks.append(callback );142 m_callbacks.append(callback.release()); 149 143 } 150 144 151 145 void appendCDATABlockCallback(const xmlChar* s, int len) 152 146 { 153 PendingCDATABlockCallback* callback = new PendingCDATABlockCallback;147 OwnPtr<PendingCDATABlockCallback> callback = adoptPtr(new PendingCDATABlockCallback); 154 148 155 149 callback->s = xmlStrndup(s, len); 156 150 callback->len = len; 157 151 158 m_callbacks.append(callback );152 m_callbacks.append(callback.release()); 159 153 } 160 154 161 155 void appendCommentCallback(const xmlChar* s) 162 156 { 163 PendingCommentCallback* callback = new PendingCommentCallback;157 OwnPtr<PendingCommentCallback> callback = adoptPtr(new PendingCommentCallback); 164 158 165 159 callback->s = xmlStrdup(s); 166 160 167 m_callbacks.append(callback );161 m_callbacks.append(callback.release()); 168 162 } 169 163 170 164 void appendInternalSubsetCallback(const xmlChar* name, const xmlChar* externalID, const xmlChar* systemID) 171 165 { 172 PendingInternalSubsetCallback* callback = new PendingInternalSubsetCallback;166 OwnPtr<PendingInternalSubsetCallback> callback = adoptPtr(new PendingInternalSubsetCallback); 173 167 174 168 callback->name = xmlStrdup(name); … … 176 170 callback->systemID = xmlStrdup(systemID); 177 171 178 m_callbacks.append(callback );172 m_callbacks.append(callback.release()); 179 173 } 180 174 181 175 void appendErrorCallback(XMLDocumentParser::ErrorType type, const xmlChar* message, int lineNumber, int columnNumber) 182 176 { 183 PendingErrorCallback* callback = new PendingErrorCallback;177 OwnPtr<PendingErrorCallback> callback = adoptPtr(new PendingErrorCallback); 184 178 185 179 callback->message = xmlStrdup(message); … … 188 182 callback->columnNumber = columnNumber; 189 183 190 m_callbacks.append(callback );184 m_callbacks.append(callback.release()); 191 185 } 192 186 193 187 void callAndRemoveFirstCallback(XMLDocumentParser* parser) 194 188 { 195 OwnPtr<PendingCallback> callback (m_callbacks.takeFirst());189 OwnPtr<PendingCallback> callback = m_callbacks.takeFirst(); 196 190 callback->call(parser); 197 191 } … … 200 194 201 195 private: 196 PendingCallbacks() { } 197 202 198 struct PendingCallback { 203 199 virtual ~PendingCallback() { } … … 339 335 }; 340 336 341 Deque< PendingCallback*> m_callbacks;337 Deque<OwnPtr<PendingCallback> > m_callbacks; 342 338 }; 343 339 // -------------------------------- … … 552 548 , m_view(frameView) 553 549 , m_context(0) 554 , m_pendingCallbacks( new PendingCallbacks)550 , m_pendingCallbacks(PendingCallbacks::create()) 555 551 , m_currentNode(document) 556 552 , m_sawError(false) … … 579 575 , m_view(0) 580 576 , m_context(0) 581 , m_pendingCallbacks( new PendingCallbacks)577 , m_pendingCallbacks(PendingCallbacks::create()) 582 578 , m_currentNode(fragment) 583 579 , m_sawError(false)
Note: See TracChangeset
for help on using the changeset viewer.