Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(17)

Side by Side Diff: third_party/WebKit/Source/wtf/text/StringImpl.cpp

Issue 2585673002: Replace ASSERT, ENABLE(ASSERT), and ASSERT_NOT_REACHED in wtf (Closed)
Patch Set: Fix an Asan issue with LinkedHashSetNodeBase::unlink Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller ( mueller@kde.org ) 4 * (C) 2001 Dirk Mueller ( mueller@kde.org )
5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2013 Apple Inc. All 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2013 Apple Inc. All
6 * rights reserved. 6 * rights reserved.
7 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net) 7 * Copyright (C) 2006 Andrew Wellington (proton@wiretapped.net)
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 unsigned totalOverhead = m_totalNumberStrings * sizeof(StringImpl); 276 unsigned totalOverhead = m_totalNumberStrings * sizeof(StringImpl);
277 double overheadPercent = (double)totalOverhead / (double)totalDataBytes * 100; 277 double overheadPercent = (double)totalOverhead / (double)totalDataBytes * 100;
278 dataLogF(" StringImpl overheader: %8u (%5.2f%%)\n", totalOverhead, 278 dataLogF(" StringImpl overheader: %8u (%5.2f%%)\n", totalOverhead,
279 overheadPercent); 279 overheadPercent);
280 280
281 internal::callOnMainThread(&printLiveStringStats, nullptr); 281 internal::callOnMainThread(&printLiveStringStats, nullptr);
282 } 282 }
283 #endif 283 #endif
284 284
285 void* StringImpl::operator new(size_t size) { 285 void* StringImpl::operator new(size_t size) {
286 ASSERT(size == sizeof(StringImpl)); 286 DCHECK_EQ(size, sizeof(StringImpl));
287 return Partitions::bufferMalloc(size, "WTF::StringImpl"); 287 return Partitions::bufferMalloc(size, "WTF::StringImpl");
288 } 288 }
289 289
290 void StringImpl::operator delete(void* ptr) { 290 void StringImpl::operator delete(void* ptr) {
291 Partitions::bufferFree(ptr); 291 Partitions::bufferFree(ptr);
292 } 292 }
293 293
294 inline StringImpl::~StringImpl() { 294 inline StringImpl::~StringImpl() {
295 ASSERT(!isStatic()); 295 DCHECK(!isStatic());
296 296
297 STRING_STATS_REMOVE_STRING(this); 297 STRING_STATS_REMOVE_STRING(this);
298 298
299 if (isAtomic()) 299 if (isAtomic())
300 AtomicStringTable::instance().remove(this); 300 AtomicStringTable::instance().remove(this);
301 } 301 }
302 302
303 void StringImpl::destroyIfNotStatic() { 303 void StringImpl::destroyIfNotStatic() {
304 if (!isStatic()) 304 if (!isStatic())
305 delete this; 305 delete this;
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 349
350 data = reinterpret_cast<UChar*>(string + 1); 350 data = reinterpret_cast<UChar*>(string + 1);
351 return adoptRef(new (string) StringImpl(length)); 351 return adoptRef(new (string) StringImpl(length));
352 } 352 }
353 353
354 static StaticStringsTable& staticStrings() { 354 static StaticStringsTable& staticStrings() {
355 DEFINE_STATIC_LOCAL(StaticStringsTable, staticStrings, ()); 355 DEFINE_STATIC_LOCAL(StaticStringsTable, staticStrings, ());
356 return staticStrings; 356 return staticStrings;
357 } 357 }
358 358
359 #if ENABLE(ASSERT) 359 #if DCHECK_IS_ON()
360 static bool s_allowCreationOfStaticStrings = true; 360 static bool s_allowCreationOfStaticStrings = true;
361 #endif 361 #endif
362 362
363 const StaticStringsTable& StringImpl::allStaticStrings() { 363 const StaticStringsTable& StringImpl::allStaticStrings() {
364 return staticStrings(); 364 return staticStrings();
365 } 365 }
366 366
367 void StringImpl::freezeStaticStrings() { 367 void StringImpl::freezeStaticStrings() {
368 ASSERT(isMainThread()); 368 DCHECK(isMainThread());
369 369
370 #if ENABLE(ASSERT) 370 #if DCHECK_IS_ON()
371 s_allowCreationOfStaticStrings = false; 371 s_allowCreationOfStaticStrings = false;
372 #endif 372 #endif
373 } 373 }
374 374
375 unsigned StringImpl::m_highestStaticStringLength = 0; 375 unsigned StringImpl::m_highestStaticStringLength = 0;
376 376
377 StringImpl* StringImpl::createStatic(const char* string, 377 StringImpl* StringImpl::createStatic(const char* string,
378 unsigned length, 378 unsigned length,
379 unsigned hash) { 379 unsigned hash) {
380 ASSERT(s_allowCreationOfStaticStrings); 380 #if DCHECK_IS_ON()
381 ASSERT(string); 381 DCHECK(s_allowCreationOfStaticStrings);
382 ASSERT(length); 382 #endif
383 DCHECK(string);
384 DCHECK(length);
383 385
384 StaticStringsTable::const_iterator it = staticStrings().find(hash); 386 StaticStringsTable::const_iterator it = staticStrings().find(hash);
385 if (it != staticStrings().end()) { 387 if (it != staticStrings().end()) {
386 ASSERT(!memcmp(string, it->value + 1, length * sizeof(LChar))); 388 DCHECK(!memcmp(string, it->value + 1, length * sizeof(LChar)));
387 return it->value; 389 return it->value;
388 } 390 }
389 391
390 // Allocate a single buffer large enough to contain the StringImpl 392 // Allocate a single buffer large enough to contain the StringImpl
391 // struct as well as the data which it contains. This removes one 393 // struct as well as the data which it contains. This removes one
392 // heap allocation from this call. 394 // heap allocation from this call.
393 RELEASE_ASSERT(length <= 395 RELEASE_ASSERT(length <=
394 ((std::numeric_limits<unsigned>::max() - sizeof(StringImpl)) / 396 ((std::numeric_limits<unsigned>::max() - sizeof(StringImpl)) /
395 sizeof(LChar))); 397 sizeof(LChar)));
396 size_t size = sizeof(StringImpl) + length * sizeof(LChar); 398 size_t size = sizeof(StringImpl) + length * sizeof(LChar);
397 399
398 WTF_INTERNAL_LEAK_SANITIZER_DISABLED_SCOPE; 400 WTF_INTERNAL_LEAK_SANITIZER_DISABLED_SCOPE;
399 StringImpl* impl = static_cast<StringImpl*>( 401 StringImpl* impl = static_cast<StringImpl*>(
400 Partitions::bufferMalloc(size, "WTF::StringImpl")); 402 Partitions::bufferMalloc(size, "WTF::StringImpl"));
401 403
402 LChar* data = reinterpret_cast<LChar*>(impl + 1); 404 LChar* data = reinterpret_cast<LChar*>(impl + 1);
403 impl = new (impl) StringImpl(length, hash, StaticString); 405 impl = new (impl) StringImpl(length, hash, StaticString);
404 memcpy(data, string, length * sizeof(LChar)); 406 memcpy(data, string, length * sizeof(LChar));
405 #if ENABLE(ASSERT) 407 #if DCHECK_IS_ON()
406 impl->assertHashIsCorrect(); 408 impl->assertHashIsCorrect();
407 #endif 409 #endif
408 410
409 ASSERT(isMainThread()); 411 DCHECK(isMainThread());
410 m_highestStaticStringLength = std::max(m_highestStaticStringLength, length); 412 m_highestStaticStringLength = std::max(m_highestStaticStringLength, length);
411 staticStrings().add(hash, impl); 413 staticStrings().add(hash, impl);
412 WTF_ANNOTATE_BENIGN_RACE(impl, 414 WTF_ANNOTATE_BENIGN_RACE(impl,
413 "Benign race on the reference counter of a static " 415 "Benign race on the reference counter of a static "
414 "string created by StringImpl::createStatic"); 416 "string created by StringImpl::createStatic");
415 417
416 return impl; 418 return impl;
417 } 419 }
418 420
419 void StringImpl::reserveStaticStringsCapacityForSize(unsigned size) { 421 void StringImpl::reserveStaticStringsCapacityForSize(unsigned size) {
420 ASSERT(s_allowCreationOfStaticStrings); 422 #if DCHECK_IS_ON()
423 DCHECK(s_allowCreationOfStaticStrings);
424 #endif
421 staticStrings().reserveCapacityForSize(size); 425 staticStrings().reserveCapacityForSize(size);
422 } 426 }
423 427
424 PassRefPtr<StringImpl> StringImpl::create(const UChar* characters, 428 PassRefPtr<StringImpl> StringImpl::create(const UChar* characters,
425 unsigned length) { 429 unsigned length) {
426 if (!characters || !length) 430 if (!characters || !length)
427 return empty(); 431 return empty();
428 432
429 UChar* data; 433 UChar* data;
430 RefPtr<StringImpl> string = createUninitialized(length, data); 434 RefPtr<StringImpl> string = createUninitialized(length, data);
(...skipping 1292 matching lines...) Expand 10 before | Expand all | Expand 10 after
1723 if (replacement.isNull()) 1727 if (replacement.isNull())
1724 return this; 1728 return this;
1725 if (replacement.is8Bit()) 1729 if (replacement.is8Bit())
1726 return replace(pattern, replacement.characters8(), replacement.length()); 1730 return replace(pattern, replacement.characters8(), replacement.length());
1727 return replace(pattern, replacement.characters16(), replacement.length()); 1731 return replace(pattern, replacement.characters16(), replacement.length());
1728 } 1732 }
1729 1733
1730 PassRefPtr<StringImpl> StringImpl::replace(UChar pattern, 1734 PassRefPtr<StringImpl> StringImpl::replace(UChar pattern,
1731 const LChar* replacement, 1735 const LChar* replacement,
1732 unsigned repStrLength) { 1736 unsigned repStrLength) {
1733 ASSERT(replacement); 1737 DCHECK(replacement);
1734 1738
1735 size_t srcSegmentStart = 0; 1739 size_t srcSegmentStart = 0;
1736 unsigned matchCount = 0; 1740 unsigned matchCount = 0;
1737 1741
1738 // Count the matches. 1742 // Count the matches.
1739 while ((srcSegmentStart = find(pattern, srcSegmentStart)) != kNotFound) { 1743 while ((srcSegmentStart = find(pattern, srcSegmentStart)) != kNotFound) {
1740 ++matchCount; 1744 ++matchCount;
1741 ++srcSegmentStart; 1745 ++srcSegmentStart;
1742 } 1746 }
1743 1747
(...skipping 27 matching lines...) Expand all
1771 dstOffset += srcSegmentLength; 1775 dstOffset += srcSegmentLength;
1772 memcpy(data + dstOffset, replacement, repStrLength * sizeof(LChar)); 1776 memcpy(data + dstOffset, replacement, repStrLength * sizeof(LChar));
1773 dstOffset += repStrLength; 1777 dstOffset += repStrLength;
1774 srcSegmentStart = srcSegmentEnd + 1; 1778 srcSegmentStart = srcSegmentEnd + 1;
1775 } 1779 }
1776 1780
1777 srcSegmentLength = m_length - srcSegmentStart; 1781 srcSegmentLength = m_length - srcSegmentStart;
1778 memcpy(data + dstOffset, characters8() + srcSegmentStart, 1782 memcpy(data + dstOffset, characters8() + srcSegmentStart,
1779 srcSegmentLength * sizeof(LChar)); 1783 srcSegmentLength * sizeof(LChar));
1780 1784
1781 ASSERT(dstOffset + srcSegmentLength == newImpl->length()); 1785 DCHECK_EQ(dstOffset + srcSegmentLength, newImpl->length());
1782 1786
1783 return newImpl.release(); 1787 return newImpl.release();
1784 } 1788 }
1785 1789
1786 UChar* data; 1790 UChar* data;
1787 RefPtr<StringImpl> newImpl = createUninitialized(newSize, data); 1791 RefPtr<StringImpl> newImpl = createUninitialized(newSize, data);
1788 1792
1789 while ((srcSegmentEnd = find(pattern, srcSegmentStart)) != kNotFound) { 1793 while ((srcSegmentEnd = find(pattern, srcSegmentStart)) != kNotFound) {
1790 srcSegmentLength = srcSegmentEnd - srcSegmentStart; 1794 srcSegmentLength = srcSegmentEnd - srcSegmentStart;
1791 memcpy(data + dstOffset, characters16() + srcSegmentStart, 1795 memcpy(data + dstOffset, characters16() + srcSegmentStart,
1792 srcSegmentLength * sizeof(UChar)); 1796 srcSegmentLength * sizeof(UChar));
1793 1797
1794 dstOffset += srcSegmentLength; 1798 dstOffset += srcSegmentLength;
1795 for (unsigned i = 0; i < repStrLength; ++i) 1799 for (unsigned i = 0; i < repStrLength; ++i)
1796 data[i + dstOffset] = replacement[i]; 1800 data[i + dstOffset] = replacement[i];
1797 1801
1798 dstOffset += repStrLength; 1802 dstOffset += repStrLength;
1799 srcSegmentStart = srcSegmentEnd + 1; 1803 srcSegmentStart = srcSegmentEnd + 1;
1800 } 1804 }
1801 1805
1802 srcSegmentLength = m_length - srcSegmentStart; 1806 srcSegmentLength = m_length - srcSegmentStart;
1803 memcpy(data + dstOffset, characters16() + srcSegmentStart, 1807 memcpy(data + dstOffset, characters16() + srcSegmentStart,
1804 srcSegmentLength * sizeof(UChar)); 1808 srcSegmentLength * sizeof(UChar));
1805 1809
1806 ASSERT(dstOffset + srcSegmentLength == newImpl->length()); 1810 DCHECK_EQ(dstOffset + srcSegmentLength, newImpl->length());
1807 1811
1808 return newImpl.release(); 1812 return newImpl.release();
1809 } 1813 }
1810 1814
1811 PassRefPtr<StringImpl> StringImpl::replace(UChar pattern, 1815 PassRefPtr<StringImpl> StringImpl::replace(UChar pattern,
1812 const UChar* replacement, 1816 const UChar* replacement,
1813 unsigned repStrLength) { 1817 unsigned repStrLength) {
1814 ASSERT(replacement); 1818 DCHECK(replacement);
1815 1819
1816 size_t srcSegmentStart = 0; 1820 size_t srcSegmentStart = 0;
1817 unsigned matchCount = 0; 1821 unsigned matchCount = 0;
1818 1822
1819 // Count the matches. 1823 // Count the matches.
1820 while ((srcSegmentStart = find(pattern, srcSegmentStart)) != kNotFound) { 1824 while ((srcSegmentStart = find(pattern, srcSegmentStart)) != kNotFound) {
1821 ++matchCount; 1825 ++matchCount;
1822 ++srcSegmentStart; 1826 ++srcSegmentStart;
1823 } 1827 }
1824 1828
(...skipping 29 matching lines...) Expand all
1854 memcpy(data + dstOffset, replacement, repStrLength * sizeof(UChar)); 1858 memcpy(data + dstOffset, replacement, repStrLength * sizeof(UChar));
1855 1859
1856 dstOffset += repStrLength; 1860 dstOffset += repStrLength;
1857 srcSegmentStart = srcSegmentEnd + 1; 1861 srcSegmentStart = srcSegmentEnd + 1;
1858 } 1862 }
1859 1863
1860 srcSegmentLength = m_length - srcSegmentStart; 1864 srcSegmentLength = m_length - srcSegmentStart;
1861 for (unsigned i = 0; i < srcSegmentLength; ++i) 1865 for (unsigned i = 0; i < srcSegmentLength; ++i)
1862 data[i + dstOffset] = characters8()[i + srcSegmentStart]; 1866 data[i + dstOffset] = characters8()[i + srcSegmentStart];
1863 1867
1864 ASSERT(dstOffset + srcSegmentLength == newImpl->length()); 1868 DCHECK_EQ(dstOffset + srcSegmentLength, newImpl->length());
1865 1869
1866 return newImpl.release(); 1870 return newImpl.release();
1867 } 1871 }
1868 1872
1869 UChar* data; 1873 UChar* data;
1870 RefPtr<StringImpl> newImpl = createUninitialized(newSize, data); 1874 RefPtr<StringImpl> newImpl = createUninitialized(newSize, data);
1871 1875
1872 while ((srcSegmentEnd = find(pattern, srcSegmentStart)) != kNotFound) { 1876 while ((srcSegmentEnd = find(pattern, srcSegmentStart)) != kNotFound) {
1873 srcSegmentLength = srcSegmentEnd - srcSegmentStart; 1877 srcSegmentLength = srcSegmentEnd - srcSegmentStart;
1874 memcpy(data + dstOffset, characters16() + srcSegmentStart, 1878 memcpy(data + dstOffset, characters16() + srcSegmentStart,
1875 srcSegmentLength * sizeof(UChar)); 1879 srcSegmentLength * sizeof(UChar));
1876 1880
1877 dstOffset += srcSegmentLength; 1881 dstOffset += srcSegmentLength;
1878 memcpy(data + dstOffset, replacement, repStrLength * sizeof(UChar)); 1882 memcpy(data + dstOffset, replacement, repStrLength * sizeof(UChar));
1879 1883
1880 dstOffset += repStrLength; 1884 dstOffset += repStrLength;
1881 srcSegmentStart = srcSegmentEnd + 1; 1885 srcSegmentStart = srcSegmentEnd + 1;
1882 } 1886 }
1883 1887
1884 srcSegmentLength = m_length - srcSegmentStart; 1888 srcSegmentLength = m_length - srcSegmentStart;
1885 memcpy(data + dstOffset, characters16() + srcSegmentStart, 1889 memcpy(data + dstOffset, characters16() + srcSegmentStart,
1886 srcSegmentLength * sizeof(UChar)); 1890 srcSegmentLength * sizeof(UChar));
1887 1891
1888 ASSERT(dstOffset + srcSegmentLength == newImpl->length()); 1892 DCHECK_EQ(dstOffset + srcSegmentLength, newImpl->length());
1889 1893
1890 return newImpl.release(); 1894 return newImpl.release();
1891 } 1895 }
1892 1896
1893 PassRefPtr<StringImpl> StringImpl::replace(const StringView& pattern, 1897 PassRefPtr<StringImpl> StringImpl::replace(const StringView& pattern,
1894 const StringView& replacement) { 1898 const StringView& replacement) {
1895 if (pattern.isNull() || replacement.isNull()) 1899 if (pattern.isNull() || replacement.isNull())
1896 return this; 1900 return this;
1897 1901
1898 unsigned patternLength = pattern.length(); 1902 unsigned patternLength = pattern.length();
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
1947 memcpy(data + dstOffset, replacement.characters8(), 1951 memcpy(data + dstOffset, replacement.characters8(),
1948 repStrLength * sizeof(LChar)); 1952 repStrLength * sizeof(LChar));
1949 dstOffset += repStrLength; 1953 dstOffset += repStrLength;
1950 srcSegmentStart = srcSegmentEnd + patternLength; 1954 srcSegmentStart = srcSegmentEnd + patternLength;
1951 } 1955 }
1952 1956
1953 srcSegmentLength = m_length - srcSegmentStart; 1957 srcSegmentLength = m_length - srcSegmentStart;
1954 memcpy(data + dstOffset, characters8() + srcSegmentStart, 1958 memcpy(data + dstOffset, characters8() + srcSegmentStart,
1955 srcSegmentLength * sizeof(LChar)); 1959 srcSegmentLength * sizeof(LChar));
1956 1960
1957 ASSERT(dstOffset + srcSegmentLength == newImpl->length()); 1961 DCHECK_EQ(dstOffset + srcSegmentLength, newImpl->length());
1958 1962
1959 return newImpl.release(); 1963 return newImpl.release();
1960 } 1964 }
1961 1965
1962 UChar* data; 1966 UChar* data;
1963 RefPtr<StringImpl> newImpl = createUninitialized(newSize, data); 1967 RefPtr<StringImpl> newImpl = createUninitialized(newSize, data);
1964 while ((srcSegmentEnd = find(pattern, srcSegmentStart)) != kNotFound) { 1968 while ((srcSegmentEnd = find(pattern, srcSegmentStart)) != kNotFound) {
1965 srcSegmentLength = srcSegmentEnd - srcSegmentStart; 1969 srcSegmentLength = srcSegmentEnd - srcSegmentStart;
1966 if (srcIs8Bit) { 1970 if (srcIs8Bit) {
1967 // Case 3. 1971 // Case 3.
(...skipping 22 matching lines...) Expand all
1990 if (srcIs8Bit) { 1994 if (srcIs8Bit) {
1991 // Case 3. 1995 // Case 3.
1992 for (unsigned i = 0; i < srcSegmentLength; ++i) 1996 for (unsigned i = 0; i < srcSegmentLength; ++i)
1993 data[i + dstOffset] = characters8()[i + srcSegmentStart]; 1997 data[i + dstOffset] = characters8()[i + srcSegmentStart];
1994 } else { 1998 } else {
1995 // Cases 2 & 4. 1999 // Cases 2 & 4.
1996 memcpy(data + dstOffset, characters16() + srcSegmentStart, 2000 memcpy(data + dstOffset, characters16() + srcSegmentStart,
1997 srcSegmentLength * sizeof(UChar)); 2001 srcSegmentLength * sizeof(UChar));
1998 } 2002 }
1999 2003
2000 ASSERT(dstOffset + srcSegmentLength == newImpl->length()); 2004 DCHECK_EQ(dstOffset + srcSegmentLength, newImpl->length());
2001 2005
2002 return newImpl.release(); 2006 return newImpl.release();
2003 } 2007 }
2004 2008
2005 PassRefPtr<StringImpl> StringImpl::upconvertedString() { 2009 PassRefPtr<StringImpl> StringImpl::upconvertedString() {
2006 if (is8Bit()) 2010 if (is8Bit())
2007 return String::make16BitFrom8BitSource(characters8(), m_length) 2011 return String::make16BitFrom8BitSource(characters8(), m_length)
2008 .releaseImpl(); 2012 .releaseImpl();
2009 return this; 2013 return this;
2010 } 2014 }
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
2092 if (!bc) 2096 if (!bc)
2093 return false; 2097 return false;
2094 if (aPtr[i] != bc) 2098 if (aPtr[i] != bc)
2095 return false; 2099 return false;
2096 } 2100 }
2097 2101
2098 return !b[length]; 2102 return !b[length];
2099 } 2103 }
2100 2104
2101 bool equalNonNull(const StringImpl* a, const StringImpl* b) { 2105 bool equalNonNull(const StringImpl* a, const StringImpl* b) {
2102 ASSERT(a && b); 2106 DCHECK(a);
2107 DCHECK(b);
2103 if (a == b) 2108 if (a == b)
2104 return true; 2109 return true;
2105 2110
2106 return stringImplContentEqual(a, b); 2111 return stringImplContentEqual(a, b);
2107 } 2112 }
2108 2113
2109 bool equalIgnoringNullity(StringImpl* a, StringImpl* b) { 2114 bool equalIgnoringNullity(StringImpl* a, StringImpl* b) {
2110 if (!a && b && !b->length()) 2115 if (!a && b && !b->length())
2111 return true; 2116 return true;
2112 if (!b && a && !a->length()) 2117 if (!b && a && !a->length())
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
2165 } else if (localeIdMatchesLang(localeIdentifier, "lt")) { 2170 } else if (localeIdMatchesLang(localeIdentifier, "lt")) {
2166 // TODO(rob.buis) implement upper-casing rules for lt 2171 // TODO(rob.buis) implement upper-casing rules for lt
2167 // like in StringImpl::upper(locale). 2172 // like in StringImpl::upper(locale).
2168 } 2173 }
2169 } 2174 }
2170 2175
2171 return toUpper(c); 2176 return toUpper(c);
2172 } 2177 }
2173 2178
2174 } // namespace WTF 2179 } // namespace WTF
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/wtf/text/StringImpl.h ('k') | third_party/WebKit/Source/wtf/text/StringImplCF.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698