2010-07-01 Adam Barth <abarth@webkit.org>
authorabarth@webkit.org <abarth@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 1 Jul 2010 07:39:52 +0000 (07:39 +0000)
committerabarth@webkit.org <abarth@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 1 Jul 2010 07:39:52 +0000 (07:39 +0000)
        Reviewed by Eric Seidel.

        BogusCommentState should come in from the cold
        https://bugs.webkit.org/show_bug.cgi?id=41439

        Test progression => :)

        * html5lib/runner-expected.txt:
        * html5lib/webkit-resumer-expected.txt:
2010-07-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        BogusCommentState should come in from the cold
        https://bugs.webkit.org/show_bug.cgi?id=41439

        The BogusCommentState has always been wrong.  The proximate issue is
        that it didn't handle resuming correctly when parsing a partial input
        stream.  Now that we have EOF working properly, we can actually
        implement this state correctly.

        We need to distinguish when we enter this state from when we continue
        in this state.  We could do that with a branch for each character, but
        it seemed easier to split the state in two, even though that leaves us
        with one more state in our tokenizer than we have in the HTML5 spec.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::nextToken):
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::):

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

LayoutTests/ChangeLog
LayoutTests/html5lib/runner-expected.txt
LayoutTests/html5lib/webkit-resumer-expected.txt
WebCore/ChangeLog
WebCore/html/HTMLTokenizer.cpp
WebCore/html/HTMLTokenizer.h

index af1449f..bb41e50 100644 (file)
@@ -1,3 +1,15 @@
+2010-07-01  Adam Barth  <abarth@webkit.org>
+
+        Reviewed by Eric Seidel.
+
+        BogusCommentState should come in from the cold
+        https://bugs.webkit.org/show_bug.cgi?id=41439
+
+        Test progression => :)
+
+        * html5lib/runner-expected.txt:
+        * html5lib/webkit-resumer-expected.txt:
+
 2010-07-01  Eric Seidel  <eric@webkit.org>
 
         Unreviewed, rolling out r62231.
index 8d889c7..8bdb433 100644 (file)
@@ -157,11 +157,6 @@ CONSOLE MESSAGE: line 2: FOO<span>BAR</span>BAZ
 CONSOLE MESSAGE: line 2: FOO<span>BAR</span>BAZ
 CONSOLE MESSAGE: line 2: FOO<span>BAR</span>BAZ
 resources/webkit01.dat:
-519.3
-520.4
-521.5
-522.6
-523.7
 593.1
 594.2
 595.3
index fb25dff..204d3a0 100644 (file)
@@ -1,3 +1,25 @@
+2010-07-01  Adam Barth  <abarth@webkit.org>
+
+        Reviewed by Eric Seidel.
+
+        BogusCommentState should come in from the cold
+        https://bugs.webkit.org/show_bug.cgi?id=41439
+
+        The BogusCommentState has always been wrong.  The proximate issue is
+        that it didn't handle resuming correctly when parsing a partial input
+        stream.  Now that we have EOF working properly, we can actually
+        implement this state correctly.
+
+        We need to distinguish when we enter this state from when we continue
+        in this state.  We could do that with a branch for each character, but
+        it seemed easier to split the state in two, even though that leaves us
+        with one more state in our tokenizer than we have in the HTML5 spec.
+
+        * html/HTMLTokenizer.cpp:
+        (WebCore::HTMLTokenizer::nextToken):
+        * html/HTMLTokenizer.h:
+        (WebCore::HTMLTokenizer::):
+
 2010-06-30  Adam Barth  <abarth@webkit.org>
 
         Reviewed by Eric Seidel.
index 68dc4db..d8c87da 100644 (file)
@@ -1057,21 +1057,20 @@ bool HTMLTokenizer::nextToken(SegmentedString& source, HTMLToken& token)
     END_STATE()
 
     BEGIN_STATE(BogusCommentState) {
-        // FIXME: This state isn't correct because we'll terminate the
-        // comment early if we don't have the whole input stream available.
         m_token->beginComment();
-        while (!source.isEmpty()) {
-            cc = m_inputStreamPreprocessor.nextInputCharacter();
-            if (cc == '>')
-                return emitAndResumeIn(source, DataState);
+        RECONSUME_IN(ContinueBogusCommentState);
+    }
+    END_STATE()
+
+    BEGIN_STATE(ContinueBogusCommentState) {
+        if (cc == '>')
+            return emitAndResumeIn(source, DataState);
+        else if (cc == InputStreamPreprocessor::endOfFileMarker)
+            return emitAndReconsumeIn(source, DataState);
+        else {
             m_token->appendToComment(cc);
-            m_inputStreamPreprocessor.advance(source, m_lineNumber);
-            // We ignore the return value (which indicates that |source| is
-            // empty) because it's checked by the loop condition above.
+            ADVANCE_TO(ContinueBogusCommentState);
         }
-        m_state = DataState;
-        return true;
-        // FIXME: Handle EOF properly.
     }
     END_STATE()
 
index 8479dfc..96c2d7c 100644 (file)
@@ -83,6 +83,10 @@ public:
         AfterAttributeValueQuotedState,
         SelfClosingStartTagState,
         BogusCommentState,
+        // The ContinueBogusCommentState is not in the HTML5 spec, but we use
+        // it internally to keep track of whether we've started the bogus
+        // comment token yet.
+        ContinueBogusCommentState,
         MarkupDeclarationOpenState,
         CommentStartState,
         CommentStartDashState,