Title: [99128] trunk/Source
Revision
99128
Author
ad...@chromium.org
Date
2011-11-02 18:28:58 -0700 (Wed, 02 Nov 2011)

Log Message

Replace usage of StringImpl with String where possible in CharacterData and Text
https://bugs.webkit.org/show_bug.cgi?id=71383

Reviewed by Darin Adler.

Source/_javascript_Core:

* wtf/text/WTFString.h:
(WTF::String::containsOnlyWhitespace): Added new method.

Source/WebCore:

Ryosuke Niwa, in http://webkit.org/b/70862, asked me to replace usages
of String with StringImpl. I've done more than what he asked in this
patch, the biggest change being that CharacterData now holds a String
instead of a RefPtr<StringImpl>.

No new tests, as this should have no effect on behavior.

* dom/CharacterData.cpp:
(WebCore::CharacterData::setData):
(WebCore::CharacterData::substringData):
(WebCore::CharacterData::parserAppendData):
(WebCore::CharacterData::appendData):
(WebCore::CharacterData::insertData):
(WebCore::CharacterData::deleteData):
(WebCore::CharacterData::replaceData):
(WebCore::CharacterData::containsOnlyWhitespace):
(WebCore::CharacterData::setDataAndUpdate):
(WebCore::CharacterData::updateRenderer):
(WebCore::CharacterData::dispatchModifiedEvent):
* dom/CharacterData.h:
(WebCore::CharacterData::length):
(WebCore::CharacterData::dataImpl):
(WebCore::CharacterData::CharacterData):
(WebCore::CharacterData::setDataWithoutUpdate):
* dom/Text.cpp:
(WebCore::Text::splitText):

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (99127 => 99128)


--- trunk/Source/_javascript_Core/ChangeLog	2011-11-03 00:55:00 UTC (rev 99127)
+++ trunk/Source/_javascript_Core/ChangeLog	2011-11-03 01:28:58 UTC (rev 99128)
@@ -1,3 +1,13 @@
+2011-11-02  Adam Klein  <ad...@chromium.org>
+
+        Replace usage of StringImpl with String where possible in CharacterData and Text
+        https://bugs.webkit.org/show_bug.cgi?id=71383
+
+        Reviewed by Darin Adler.
+
+        * wtf/text/WTFString.h:
+        (WTF::String::containsOnlyWhitespace): Added new method.
+
 2011-11-02  Mark Hahnenberg  <mhahnenb...@apple.com>
 
         De-virtualize JSObject::getOwnPropertyNames

Modified: trunk/Source/_javascript_Core/wtf/text/WTFString.h (99127 => 99128)


--- trunk/Source/_javascript_Core/wtf/text/WTFString.h	2011-11-03 00:55:00 UTC (rev 99127)
+++ trunk/Source/_javascript_Core/wtf/text/WTFString.h	2011-11-03 01:28:58 UTC (rev 99128)
@@ -323,6 +323,7 @@
 
     bool containsOnlyASCII() const { return charactersAreAllASCII(characters(), length()); }
     bool containsOnlyLatin1() const { return charactersAreAllLatin1(characters(), length()); }
+    bool containsOnlyWhitespace() const { return !m_impl || m_impl->containsOnlyWhitespace(); }
 
     // Hash table deleted values, which are only constructed and never copied or destroyed.
     String(WTF::HashTableDeletedValueType) : m_impl(WTF::HashTableDeletedValue) { }

Modified: trunk/Source/WebCore/ChangeLog (99127 => 99128)


--- trunk/Source/WebCore/ChangeLog	2011-11-03 00:55:00 UTC (rev 99127)
+++ trunk/Source/WebCore/ChangeLog	2011-11-03 01:28:58 UTC (rev 99128)
@@ -1,3 +1,37 @@
+2011-11-02  Adam Klein  <ad...@chromium.org>
+
+        Replace usage of StringImpl with String where possible in CharacterData and Text
+        https://bugs.webkit.org/show_bug.cgi?id=71383
+
+        Reviewed by Darin Adler.
+
+        Ryosuke Niwa, in http://webkit.org/b/70862, asked me to replace usages
+        of String with StringImpl. I've done more than what he asked in this
+        patch, the biggest change being that CharacterData now holds a String
+        instead of a RefPtr<StringImpl>.
+
+        No new tests, as this should have no effect on behavior.
+
+        * dom/CharacterData.cpp:
+        (WebCore::CharacterData::setData):
+        (WebCore::CharacterData::substringData):
+        (WebCore::CharacterData::parserAppendData):
+        (WebCore::CharacterData::appendData):
+        (WebCore::CharacterData::insertData):
+        (WebCore::CharacterData::deleteData):
+        (WebCore::CharacterData::replaceData):
+        (WebCore::CharacterData::containsOnlyWhitespace):
+        (WebCore::CharacterData::setDataAndUpdate):
+        (WebCore::CharacterData::updateRenderer):
+        (WebCore::CharacterData::dispatchModifiedEvent):
+        * dom/CharacterData.h:
+        (WebCore::CharacterData::length):
+        (WebCore::CharacterData::dataImpl):
+        (WebCore::CharacterData::CharacterData):
+        (WebCore::CharacterData::setDataWithoutUpdate):
+        * dom/Text.cpp:
+        (WebCore::Text::splitText):
+
 2011-11-02  Mark Hahnenberg  <mhahnenb...@apple.com>
 
         De-virtualize JSObject::getOwnPropertyNames

