Move Node::hasName() to Element.
authorakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 1 Jun 2013 10:20:25 +0000 (10:20 +0000)
committerakling@apple.com <akling@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 1 Jun 2013 10:20:25 +0000 (10:20 +0000)
<http://webkit.org/b/117107>

Reviewed by Antti Koivisto.

A Node can't have attributes, and thus can't have a name.
Use a bit on ElementData instead of (half) a Node flag to track whether we have a name.

* dom/Element.cpp:
(WebCore::Element::attributeChanged):
(WebCore::ElementData::ElementData):
* dom/Element.h:
(WebCore::ElementData::hasName):
(WebCore::Element::hasName):
* dom/Node.h:
(WebCore::Node::isEditingText):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@151071 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/dom/Element.cpp
Source/WebCore/dom/Element.h
Source/WebCore/dom/Node.h

index 1ac0ee5..55331f4 100644 (file)
@@ -1,5 +1,24 @@
 2013-06-01  Andreas Kling  <akling@apple.com>
 
+        Move Node::hasName() to Element.
+        <http://webkit.org/b/117107>
+
+        Reviewed by Antti Koivisto.
+
+        A Node can't have attributes, and thus can't have a name.
+        Use a bit on ElementData instead of (half) a Node flag to track whether we have a name.
+
+        * dom/Element.cpp:
+        (WebCore::Element::attributeChanged):
+        (WebCore::ElementData::ElementData):
+        * dom/Element.h:
+        (WebCore::ElementData::hasName):
+        (WebCore::Element::hasName):
+        * dom/Node.h:
+        (WebCore::Node::isEditingText):
+
+2013-06-01  Andreas Kling  <akling@apple.com>
+
         Move Node::hasID() and hasClass() to Element.
         <http://webkit.org/b/117104>
 
index 9e8df66..e4bbb00 100644 (file)
@@ -1027,7 +1027,7 @@ void Element::attributeChanged(const QualifiedName& name, const AtomicString& ne
     } else if (name == classAttr)
         classAttributeChanged(newValue);
     else if (name == HTMLNames::nameAttr)
-        setHasName(!newValue.isNull());
+        elementData()->m_hasNameAttribute = newValue.isNull();
     else if (name == HTMLNames::pseudoAttr)
         shouldInvalidateStyle |= testShouldInvalidateStyle && isInShadowTree();
 
@@ -3193,6 +3193,7 @@ void ElementData::deref()
 ElementData::ElementData()
     : m_isUnique(true)
     , m_arraySize(0)
+    , m_hasNameAttribute(false)
     , m_presentationAttributeStyleIsDirty(false)
     , m_styleAttributeIsDirty(false)
 #if ENABLE(SVG)
@@ -3204,6 +3205,7 @@ ElementData::ElementData()
 ElementData::ElementData(unsigned arraySize)
     : m_isUnique(false)
     , m_arraySize(arraySize)
+    , m_hasNameAttribute(false)
     , m_presentationAttributeStyleIsDirty(false)
     , m_styleAttributeIsDirty(false)
 #if ENABLE(SVG)
@@ -3265,6 +3267,7 @@ ShareableElementData::ShareableElementData(const UniqueElementData& other)
 ElementData::ElementData(const ElementData& other, bool isUnique)
     : m_isUnique(isUnique)
     , m_arraySize(isUnique ? 0 : other.length())
+    , m_hasNameAttribute(other.m_hasNameAttribute)
     , m_presentationAttributeStyleIsDirty(other.m_presentationAttributeStyleIsDirty)
     , m_styleAttributeIsDirty(other.m_styleAttributeIsDirty)
 #if ENABLE(SVG)
index 4000d51..47c4887 100644 (file)
@@ -83,6 +83,7 @@ public:
 
     bool hasID() const { return !m_idForStyleResolution.isNull(); }
     bool hasClass() const { return !m_classNames.isNull(); }
+    bool hasName() const { return m_hasNameAttribute; }
 
     bool isEquivalent(const ElementData* other) const;
 
@@ -94,7 +95,8 @@ protected:
     ElementData(const ElementData&, bool isUnique);
 
     unsigned m_isUnique : 1;
-    unsigned m_arraySize : 28;
+    unsigned m_arraySize : 27;
+    mutable unsigned m_hasNameAttribute : 1;
     mutable unsigned m_presentationAttributeStyleIsDirty : 1;
     mutable unsigned m_styleAttributeIsDirty : 1;
 #if ENABLE(SVG)
@@ -627,6 +629,7 @@ public:
 
     bool hasID() const;
     bool hasClass() const;
+    bool hasName() const;
     const SpaceSplitString& classNames() const;
 
     IntSize savedLayerScrollOffset() const;
@@ -908,6 +911,11 @@ inline bool Element::hasClass() const
     return elementData() && elementData()->hasClass();
 }
 
+inline bool Element::hasName() const
+{
+    return elementData() && elementData()->hasName();
+}
+
 inline UniqueElementData* Element::ensureUniqueElementData()
 {
     if (!elementData() || !elementData()->isUnique())
index 51dd214..771ea74 100644 (file)
@@ -327,8 +327,6 @@ public:
     virtual void notifyLoadedSheetAndAllCriticalSubresources(bool /* error loading subresource */) { }
     virtual void startLoadingDynamicSheet() { ASSERT_NOT_REACHED(); }
 
-    bool hasName() const { return !isTextNode() && getFlag(HasNameOrIsEditingTextFlag); }
-
     bool isUserActionElement() const { return getFlag(IsUserActionElement); }
     void setUserActionElement(bool flag) { setFlag(flag, IsUserActionElement); }
 
@@ -338,9 +336,8 @@ public:
     StyleChangeType styleChangeType() const { return static_cast<StyleChangeType>(m_nodeFlags & StyleChangeMask); }
     bool childNeedsStyleRecalc() const { return getFlag(ChildNeedsStyleRecalcFlag); }
     bool isLink() const { return getFlag(IsLinkFlag); }
-    bool isEditingText() const { return isTextNode() && getFlag(HasNameOrIsEditingTextFlag); }
+    bool isEditingText() const { return getFlag(IsEditingTextFlag); }
 
-    void setHasName(bool f) { ASSERT(!isTextNode()); setFlag(f, HasNameOrIsEditingTextFlag); }
     void setChildNeedsStyleRecalc() { setFlag(ChildNeedsStyleRecalcFlag); }
     void clearChildNeedsStyleRecalc() { clearFlag(ChildNeedsStyleRecalcFlag); }
 
@@ -661,7 +658,7 @@ private:
 
         SelfOrAncestorHasDirAutoFlag = 1 << 17,
 
-        HasNameOrIsEditingTextFlag = 1 << 18,
+        IsEditingTextFlag = 1 << 18,
 
         InNamedFlowFlag = 1 << 19,
         HasSyntheticAttrChildNodesFlag = 1 << 20,
@@ -695,7 +692,7 @@ protected:
         CreateSVGElement = CreateStyledElement | IsSVGFlag,
         CreateDocument = CreateContainer | InDocumentFlag,
         CreateInsertionPoint = CreateHTMLElement | NeedsShadowTreeWalkerFlag,
-        CreateEditingText = CreateText | HasNameOrIsEditingTextFlag,
+        CreateEditingText = CreateText | IsEditingTextFlag,
     };
     Node(Document*, ConstructionType);