Title: [139953] trunk/Source/WebCore
Revision
139953
Author
[email protected]
Date
2013-01-16 19:36:48 -0800 (Wed, 16 Jan 2013)

Log Message

Introduce a method to build the tree from a CompactHTMLToken
https://bugs.webkit.org/show_bug.cgi?id=107082

Reviewed by Adam Barth.

No new tests because covered by existing fast/parser tests.

* html/parser/HTMLDocumentParser.cpp:
(WebCore):
(WebCore::HTMLDocumentParser::constructTreeFromCompactHTMLToken):
* html/parser/HTMLDocumentParser.h:
* html/parser/HTMLToken.h:
(AtomicHTMLToken):
(WebCore::AtomicHTMLToken::create):
(WebCore::AtomicHTMLToken::AtomicHTMLToken):
* xml/parser/MarkupTokenBase.h:
(WebCore::AtomicMarkupTokenBase::AtomicMarkupTokenBase):
(AtomicMarkupTokenBase):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (139952 => 139953)


--- trunk/Source/WebCore/ChangeLog	2013-01-17 03:25:53 UTC (rev 139952)
+++ trunk/Source/WebCore/ChangeLog	2013-01-17 03:36:48 UTC (rev 139953)
@@ -1,3 +1,24 @@
+2013-01-16  Tony Gentilcore  <[email protected]>
+
+        Introduce a method to build the tree from a CompactHTMLToken
+        https://bugs.webkit.org/show_bug.cgi?id=107082
+
+        Reviewed by Adam Barth.
+
+        No new tests because covered by existing fast/parser tests.
+
+        * html/parser/HTMLDocumentParser.cpp:
+        (WebCore):
+        (WebCore::HTMLDocumentParser::constructTreeFromCompactHTMLToken):
+        * html/parser/HTMLDocumentParser.h:
+        * html/parser/HTMLToken.h:
+        (AtomicHTMLToken):
+        (WebCore::AtomicHTMLToken::create):
+        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
+        * xml/parser/MarkupTokenBase.h:
+        (WebCore::AtomicMarkupTokenBase::AtomicMarkupTokenBase):
+        (AtomicMarkupTokenBase):
+
 2013-01-16  Roger Fong  <[email protected]>
 
         Unreviewed build fix following r139918.

Modified: trunk/Source/WebCore/html/parser/HTMLDocumentParser.cpp (139952 => 139953)


--- trunk/Source/WebCore/html/parser/HTMLDocumentParser.cpp	2013-01-17 03:25:53 UTC (rev 139952)
+++ trunk/Source/WebCore/html/parser/HTMLDocumentParser.cpp	2013-01-17 03:36:48 UTC (rev 139953)
@@ -340,6 +340,16 @@
     }
 }
 
+#if ENABLE(THREADED_HTML_PARSER)
+
+void HTMLDocumentParser::constructTreeFromCompactHTMLToken(const CompactHTMLToken& compactToken)
+{
+    RefPtr<AtomicHTMLToken> token = AtomicHTMLToken::create(compactToken);
+    m_treeBuilder->constructTree(token.get());
+}
+
+#endif
+
 bool HTMLDocumentParser::hasInsertionPoint()
 {
     // FIXME: The wasCreatedByScript() branch here might not be fully correct.

Modified: trunk/Source/WebCore/html/parser/HTMLDocumentParser.h (139952 => 139953)


--- trunk/Source/WebCore/html/parser/HTMLDocumentParser.h	2013-01-17 03:25:53 UTC (rev 139952)
+++ trunk/Source/WebCore/html/parser/HTMLDocumentParser.h	2013-01-17 03:36:48 UTC (rev 139953)
@@ -127,6 +127,9 @@
     void pumpTokenizer(SynchronousMode);
     void pumpTokenizerIfPossible(SynchronousMode);
     void constructTreeFromHTMLToken(HTMLToken&);
+#if ENABLE(THREADED_HTML_PARSER)
+    void constructTreeFromCompactHTMLToken(const CompactHTMLToken&);
+#endif
 
     void runScriptsForPausedTreeBuilder();
     void resumeParsingAfterScriptExecution();

Modified: trunk/Source/WebCore/html/parser/HTMLToken.h (139952 => 139953)


--- trunk/Source/WebCore/html/parser/HTMLToken.h	2013-01-17 03:25:53 UTC (rev 139952)
+++ trunk/Source/WebCore/html/parser/HTMLToken.h	2013-01-17 03:36:48 UTC (rev 139953)
@@ -26,6 +26,7 @@
 #ifndef HTMLToken_h
 #define HTMLToken_h
 
+#include "CompactHTMLToken.h"
 #include "HTMLTokenTypes.h"
 #include "MarkupTokenBase.h"
 #include <wtf/RefCounted.h>
@@ -68,6 +69,15 @@
         return adoptRef(new AtomicHTMLToken(token));
     }
 