Modified: trunk/Source/WebCore/dom/CharacterData.cpp (99127 => 99128)


--- trunk/Source/WebCore/dom/CharacterData.cpp	2011-11-03 00:55:00 UTC (rev 99127)
+++ trunk/Source/WebCore/dom/CharacterData.cpp	2011-11-03 01:28:58 UTC (rev 99128)
@@ -39,13 +39,13 @@
 
 void CharacterData::setData(const String& data, ExceptionCode&)
 {
-    StringImpl* dataImpl = data.impl() ? data.impl() : StringImpl::empty();
-    if (equal(m_data.get(), dataImpl))
+    const String& nonNullData = !data.isNull() ? data : emptyString();
+    if (m_data == nonNullData)
         return;
 
     unsigned oldLength = length();
 
-    setDataAndUpdate(dataImpl, 0, oldLength, dataImpl->length());
+    setDataAndUpdate(nonNullData, 0, oldLength, nonNullData.length());
     document()->textRemoved(this, 0, oldLength);
 }
 
@@ -55,12 +55,12 @@
     if (ec)
         return String();
 
-    return m_data->substring(offset, count);
+    return m_data.substring(offset, count);
 }
 
 unsigned CharacterData::parserAppendData(const UChar* data, unsigned dataLength, unsigned lengthLimit)
 {
-    unsigned oldLength = m_data->length();
+    unsigned oldLength = m_data.length();
 
     unsigned end = min(dataLength, lengthLimit - oldLength);
 
@@ -77,9 +77,7 @@
     if (!end)
         return 0;
 
-    String newStr = m_data;
-    newStr.append(data, end);
-    m_data = newStr.impl();
+    m_data.append(data, end);
 
     updateRenderer(oldLength, 0);
     // We don't call dispatchModifiedEvent here because we don't want the
@@ -95,7 +93,7 @@
     String newStr = m_data;
     newStr.append(data);
 
-    setDataAndUpdate(newStr.impl(), m_data->length(), 0, data.length());
+    setDataAndUpdate(newStr, m_data.length(), 0, data.length());
 
     // FIXME: Should we call textInserted here?
 }
@@ -109,7 +107,7 @@
     String newStr = m_data;
     newStr.insert(data, offset);
 
-    setDataAndUpdate(newStr.impl(), offset, 0, data.length());
+    setDataAndUpdate(newStr, offset, 0, data.length());
 
     document()->textInserted(this, offset, data.length());
 }
@@ -129,7 +127,7 @@
     String newStr = m_data;
     newStr.remove(offset, realCount);
 
-    setDataAndUpdate(newStr.impl(), offset, count, 0);
+    setDataAndUpdate(newStr, offset, count, 0);
 
     document()->textRemoved(this, offset, realCount);
 }
@@ -150,7 +148,7 @@
     newStr.remove(offset, realCount);
     newStr.insert(data, offset);
 
-    setDataAndUpdate(newStr.impl(), offset, count, data.length());
+    setDataAndUpdate(newStr, offset, count, data.length());
 
     // update the markers for spell checking and grammar checking
     document()->textRemoved(this, offset, realCount);
@@ -164,7 +162,7 @@
 
 bool CharacterData::containsOnlyWhitespace() const
 {
-    return !m_data || m_data->containsOnlyWhitespace();
+    return m_data.containsOnlyWhitespace();
 }
 
 void CharacterData::setNodeValue(const String& nodeValue, ExceptionCode& ec)
@@ -172,14 +170,14 @@
     setData(nodeValue, ec);
 }
 
-void CharacterData::setDataAndUpdate(PassRefPtr<StringImpl> newData, unsigned offsetOfReplacedData, unsigned oldLength, unsigned newLength)
+void CharacterData::setDataAndUpdate(const String& newData, unsigned offsetOfReplacedData, unsigned oldLength, unsigned newLength)
 {
     if (document()->frame())
         document()->frame()->selection()->textWillBeReplaced(this, offsetOfReplacedData, oldLength, newLength);
-    RefPtr<StringImpl> oldData = m_data;
+    String oldData = m_data;
     m_data = newData;
     updateRenderer(offsetOfReplacedData, oldLength);
-    dispatchModifiedEvent(oldData.get());
+    dispatchModifiedEvent(oldData);
 }
 
 void CharacterData::updateRenderer(unsigned offsetOfReplacedData, unsigned lengthOfReplacedData)
@@ -187,7 +185,7 @@
     if ((!renderer() || !rendererIsNeeded(NodeRenderingContext(this, renderer()->style()))) && attached())
         reattach();
     else if (renderer())
