Changeset 106257 in webkit
- Timestamp:
- Jan 30, 2012 10:51:36 AM (12 years ago)
- Location:
- trunk/Source/JavaScriptCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/ChangeLog
r106255 r106257 1 2012-01-30 Michael Saboff <msaboff@apple.com> 2 3 stringProtoFuncReplace converts 8 bit strings to 16 bit during replacement 4 https://bugs.webkit.org/show_bug.cgi?id=76651 5 6 Reviewed by Geoffrey Garen. 7 8 Made local function substituteBackreferencesSlow a template function 9 based on character width. Cleaned up getCharacters() in both UString 10 and StringImpl. Changed getCharacters<UChar> to up convert an 8 bit 11 string to 16 bits if necessary. 12 13 * runtime/StringPrototype.cpp: 14 (JSC::substituteBackreferencesSlow): 15 (JSC::substituteBackreferences): 16 * runtime/UString.h: 17 (JSC::LChar): 18 (JSC::UChar): 19 * wtf/text/StringImpl.h: 20 (WTF::UChar): 21 1 22 2012-01-30 Gavin Barraclough <barraclough@apple.com> 2 23 -
trunk/Source/JavaScriptCore/runtime/StringPrototype.cpp
r106170 r106257 171 171 } 172 172 173 template <typename CharType> 173 174 static NEVER_INLINE UString substituteBackreferencesSlow(const UString& replacement, const UString& source, const int* ovector, RegExp* reg, size_t i) 174 175 { 175 Vector< UChar> substitutedReplacement;176 Vector<CharType> substitutedReplacement; 176 177 int offset = 0; 177 178 do { … … 183 184 // "$$" -> "$" 184 185 ++i; 185 substitutedReplacement.append(replacement. characters() + offset, i - offset);186 substitutedReplacement.append(replacement.getCharacters<CharType>() + offset, i - offset); 186 187 offset = i + 1; 187 188 continue; … … 223 224 224 225 if (i - offset) 225 substitutedReplacement.append(replacement. characters() + offset, i - offset);226 substitutedReplacement.append(replacement.getCharacters<CharType>() + offset, i - offset); 226 227 i += 1 + advance; 227 228 offset = i + 1; 228 229 if (backrefStart >= 0) 229 substitutedReplacement.append(source. characters() + backrefStart, backrefLength);230 substitutedReplacement.append(source.getCharacters<CharType>() + backrefStart, backrefLength); 230 231 } while ((i = replacement.find('$', i + 1)) != notFound); 231 232 232 233 if (replacement.length() - offset) 233 substitutedReplacement.append(replacement. characters() + offset, replacement.length() - offset);234 substitutedReplacement.append(replacement.getCharacters<CharType>() + offset, replacement.length() - offset); 234 235 235 236 substitutedReplacement.shrinkToFit(); … … 240 241 { 241 242 size_t i = replacement.find('$', 0); 242 if (UNLIKELY(i != notFound)) 243 return substituteBackreferencesSlow(replacement, source, ovector, reg, i); 243 if (UNLIKELY(i != notFound)) { 244 if (replacement.is8Bit() && source.is8Bit()) 245 return substituteBackreferencesSlow<LChar>(replacement, source, ovector, reg, i); 246 return substituteBackreferencesSlow<UChar>(replacement, source, ovector, reg, i); 247 } 244 248 return replacement; 245 249 } -
trunk/Source/JavaScriptCore/runtime/UString.h
r104900 r106257 140 140 141 141 template<> 142 inline const LChar* UString::getCharacters<LChar>() const 143 { 144 ASSERT(is8Bit()); 145 return characters8(); 146 } 142 inline const LChar* UString::getCharacters<LChar>() const { return characters8(); } 147 143 148 144 template<> 149 inline const UChar* UString::getCharacters<UChar>() const 150 { 151 ASSERT(!is8Bit()); 152 return characters16(); 153 } 145 inline const UChar* UString::getCharacters<UChar>() const { return characters(); } 154 146 155 147 NEVER_INLINE bool equalSlowCase(const UString& s1, const UString& s2); -
trunk/Source/JavaScriptCore/wtf/text/StringImpl.h
r106019 r106257 551 551 552 552 template <> 553 ALWAYS_INLINE const UChar* StringImpl::getCharacters<UChar>() const { return characters 16(); }553 ALWAYS_INLINE const UChar* StringImpl::getCharacters<UChar>() const { return characters(); } 554 554 555 555 WTF_EXPORT_PRIVATE bool equal(const StringImpl*, const StringImpl*);
Note: See TracChangeset
for help on using the changeset viewer.