+#if ENABLE(THREADED_HTML_PARSER)
+
+    static PassRefPtr<AtomicHTMLToken> create(const CompactHTMLToken& token)
+    {
+        return adoptRef(new AtomicHTMLToken(token));
+    }
+
+#endif
+
     static PassRefPtr<AtomicHTMLToken> create(HTMLTokenTypes::Type type, const AtomicString& name, const Vector<Attribute>& attributes = Vector<Attribute>())
     {
         return adoptRef(new AtomicHTMLToken(type, name, attributes));
@@ -84,6 +94,48 @@
     {
     }
 
+#if ENABLE(THREADED_HTML_PARSER)
+
+    explicit AtomicHTMLToken(const CompactHTMLToken& token)
+        : AtomicMarkupTokenBase<HTMLToken>(token.type())
+    {
+        switch (m_type) {
+        case HTMLTokenTypes::Uninitialized:
+            ASSERT_NOT_REACHED();
+            break;
+        case HTMLTokenTypes::DOCTYPE:
+            m_name = token.data();
+            m_doctypeData = adoptPtr(new HTMLToken::DoctypeData());
+            m_doctypeData->m_hasPublicIdentifier = true;
+            m_doctypeData->m_publicIdentifier.append(token.publicIdentifier().characters(), token.publicIdentifier().length());
+            m_doctypeData->m_hasSystemIdentifier = true;
+            m_doctypeData->m_systemIdentifier.append(token.systemIdentifier().characters(), token.systemIdentifier().length());
+            break;
+        case HTMLTokenTypes::EndOfFile:
+            break;
+        case HTMLTokenTypes::StartTag:
+            m_attributes.reserveInitialCapacity(token.attributes().size());
+            for (Vector<CompactAttribute>::const_iterator it = token.attributes().begin(); it != token.attributes().end(); ++it)
+                m_attributes.append(Attribute(QualifiedName(nullAtom, it->name(), nullAtom), it->value()));
+            // Fall through!
+        case HTMLTokenTypes::EndTag:
+            m_selfClosing = token.selfClosing();
+            m_name = AtomicString(token.data());
+            break;
+        case HTMLTokenTypes::Comment:
+            m_data = token.data();
+            break;
+        case HTMLTokenTypes::Character:
+            m_externalCharacters = token.data().characters();
+            m_externalCharactersLength = token.data().length();
+            break;
+        default:
+            break;
+        }
+    }
+
+#endif
+
     AtomicHTMLToken(HTMLTokenTypes::Type type, const AtomicString& name, const Vector<Attribute>& attributes = Vector<Attribute>())
         : AtomicMarkupTokenBase<HTMLToken>(type, name, attributes)
     {

Modified: trunk/Source/WebCore/xml/parser/MarkupTokenBase.h (139952 => 139953)


--- trunk/Source/WebCore/xml/parser/MarkupTokenBase.h	2013-01-17 03:25:53 UTC (rev 139952)
+++ trunk/Source/WebCore/xml/parser/MarkupTokenBase.h	2013-01-17 03:36:48 UTC (rev 139953)
@@ -473,6 +473,15 @@
         }
     }
 
+    explicit AtomicMarkupTokenBase(typename Token::Type::Type type)
+        : m_type(type)
+        , m_externalCharacters(0)
+        , m_externalCharactersLength(0)
+        , m_isAll8BitData(false)
+        , m_selfClosing(false)
+    {
+    }
+
     AtomicMarkupTokenBase(typename Token::Type::Type type, const AtomicString& name, const Vector<Attribute>& attributes = Vector<Attribute>())
         : m_type(type)
         , m_name(name)
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to