-        toRenderText(renderer())->setTextWithOffset(m_data, offsetOfReplacedData, lengthOfReplacedData);
+        toRenderText(renderer())->setTextWithOffset(m_data.impl(), offsetOfReplacedData, lengthOfReplacedData);
 }
 
 #if ENABLE(MUTATION_OBSERVERS)
@@ -232,7 +230,7 @@
 }
 #endif // ENABLE(MUTATION_OBSERVERS)
 
-void CharacterData::dispatchModifiedEvent(StringImpl* oldData)
+void CharacterData::dispatchModifiedEvent(const String& oldData)
 {
 #if ENABLE(MUTATION_OBSERVERS)
     enqueueCharacterDataMutationRecord(this, oldData);

Modified: trunk/Source/WebCore/dom/CharacterData.h (99127 => 99128)


--- trunk/Source/WebCore/dom/CharacterData.h	2011-11-03 00:55:00 UTC (rev 99127)
+++ trunk/Source/WebCore/dom/CharacterData.h	2011-11-03 01:28:58 UTC (rev 99128)
@@ -24,6 +24,7 @@
 #define CharacterData_h
 
 #include "Node.h"
+#include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
@@ -31,7 +32,7 @@
 public:
     String data() const { return m_data; }
     void setData(const String&, ExceptionCode&);
-    unsigned length() const { return m_data->length(); }
+    unsigned length() const { return m_data.length(); }
     String substringData(unsigned offset, unsigned count, ExceptionCode&);
     void appendData(const String&, ExceptionCode&);
     void insertData(unsigned offset, const String&, ExceptionCode&);
@@ -40,7 +41,7 @@
 
     bool containsOnlyWhitespace() const;
 
-    StringImpl* dataImpl() { return m_data.get(); }
+    StringImpl* dataImpl() { return m_data.impl(); }
 
     // Like appendData, but optimized for the parser (e.g., no mutation events).
     // Returns how much could be added before length limit was met.
@@ -49,15 +50,19 @@
 protected:
     CharacterData(Document* document, const String& text, ConstructionType type)
         : Node(document, type)
-        , m_data(text.impl() ? text.impl() : StringImpl::empty())
+        , m_data(!text.isNull() ? text : emptyString())
     {
         ASSERT(type == CreateComment || type == CreateText);
     }
 
     virtual bool rendererIsNeeded(const NodeRenderingContext&);
 
-    void setDataImpl(PassRefPtr<StringImpl> impl) { m_data = impl; }
-    void dispatchModifiedEvent(StringImpl* oldValue);
+    void setDataWithoutUpdate(const String& data)
+    {
+        ASSERT(!data.isNull());
+        m_data = data;
+    }
+    void dispatchModifiedEvent(const String& oldValue);
 
 private:
     virtual String nodeValue() const;
@@ -65,14 +70,13 @@
     virtual bool isCharacterDataNode() const { return true; }
     virtual int maxCharacterOffset() const;
     virtual bool offsetInCharacters() const;
-    void setDataAndUpdate(PassRefPtr<StringImpl>, unsigned offsetOfReplacedData, unsigned oldLength, unsigned newLength);
+    void setDataAndUpdate(const String&, unsigned offsetOfReplacedData, unsigned oldLength, unsigned newLength);
     void updateRenderer(unsigned offsetOfReplacedData, unsigned lengthOfReplacedData);
     void checkCharDataOperation(unsigned offset, ExceptionCode&);
 
-    RefPtr<StringImpl> m_data;
+    String m_data;
 };
 
 } // namespace WebCore
 
 #endif // CharacterData_h
-

Modified: trunk/Source/WebCore/dom/Text.cpp (99127 => 99128)


--- trunk/Source/WebCore/dom/Text.cpp	2011-11-03 00:55:00 UTC (rev 99127)
+++ trunk/Source/WebCore/dom/Text.cpp	2011-11-03 01:28:58 UTC (rev 99128)
@@ -55,11 +55,11 @@
         return 0;
     }
 
-    RefPtr<StringImpl> oldStr = dataImpl();
-    RefPtr<Text> newText = virtualCreate(oldStr->substring(offset));
-    setDataImpl(oldStr->substring(0, offset));
+    String oldStr = data();
+    RefPtr<Text> newText = virtualCreate(oldStr.substring(offset));
+    setDataWithoutUpdate(oldStr.substring(0, offset));
 
-    dispatchModifiedEvent(oldStr.get());
+    dispatchModifiedEvent(oldStr);
 
     if (parentNode())
         parentNode()->insertBefore(newText.get(), nextSibling(), ec);
@@ -70,7 +70,7 @@
         document()->textNodeSplit(this);
 
     if (renderer())
-        toRenderText(renderer())->setTextWithOffset(dataImpl(), 0, oldStr->length());
+        toRenderText(renderer())->setTextWithOffset(dataImpl(), 0, oldStr.length());
 
     return newText.release();
 }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to