Changeset 156965 in webkit
- Timestamp:
- Oct 5, 2013 11:22:39 AM (11 years ago)
- Location:
- trunk/Source
- Files:
-
- 22 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WTF/ChangeLog
r156964 r156965 1 2013-10-05 Darin Adler <darin@apple.com> 2 3 Add AtomicString::number and use it 4 https://bugs.webkit.org/show_bug.cgi?id=122384 5 6 Reviewed by Anders Carlsson. 7 8 * wtf/text/AtomicString.cpp: 9 (WTF::AtomicString::number): Added. 10 * wtf/text/AtomicString.h: Ditto. 11 12 * wtf/text/IntegerToStringConversion.h: Simplify includes, renamed ConversionTrait to 13 IntegerToStringConversionTrait. Changed String version to use String since we no longer 14 need to use PassRefPtr to efficiently handle return values. Replaced UnsignedIntegerTrait 15 with std::make_unsigned. Added AtomicString support. Use nullptr instead of 0. 16 1 17 2013-10-05 Darin Adler <darin@apple.com> 2 18 -
trunk/Source/WTF/wtf/text/AtomicString.cpp
r155883 r156965 22 22 23 23 #include "config.h" 24 25 24 #include "AtomicString.h" 26 25 27 26 #include "AtomicStringTable.h" 27 #include "HashSet.h" 28 #include "IntegerToStringConversion.h" 28 29 #include "StringHash.h" 29 #include <wtf/HashSet.h>30 #include <wtf/Threading.h>31 #include <wtf/WTFThreadData.h>30 #include "Threading.h" 31 #include "WTFThreadData.h" 32 #include "dtoa.h" 32 33 #include <wtf/unicode/UTF8.h> 33 34 34 35 #if USE(WEB_THREAD) 35 #include <wtf/MainThread.h> 36 #include <wtf/TCSpinLock.h> 36 #include "TCSpinLock.h" 37 37 #endif 38 38 … … 44 44 45 45 #if USE(WEB_THREAD) 46 46 47 class AtomicStringTableLocker : public SpinLockHolder { 47 48 WTF_MAKE_NONCOPYABLE(AtomicStringTableLocker); … … 56 57 57 58 SpinLock AtomicStringTableLocker::s_stringTableLock = SPINLOCK_INITIALIZER; 59 58 60 #else 59 61 … … 62 64 public: 63 65 AtomicStringTableLocker() { } 64 ~AtomicStringTableLocker() { } 65 }; 66 }; 67 66 68 #endif // USE(WEB_THREAD) 67 69 … … 462 464 } 463 465 466 AtomicString AtomicString::number(int number) 467 { 468 return numberToStringSigned<AtomicString>(number); 469 } 470 471 AtomicString AtomicString::number(unsigned number) 472 { 473 return numberToStringUnsigned<AtomicString>(number); 474 } 475 476 AtomicString AtomicString::number(double number) 477 { 478 NumberToStringBuffer buffer; 479 return String(numberToFixedPrecisionString(number, 6, buffer, true)); 480 } 481 464 482 #if !ASSERT_DISABLED 465 483 bool AtomicString::isInAtomicStringTable(StringImpl* string) -
trunk/Source/WTF/wtf/text/AtomicString.h
r156775 r156965 102 102 103 103 UChar operator[](unsigned int i) const { return m_string[i]; } 104 104 105 WTF_EXPORT_STRING_API static AtomicString number(int); 106 WTF_EXPORT_STRING_API static AtomicString number(unsigned); 107 WTF_EXPORT_STRING_API static AtomicString number(double); 108 // If we need more overloads of the number function, we can add all the others that String has, but these seem to do for now. 109 105 110 bool contains(UChar c) const { return m_string.contains(c); } 106 111 bool contains(const LChar* s, bool caseSensitive = true) const -
trunk/Source/WTF/wtf/text/IntegerToStringConversion.h
r127991 r156965 23 23 #define IntegerToStringConversion_h 24 24 25 #include <wtf/text/StringBuilder.h> 26 #include <wtf/text/StringImpl.h> 25 #include "StringBuilder.h" 27 26 28 27 namespace WTF { … … 33 32 }; 34 33 35 template<typename T> struct ConversionTrait;34 template<typename T> struct IntegerToStringConversionTrait; 36 35 37 template<> struct ConversionTrait<String> {38 typedef PassRefPtr<StringImpl>ReturnType;36 template<> struct IntegerToStringConversionTrait<AtomicString> { 37 typedef AtomicString ReturnType; 39 38 typedef void AdditionalArgumentType; 40 static inline ReturnType flush(LChar* characters, unsigned length, void*) { return StringImpl::create(characters, length); }39 static ReturnType flush(LChar* characters, unsigned length, void*) { return AtomicString(characters, length); } 41 40 }; 42 template<> struct ConversionTrait<StringBuilder> { 41 template<> struct IntegerToStringConversionTrait<String> { 42 typedef String ReturnType; 43 typedef void AdditionalArgumentType; 44 static ReturnType flush(LChar* characters, unsigned length, void*) { return String(characters, length); } 45 }; 46 template<> struct IntegerToStringConversionTrait<StringBuilder> { 43 47 typedef void ReturnType; 44 48 typedef StringBuilder AdditionalArgumentType; 45 static inlineReturnType flush(LChar* characters, unsigned length, StringBuilder* stringBuilder) { stringBuilder->append(characters, length); }49 static ReturnType flush(LChar* characters, unsigned length, StringBuilder* stringBuilder) { stringBuilder->append(characters, length); } 46 50 }; 47 51 48 template<typename T> struct UnsignedIntegerTrait; 49 50 template<> struct UnsignedIntegerTrait<int> { 51 typedef unsigned int Type; 52 }; 53 template<> struct UnsignedIntegerTrait<long> { 54 typedef unsigned long Type; 55 }; 56 template<> struct UnsignedIntegerTrait<long long> { 57 typedef unsigned long long Type; 58 }; 59 60 template<typename T, typename UnsignedIntegerType, PositiveOrNegativeNumber NumberType> 61 static typename ConversionTrait<T>::ReturnType numberToStringImpl(UnsignedIntegerType number, typename ConversionTrait<T>::AdditionalArgumentType* additionalArgument) 52 template<typename T, typename UnsignedIntegerType, PositiveOrNegativeNumber NumberType, typename AdditionalArgumentType> 53 static typename IntegerToStringConversionTrait<T>::ReturnType numberToStringImpl(UnsignedIntegerType number, AdditionalArgumentType additionalArgument) 62 54 { 63 55 LChar buf[sizeof(UnsignedIntegerType) * 3 + 1]; … … 73 65 *--p = '-'; 74 66 75 return ConversionTrait<T>::flush(p, static_cast<unsigned>(end - p), additionalArgument);67 return IntegerToStringConversionTrait<T>::flush(p, static_cast<unsigned>(end - p), additionalArgument); 76 68 } 77 69 78 70 template<typename T, typename SignedIntegerType> 79 inline typename ConversionTrait<T>::ReturnType numberToStringSigned(SignedIntegerType number, typename ConversionTrait<T>::AdditionalArgumentType* additionalArgument = 0)71 inline typename IntegerToStringConversionTrait<T>::ReturnType numberToStringSigned(SignedIntegerType number, typename IntegerToStringConversionTrait<T>::AdditionalArgumentType* additionalArgument = nullptr) 80 72 { 81 73 if (number < 0) 82 return numberToStringImpl<T, typename UnsignedIntegerTrait<SignedIntegerType>::Type, NegativeNumber>(-number, additionalArgument);83 return numberToStringImpl<T, typename UnsignedIntegerTrait<SignedIntegerType>::Type, PositiveNumber>(number, additionalArgument);74 return numberToStringImpl<T, typename std::make_unsigned<SignedIntegerType>::type, NegativeNumber>(-number, additionalArgument); 75 return numberToStringImpl<T, typename std::make_unsigned<SignedIntegerType>::type, PositiveNumber>(number, additionalArgument); 84 76 } 85 77 86 78 template<typename T, typename UnsignedIntegerType> 87 inline typename ConversionTrait<T>::ReturnType numberToStringUnsigned(UnsignedIntegerType number, typename ConversionTrait<T>::AdditionalArgumentType* additionalArgument = 0)79 inline typename IntegerToStringConversionTrait<T>::ReturnType numberToStringUnsigned(UnsignedIntegerType number, typename IntegerToStringConversionTrait<T>::AdditionalArgumentType* additionalArgument = nullptr) 88 80 { 89 81 return numberToStringImpl<T, UnsignedIntegerType, PositiveNumber>(number, additionalArgument); -
trunk/Source/WebCore/ChangeLog
r156964 r156965 1 2013-10-05 Darin Adler <darin@apple.com> 2 3 Add AtomicString::number and use it 4 https://bugs.webkit.org/show_bug.cgi?id=122384 5 6 Reviewed by Anders Carlsson. 7 8 * css/CSSGrammar.y.in: Use AtomicString::number instead of String::number since 9 we are creating an AtomicString. This can save a memory allocation if the string 10 happens to already be in the atomic string table. 11 * dom/Element.cpp: 12 (WebCore::Element::setIntegralAttribute): Ditto. 13 (WebCore::Element::setUnsignedIntegralAttribute): Ditto. 14 * editing/BreakBlockquoteCommand.cpp: 15 (WebCore::BreakBlockquoteCommand::doApply): Ditto. 16 * html/HTMLBodyElement.cpp: 17 (WebCore::HTMLBodyElement::insertedInto): Use setIntegralAttribute instead of 18 a local homegrown equivalent. 19 * html/HTMLCanvasElement.cpp: 20 (WebCore::HTMLCanvasElement::setHeight): Ditto. 21 (WebCore::HTMLCanvasElement::setWidth): Ditto. 22 * html/HTMLElement.cpp: 23 (WebCore::HTMLElement::setTabIndex): Ditto. 24 * html/HTMLImageElement.cpp: 25 (WebCore::HTMLImageElement::setHeight): Ditto. 26 (WebCore::HTMLImageElement::setWidth): Ditto. 27 * html/HTMLInputElement.cpp: 28 (WebCore::HTMLInputElement::setMaxLength): Ditto. 29 (WebCore::HTMLInputElement::setSize): Same, but setUnsignedIntegralAttribute. 30 (WebCore::HTMLInputElement::setHeight): Ditto. 31 (WebCore::HTMLInputElement::setWidth): Ditto. 32 * html/HTMLMediaElement.cpp: 33 (WebCore::HTMLMediaElement::mediaPlayerSetSize): Ditto. 34 * html/HTMLMeterElement.cpp: 35 (WebCore::HTMLMeterElement::setMin): More of the same. 36 (WebCore::HTMLMeterElement::setMax): Ditto. 37 (WebCore::HTMLMeterElement::setValue): Ditto. 38 (WebCore::HTMLMeterElement::setLow): Ditto. 39 (WebCore::HTMLMeterElement::setHigh): Ditto. 40 (WebCore::HTMLMeterElement::setOptimum): Ditto. 41 * html/HTMLOListElement.cpp: 42 (WebCore::HTMLOListElement::setStart): Ditto. 43 * html/HTMLProgressElement.cpp: 44 (WebCore::HTMLProgressElement::setValue): Ditto. 45 (WebCore::HTMLProgressElement::setMax): Ditto. 46 * html/HTMLSelectElement.cpp: 47 (WebCore::HTMLSelectElement::parseAttribute): Ditto. 48 (WebCore::HTMLSelectElement::setSize): Ditto. 49 * html/HTMLTableCellElement.cpp: 50 (WebCore::HTMLTableCellElement::setColSpan): Ditto. 51 (WebCore::HTMLTableCellElement::setRowSpan): Ditto. 52 * html/HTMLTableColElement.cpp: 53 (WebCore::HTMLTableColElement::setSpan): Ditto. 54 * html/HTMLTextAreaElement.cpp: 55 (WebCore::HTMLTextAreaElement::setMaxLength): Ditto. 56 (WebCore::HTMLTextAreaElement::setCols): Ditto. 57 (WebCore::HTMLTextAreaElement::setRows): Ditto. 58 * html/shadow/MediaControlElements.cpp: 59 (WebCore::MediaControlTimelineElement::setDuration): Ditto. 60 1 61 2013-10-05 Darin Adler <darin@apple.com> 2 62 -
trunk/Source/WebCore/css/CSSGrammar.y.in
r156600 r156965 1310 1310 auto selector = std::make_unique<CSSParserSelector>(); 1311 1311 selector->setMatch(CSSSelector::PseudoClass); 1312 selector->setArgument( String::number($4 * $5));1312 selector->setArgument(AtomicString::number($4 * $5)); 1313 1313 selector->setValue($2); 1314 1314 if (selector->pseudoType() != CSSSelector::PseudoUnknown) -
trunk/Source/WebCore/dom/Element.cpp
r156940 r156965 2558 2558 void Element::setIntegralAttribute(const QualifiedName& attributeName, int value) 2559 2559 { 2560 // FIXME: Need an AtomicString version of String::number. 2561 setAttribute(attributeName, String::number(value)); 2560 setAttribute(attributeName, AtomicString::number(value)); 2562 2561 } 2563 2562 … … 2569 2568 void Element::setUnsignedIntegralAttribute(const QualifiedName& attributeName, unsigned value) 2570 2569 { 2571 // FIXME: Need an AtomicString version of String::number. 2572 setAttribute(attributeName, String::number(value)); 2570 setAttribute(attributeName, AtomicString::number(value)); 2573 2571 } 2574 2572 -
trunk/Source/WebCore/editing/BreakBlockquoteCommand.cpp
r156289 r156965 151 151 listChildNode = listChildNode->nextSibling(); 152 152 if (listChildNode && listChildNode->renderer() && listChildNode->renderer()->isListItem()) 153 setNodeAttribute(clonedChild, startAttr, String::number(toRenderListItem(listChildNode->renderer())->value()));153 setNodeAttribute(clonedChild, startAttr, AtomicString::number(toRenderListItem(listChildNode->renderer())->value())); 154 154 } 155 155 -
trunk/Source/WebCore/html/HTMLBodyElement.cpp
r156903 r156965 170 170 int marginWidth = ownerFrameElement->marginWidth(); 171 171 if (marginWidth != -1) 172 set Attribute(marginwidthAttr, String::number(marginWidth));172 setIntegralAttribute(marginwidthAttr, marginWidth); 173 173 int marginHeight = ownerFrameElement->marginHeight(); 174 174 if (marginHeight != -1) 175 set Attribute(marginheightAttr, String::number(marginHeight));175 setIntegralAttribute(marginheightAttr, marginHeight); 176 176 } 177 177 -
trunk/Source/WebCore/html/HTMLCanvasElement.cpp
r156778 r156965 154 154 void HTMLCanvasElement::setHeight(int value) 155 155 { 156 set Attribute(heightAttr, String::number(value));156 setIntegralAttribute(heightAttr, value); 157 157 } 158 158 159 159 void HTMLCanvasElement::setWidth(int value) 160 160 { 161 set Attribute(widthAttr, String::number(value));161 setIntegralAttribute(widthAttr, value); 162 162 } 163 163 -
trunk/Source/WebCore/html/HTMLElement.cpp
r156622 r156965 730 730 void HTMLElement::setTabIndex(int value) 731 731 { 732 set Attribute(tabindexAttr, String::number(value));732 setIntegralAttribute(tabindexAttr, value); 733 733 } 734 734 -
trunk/Source/WebCore/html/HTMLImageElement.cpp
r156950 r156965 335 335 void HTMLImageElement::setHeight(int value) 336 336 { 337 set Attribute(heightAttr, String::number(value));337 setIntegralAttribute(heightAttr, value); 338 338 } 339 339 … … 350 350 void HTMLImageElement::setWidth(int value) 351 351 { 352 set Attribute(widthAttr, String::number(value));352 setIntegralAttribute(widthAttr, value); 353 353 } 354 354 -
trunk/Source/WebCore/html/HTMLInputElement.cpp
r156903 r156965 1313 1313 ec = INDEX_SIZE_ERR; 1314 1314 else 1315 set Attribute(maxlengthAttr, String::number(maxLength));1315 setIntegralAttribute(maxlengthAttr, maxLength); 1316 1316 } 1317 1317 … … 1323 1323 void HTMLInputElement::setSize(unsigned size) 1324 1324 { 1325 set Attribute(sizeAttr, String::number(size));1325 setUnsignedIntegralAttribute(sizeAttr, size); 1326 1326 } 1327 1327 … … 1881 1881 void HTMLInputElement::setHeight(unsigned height) 1882 1882 { 1883 set Attribute(heightAttr, String::number(height));1883 setUnsignedIntegralAttribute(heightAttr, height); 1884 1884 } 1885 1885 1886 1886 void HTMLInputElement::setWidth(unsigned width) 1887 1887 { 1888 set Attribute(widthAttr, String::number(width));1888 setUnsignedIntegralAttribute(widthAttr, width); 1889 1889 } 1890 1890 -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r156953 r156965 5114 5114 void HTMLMediaElement::mediaPlayerSetSize(const IntSize& size) 5115 5115 { 5116 set Attribute(widthAttr, String::number(size.width()));5117 set Attribute(heightAttr, String::number(size.height()));5116 setIntegralAttribute(widthAttr, size.width()); 5117 setIntegralAttribute(heightAttr, size.height()); 5118 5118 } 5119 5119 -
trunk/Source/WebCore/html/HTMLMeterElement.cpp
r156622 r156965 90 90 return; 91 91 } 92 setAttribute(minAttr, String::number(min));92 setAttribute(minAttr, AtomicString::number(min)); 93 93 } 94 94 … … 104 104 return; 105 105 } 106 setAttribute(maxAttr, String::number(max));106 setAttribute(maxAttr, AtomicString::number(max)); 107 107 } 108 108 … … 119 119 return; 120 120 } 121 setAttribute(valueAttr, String::number(value));121 setAttribute(valueAttr, AtomicString::number(value)); 122 122 } 123 123 … … 134 134 return; 135 135 } 136 setAttribute(lowAttr, String::number(low));136 setAttribute(lowAttr, AtomicString::number(low)); 137 137 } 138 138 … … 149 149 return; 150 150 } 151 setAttribute(highAttr, String::number(high));151 setAttribute(highAttr, AtomicString::number(high)); 152 152 } 153 153 … … 164 164 return; 165 165 } 166 setAttribute(optimumAttr, String::number(optimum));166 setAttribute(optimumAttr, AtomicString::number(optimum)); 167 167 } 168 168 -
trunk/Source/WebCore/html/HTMLOListElement.cpp
r155795 r156965 102 102 void HTMLOListElement::setStart(int start) 103 103 { 104 set Attribute(startAttr, String::number(start));104 setIntegralAttribute(startAttr, start); 105 105 } 106 106 -
trunk/Source/WebCore/html/HTMLProgressElement.cpp
r156622 r156965 108 108 return; 109 109 } 110 setAttribute(valueAttr, String::number(value >= 0 ? value : 0));110 setAttribute(valueAttr, AtomicString::number(value >= 0 ? value : 0)); 111 111 } 112 112 … … 123 123 return; 124 124 } 125 setAttribute(maxAttr, String::number(max > 0 ? max : 1));125 setAttribute(maxAttr, AtomicString::number(max > 0 ? max : 1)); 126 126 } 127 127 -
trunk/Source/WebCore/html/HTMLSelectElement.cpp
r156903 r156965 299 299 // This is important since the style rules for this attribute can determine the appearance property. 300 300 int size = value.toInt(); 301 String attrSize =String::number(size);301 AtomicString attrSize = AtomicString::number(size); 302 302 if (attrSize != value) { 303 303 // FIXME: This is horribly factored. … … 417 417 void HTMLSelectElement::setSize(int size) 418 418 { 419 set Attribute(sizeAttr, String::number(size));419 setIntegralAttribute(sizeAttr, size); 420 420 } 421 421 -
trunk/Source/WebCore/html/HTMLTableCellElement.cpp
r156622 r156965 142 142 void HTMLTableCellElement::setColSpan(int n) 143 143 { 144 set Attribute(colspanAttr, String::number(n));144 setIntegralAttribute(colspanAttr, n); 145 145 } 146 146 … … 152 152 void HTMLTableCellElement::setRowSpan(int n) 153 153 { 154 set Attribute(rowspanAttr, String::number(n));154 setIntegralAttribute(rowspanAttr, n); 155 155 } 156 156 -
trunk/Source/WebCore/html/HTMLTableColElement.cpp
r155791 r156965 93 93 void HTMLTableColElement::setSpan(int n) 94 94 { 95 set Attribute(spanAttr, String::number(n));95 setIntegralAttribute(spanAttr, n); 96 96 } 97 97 -
trunk/Source/WebCore/html/HTMLTextAreaElement.cpp
r156387 r156965 441 441 ec = INDEX_SIZE_ERR; 442 442 else 443 set Attribute(maxlengthAttr, String::number(newValue));443 setIntegralAttribute(maxlengthAttr, newValue); 444 444 } 445 445 … … 499 499 void HTMLTextAreaElement::setCols(int cols) 500 500 { 501 set Attribute(colsAttr, String::number(cols));501 setIntegralAttribute(colsAttr, cols); 502 502 } 503 503 504 504 void HTMLTextAreaElement::setRows(int rows) 505 505 { 506 set Attribute(rowsAttr, String::number(rows));506 setIntegralAttribute(rowsAttr, rows); 507 507 } 508 508 -
trunk/Source/WebCore/html/shadow/MediaControlElements.cpp
r156761 r156965 978 978 void MediaControlTimelineElement::setDuration(double duration) 979 979 { 980 setAttribute(maxAttr, String::number(std::isfinite(duration) ? duration : 0));980 setAttribute(maxAttr, AtomicString::number(std::isfinite(duration) ? duration : 0)); 981 981 } 982 982
Note: See TracChangeset
for help on using the changeset viewer.