Changeset 102298 in webkit
- Timestamp:
- Dec 7, 2011 6:19:59 PM (12 years ago)
- Location:
- trunk
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r102295 r102298 1 2011-12-07 Michael Saboff <msaboff@apple.com> 2 3 StringBuilderTest.Append and StringBuilderTest.ToStringPreserveCapacity are failing. 4 https://bugs.webkit.org/show_bug.cgi?id=73995 5 6 Reviewed by Geoffrey Garen. 7 8 Problem was that a call to characters on an StringImpl associated 9 with a StringBuilder that is being appended to gets stale. 10 Added a new m_valid16BitShadowlen that keeps the length of 11 the 16 bit shadow that has been upconverted or will be up converted 12 with the first getCharacters(). When StringBuilder::characters or 13 ::reifyString is called, further characters are upconverted if 14 we have a shadow16bit copy and the m_valid16BitShadowlen is updated. 15 16 * JavaScriptCore.exp: 17 * wtf/text/StringBuilder.cpp: 18 (WTF::StringBuilder::reifyString): 19 * wtf/text/StringBuilder.h: 20 (WTF::StringBuilder::StringBuilder): 21 (WTF::StringBuilder::characters): 22 (WTF::StringBuilder::clear): Cleaned up as part of the change. 23 * wtf/text/StringImpl.cpp: 24 (WTF::StringImpl::getData16SlowCase): 25 (WTF::StringImpl::upconvertCharacters): 26 * wtf/text/StringImpl.h: 27 1 28 2011-12-07 Filip Pizlo <fpizlo@apple.com> 2 29 -
trunk/Source/JavaScriptCore/JavaScriptCore.exp
r101713 r102298 584 584 __ZNK3JSC9HashTable11deleteTableEv 585 585 __ZNK3WTF10StringImpl17getData16SlowCaseEv 586 __ZNK3WTF10StringImpl19upconvertCharactersEjj 586 587 __ZNK3WTF12AtomicString5lowerEv 587 588 __ZNK3WTF13DecimalNumber15toStringDecimalEPtj -
trunk/Source/JavaScriptCore/wtf/text/StringBuilder.cpp
r102017 r102298 52 52 ? m_buffer.get() 53 53 : StringImpl::create(m_buffer, 0, m_length); 54 55 if (m_buffer->has16BitShadow() && m_valid16BitShadowLength < m_length) 56 m_buffer->upconvertCharacters(m_valid16BitShadowLength, m_length); 57 58 m_valid16BitShadowLength = m_length; 54 59 } 55 60 -
trunk/Source/JavaScriptCore/wtf/text/StringBuilder.h
r102146 r102298 37 37 : m_length(0) 38 38 , m_is8Bit(true) 39 , m_valid16BitShadowLength(0) 39 40 , m_bufferCharacters8(0) 40 41 { … … 170 171 return m_string.characters(); 171 172 ASSERT(m_buffer); 173 if (m_buffer->has16BitShadow() && m_valid16BitShadowLength < m_length) 174 m_buffer->upconvertCharacters(m_valid16BitShadowLength, m_length); 175 176 m_valid16BitShadowLength = m_length; 177 172 178 return m_buffer->characters(); 173 179 } … … 178 184 m_string = String(); 179 185 m_buffer = 0; 186 m_bufferCharacters8 = 0; 187 m_is8Bit = true; 188 m_valid16BitShadowLength = 0; 180 189 } 181 190 … … 198 207 RefPtr<StringImpl> m_buffer; 199 208 bool m_is8Bit; 209 mutable unsigned m_valid16BitShadowLength; 200 210 union { 201 211 LChar* m_bufferCharacters8; -
trunk/Source/JavaScriptCore/wtf/text/StringImpl.cpp
r101747 r102298 206 206 m_copyData16 = static_cast<UChar*>(fastMalloc(len * sizeof(UChar))); 207 207 208 if (hasTerminatingNullCharacter()) { 209 len--; 210 m_copyData16[len] = '\0'; 211 } 212 213 for (size_t i = 0; i < len; i++) 208 m_hashAndFlags |= s_hashFlagHas16BitShadow; 209 210 upconvertCharacters(0, len); 211 212 return m_copyData16; 213 } 214 215 void StringImpl::upconvertCharacters(unsigned start, unsigned end) const 216 { 217 ASSERT(is8Bit()); 218 ASSERT(has16BitShadow()); 219 220 for (size_t i = start; i < end; i++) 214 221 m_copyData16[i] = m_data8[i]; 215 216 m_hashAndFlags |= s_hashFlagHas16BitShadow; 217 218 return m_copyData16; 219 } 222 } 223 220 224 221 225 bool StringImpl::containsOnlyWhitespace() -
trunk/Source/JavaScriptCore/wtf/text/StringImpl.h
r101713 r102298 310 310 311 311 bool has16BitShadow() const { return m_hashAndFlags & s_hashFlagHas16BitShadow; } 312 void upconvertCharacters(unsigned, unsigned) const; 312 313 bool isIdentifier() const { return m_hashAndFlags & s_hashFlagIsIdentifier; } 313 314 void setIsIdentifier(bool isIdentifier) -
trunk/Tools/ChangeLog
r102296 r102298 1 2011-12-07 Michael Saboff <msaboff@apple.com> 2 3 StringBuilderTest.Append and StringBuilderTest.ToStringPreserveCapacity are failing. 4 https://bugs.webkit.org/show_bug.cgi?id=73995 5 6 Reenabled failing tests that the code part of the patch fixes. 7 8 Reviewed by Geoffrey Garen. 9 10 * TestWebKitAPI/Tests/WTF/StringBuilder.cpp: 11 (TestWebKitAPI::TEST): 12 1 13 2011-12-07 MORITA Hajime <morrita@google.com> 2 14 -
trunk/Tools/TestWebKitAPI/Tests/WTF/StringBuilder.cpp
r102230 r102298 67 67 } 68 68 69 TEST(StringBuilderTest, DISABLED_Append)69 TEST(StringBuilderTest, Append) 70 70 { 71 71 StringBuilder builder; … … 124 124 } 125 125 126 TEST(StringBuilderTest, DISABLED_ToStringPreserveCapacity)126 TEST(StringBuilderTest, ToStringPreserveCapacity) 127 127 { 128 128 StringBuilder builder;
Note: See TracChangeset
for help on using the changeset viewer.