Title: [209466] trunk/Source/WebCore
Revision
209466
Author
hy...@apple.com
Date
2016-12-07 11:51:56 -0800 (Wed, 07 Dec 2016)

Log Message

[CSS Parser] Eliminate the Scope class and fold it into CSSTokenizer
https://bugs.webkit.org/show_bug.cgi?id=165532

Reviewed by Dean Jackson.

The Scope class, nested inside CSSTokenizer, is both poorly named and serves
no purpose. It's especially weird that it was the entry point into tokenization
instead of CSSTokenizer.

Eliminate the class, fold its members and functions into CSSTokenizer, and have
callers just make a CSSTokenizer instead.

* css/parser/CSSParser.cpp:
(WebCore::CSSParser::parseSupportsCondition):
(WebCore::CSSParser::parseSelector):
* css/parser/CSSParserImpl.cpp:
(WebCore::CSSParserImpl::parseValue):
(WebCore::CSSParserImpl::parseCustomPropertyValue):
(WebCore::CSSParserImpl::parseInlineStyleDeclaration):
(WebCore::CSSParserImpl::parseDeclarationList):
(WebCore::CSSParserImpl::parseRule):
(WebCore::CSSParserImpl::parseStyleSheet):
(WebCore::CSSParserImpl::parseKeyframeKeyList):
(WebCore::CSSParserImpl::parseDeclarationListForInspector):
(WebCore::CSSParserImpl::parseStyleSheetForInspector):
* css/parser/CSSTokenizer.cpp:
(WebCore::CSSTokenizer::CSSTokenizer):
(WebCore::CSSTokenizer::tokenRange):
(WebCore::CSSTokenizer::tokenCount):
(WebCore::CSSTokenizer::registerString):
(WebCore::CSSTokenizer::Scope::Scope): Deleted.
(WebCore::CSSTokenizer::Scope::tokenRange): Deleted.
(WebCore::CSSTokenizer::Scope::tokenCount): Deleted.
* css/parser/CSSTokenizer.h:
(WebCore::CSSTokenizer::Scope::storeString): Deleted.
* css/parser/CSSTokenizerInputStream.cpp:
(WebCore::CSSTokenizerInputStream::CSSTokenizerInputStream):
* css/parser/CSSTokenizerInputStream.h:
* css/parser/MediaQueryParser.cpp:
(WebCore::MediaQueryParser::parseMediaQuerySet):
* css/parser/SizesAttributeParser.cpp:
(WebCore::SizesAttributeParser::SizesAttributeParser):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (209465 => 209466)


--- trunk/Source/WebCore/ChangeLog	2016-12-07 19:31:08 UTC (rev 209465)
+++ trunk/Source/WebCore/ChangeLog	2016-12-07 19:51:56 UTC (rev 209466)
@@ -1,3 +1,48 @@
+2016-12-07  Dave Hyatt  <hy...@apple.com>
+
+        [CSS Parser] Eliminate the Scope class and fold it into CSSTokenizer
+        https://bugs.webkit.org/show_bug.cgi?id=165532
+
+        Reviewed by Dean Jackson.
+
+        The Scope class, nested inside CSSTokenizer, is both poorly named and serves
+        no purpose. It's especially weird that it was the entry point into tokenization
+        instead of CSSTokenizer.
+
+        Eliminate the class, fold its members and functions into CSSTokenizer, and have
+        callers just make a CSSTokenizer instead.
+
+        * css/parser/CSSParser.cpp:
+        (WebCore::CSSParser::parseSupportsCondition):
+        (WebCore::CSSParser::parseSelector):
+        * css/parser/CSSParserImpl.cpp:
+        (WebCore::CSSParserImpl::parseValue):
+        (WebCore::CSSParserImpl::parseCustomPropertyValue):
+        (WebCore::CSSParserImpl::parseInlineStyleDeclaration):
+        (WebCore::CSSParserImpl::parseDeclarationList):
+        (WebCore::CSSParserImpl::parseRule):
+        (WebCore::CSSParserImpl::parseStyleSheet):
+        (WebCore::CSSParserImpl::parseKeyframeKeyList):
+        (WebCore::CSSParserImpl::parseDeclarationListForInspector):
+        (WebCore::CSSParserImpl::parseStyleSheetForInspector):
+        * css/parser/CSSTokenizer.cpp:
+        (WebCore::CSSTokenizer::CSSTokenizer):
+        (WebCore::CSSTokenizer::tokenRange):
+        (WebCore::CSSTokenizer::tokenCount):
+        (WebCore::CSSTokenizer::registerString):
+        (WebCore::CSSTokenizer::Scope::Scope): Deleted.
+        (WebCore::CSSTokenizer::Scope::tokenRange): Deleted.
+        (WebCore::CSSTokenizer::Scope::tokenCount): Deleted.
+        * css/parser/CSSTokenizer.h:
+        (WebCore::CSSTokenizer::Scope::storeString): Deleted.
+        * css/parser/CSSTokenizerInputStream.cpp:
+        (WebCore::CSSTokenizerInputStream::CSSTokenizerInputStream):
+        * css/parser/CSSTokenizerInputStream.h:
+        * css/parser/MediaQueryParser.cpp:
+        (WebCore::MediaQueryParser::parseMediaQuerySet):
+        * css/parser/SizesAttributeParser.cpp:
+        (WebCore::SizesAttributeParser::SizesAttributeParser):
+
 2016-12-07  Joseph Pecoraro  <pecor...@apple.com>
 
         Web Inspector: Remove unused and mostly untested Page domain commands and events

Modified: trunk/Source/WebCore/css/parser/CSSParser.cpp (209465 => 209466)


--- trunk/Source/WebCore/css/parser/CSSParser.cpp	2016-12-07 19:31:08 UTC (rev 209465)
+++ trunk/Source/WebCore/css/parser/CSSParser.cpp	2016-12-07 19:51:56 UTC (rev 209466)
@@ -427,8 +427,8 @@
 bool CSSParser::parseSupportsCondition(const String& condition)
 {
     if (m_context.useNewParser) {
-        CSSTokenizer::Scope scope(condition);
-        CSSParserTokenRange range = scope.tokenRange();
+        CSSTokenizer tokenizer(condition);
+        CSSParserTokenRange range = tokenizer.tokenRange();
         CSSParserImpl parser(m_context);
         return CSSSupportsParser::supportsCondition(range, parser) == CSSSupportsParser::Supported;
     }
@@ -1455,8 +1455,8 @@
 void CSSParser::parseSelector(const String& string, CSSSelectorList& selectorList)
 {
     if (m_context.useNewParser) {
-        CSSTokenizer::Scope scope(string);
-        selectorList = CSSSelectorParser::parseSelector(scope.tokenRange(), m_context, nullptr);
+        CSSTokenizer tokenizer(string);
+        selectorList = CSSSelectorParser::parseSelector(tokenizer.tokenRange(), m_context, nullptr);
         return;
     }
 

Modified: trunk/Source/WebCore/css/parser/CSSParserImpl.cpp (209465 => 209466)


--- trunk/Source/WebCore/css/parser/CSSParserImpl.cpp	2016-12-07 19:31:08 UTC (rev 209465)
+++ trunk/Source/WebCore/css/parser/CSSParserImpl.cpp	2016-12-07 19:51:56 UTC (rev 209466)
@@ -70,8 +70,8 @@
     if (declaration->cssParserMode() == CSSViewportRuleMode)
         ruleType = StyleRule::Viewport;
 #endif
-    CSSTokenizer::Scope scope(string);
-    parser.consumeDeclarationValue(scope.tokenRange(), propertyID, important, ruleType);
+    CSSTokenizer tokenizer(string);
+    parser.consumeDeclarationValue(tokenizer.tokenRange(), propertyID, important, ruleType);
     if (parser.m_parsedProperties.isEmpty())
         return CSSParser::ParseResult::Error;
     return declaration->addParsedProperties(parser.m_parsedProperties) ? CSSParser::ParseResult::Changed : CSSParser::ParseResult::Unchanged;
@@ -80,8 +80,8 @@
 CSSParser::ParseResult CSSParserImpl::parseCustomPropertyValue(MutableStyleProperties* declaration, const AtomicString& propertyName, const String& string, bool important, const CSSParserContext& context)
 {
     CSSParserImpl parser(context);
-    CSSTokenizer::Scope scope(string);
-    parser.consumeCustomPropertyValue(scope.tokenRange(), propertyName, important);
+    CSSTokenizer tokenizer(string);
+    parser.consumeCustomPropertyValue(tokenizer.tokenRange(), propertyName, important);
     if (parser.m_parsedProperties.isEmpty())
         return CSSParser::ParseResult::Error;
     return declaration->addParsedProperties(parser.m_parsedProperties) ? CSSParser::ParseResult::Changed : CSSParser::ParseResult::Unchanged;
@@ -138,8 +138,8 @@
     context.mode = strictToCSSParserMode(element->isHTMLElement() && !element->document().inQuirksMode());
 
     CSSParserImpl parser(context);
-    CSSTokenizer::Scope scope(string);
-    parser.consumeDeclarationList(scope.tokenRange(), StyleRule::Style);
+    CSSTokenizer tokenizer(string);
+    parser.consumeDeclarationList(tokenizer.tokenRange(), StyleRule::Style);
     return createStyleProperties(parser.m_parsedProperties, context.mode);
 }
 
@@ -151,8 +151,8 @@
     if (declaration->cssParserMode() == CSSViewportRuleMode)
         ruleType = StyleRule::Viewport;
 #endif
-    CSSTokenizer::Scope scope(string);
-    parser.consumeDeclarationList(scope.tokenRange(), ruleType);
+    CSSTokenizer tokenizer(string);
+    parser.consumeDeclarationList(tokenizer.tokenRange(), ruleType);
     if (parser.m_parsedProperties.isEmpty())
         return false;
 
@@ -170,8 +170,8 @@
 RefPtr<StyleRuleBase> CSSParserImpl::parseRule(const String& string, const CSSParserContext& context, StyleSheetContents* styleSheet, AllowedRulesType allowedRules)
 {
     CSSParserImpl parser(context, styleSheet);
-    CSSTokenizer::Scope scope(string);
-    CSSParserTokenRange range = scope.tokenRange();
+    CSSTokenizer tokenizer(string);
+    CSSParserTokenRange range = tokenizer.tokenRange();
     range.consumeWhitespace();
     if (range.atEnd())
         return nullptr; // Parse error, empty rule
@@ -190,9 +190,9 @@
 
 void CSSParserImpl::parseStyleSheet(const String& string, const CSSParserContext& context, StyleSheetContents* styleSheet)
 {
-    CSSTokenizer::Scope scope(string);
+    CSSTokenizer tokenizer(string);
     CSSParserImpl parser(context, styleSheet);
-    bool firstRuleValid = parser.consumeRuleList(scope.tokenRange(), TopLevelRuleList, [&styleSheet](RefPtr<StyleRuleBase> rule) {
+    bool firstRuleValid = parser.consumeRuleList(tokenizer.tokenRange(), TopLevelRuleList, [&styleSheet](RefPtr<StyleRuleBase> rule) {
         if (rule->isCharsetRule())
             return;
         styleSheet->parserAppendRule(rule.releaseNonNull());
@@ -244,7 +244,7 @@
 
 std::unique_ptr<Vector<double>> CSSParserImpl::parseKeyframeKeyList(const String& keyList)
 {
-    return consumeKeyframeKeyList(CSSTokenizer::Scope(keyList).tokenRange());
+    return consumeKeyframeKeyList(CSSTokenizer(keyList).tokenRange());
 }
 
 bool CSSParserImpl::supportsDeclaration(CSSParserTokenRange& range)
@@ -261,10 +261,10 @@
     CSSParserImpl parser(context);
     CSSParserObserverWrapper wrapper(observer);
     parser.m_observerWrapper = &wrapper;
-    CSSTokenizer::Scope scope(declaration, wrapper);
+    CSSTokenizer tokenizer(declaration, wrapper);
     observer.startRuleHeader(StyleRule::Style, 0);
     observer.endRuleHeader(1);
-    parser.consumeDeclarationList(scope.tokenRange(), StyleRule::Style);
+    parser.consumeDeclarationList(tokenizer.tokenRange(), StyleRule::Style);
 }
 
 void CSSParserImpl::parseStyleSheetForInspector(const String& string, const CSSParserContext& context, StyleSheetContents* styleSheet, CSSParserObserver& observer)
@@ -272,8 +272,8 @@
     CSSParserImpl parser(context, styleSheet);
     CSSParserObserverWrapper wrapper(observer);
     parser.m_observerWrapper = &wrapper;
-    CSSTokenizer::Scope scope(string, wrapper);
-    bool firstRuleValid = parser.consumeRuleList(scope.tokenRange(), TopLevelRuleList, [&styleSheet](RefPtr<StyleRuleBase> rule) {
+    CSSTokenizer tokenizer(string, wrapper);
+    bool firstRuleValid = parser.consumeRuleList(tokenizer.tokenRange(), TopLevelRuleList, [&styleSheet](RefPtr<StyleRuleBase> rule) {
         if (rule->isCharsetRule())
             return;
         styleSheet->parserAppendRule(rule.releaseNonNull());

Modified: trunk/Source/WebCore/css/parser/CSSTokenizer.cpp (209465 => 209466)


--- trunk/Source/WebCore/css/parser/CSSTokenizer.cpp	2016-12-07 19:31:08 UTC (rev 209465)
+++ trunk/Source/WebCore/css/parser/CSSTokenizer.cpp	2016-12-07 19:51:56 UTC (rev 209466)
@@ -40,8 +40,8 @@
 
 namespace WebCore {
 
-CSSTokenizer::Scope::Scope(const String& string)
-    : m_string(string)
+CSSTokenizer::CSSTokenizer(const String& string)
+    : m_input(string)
 {
     // According to the spec, we should perform preprocessing here.
     // See: http://dev.w3.org/csswg/css-syntax/#input-preprocessing
@@ -58,10 +58,8 @@
     // Most strings we tokenize have about 3.5 to 5 characters per token.
     m_tokens.reserveInitialCapacity(string.length() / 3);
 
-    CSSTokenizerInputStream input(string);
-    CSSTokenizer tokenizer(input, *this);
     while (true) {
-        CSSParserToken token = tokenizer.nextToken();
+        CSSParserToken token = nextToken();
         if (token.type() == CommentToken)
             continue;
         if (token.type() == EOFToken)
@@ -70,27 +68,24 @@
     }
 }
 
-CSSTokenizer::Scope::Scope(const String& string, CSSParserObserverWrapper& wrapper)
-    : m_string(string)
+CSSTokenizer::CSSTokenizer(const String& string, CSSParserObserverWrapper& wrapper)
+    : m_input(string)
 {
     if (string.isEmpty())
         return;
 
-    CSSTokenizerInputStream input(string);
-    CSSTokenizer tokenizer(input, *this);
-
     unsigned offset = 0;
     while (true) {
-        CSSParserToken token = tokenizer.nextToken();
+        CSSParserToken token = nextToken();
         if (token.type() == EOFToken)
             break;
         if (token.type() == CommentToken)
-            wrapper.addComment(offset, input.offset(), m_tokens.size());
+            wrapper.addComment(offset, m_input.offset(), m_tokens.size());
         else {
             m_tokens.append(token);
             wrapper.addToken(offset);
         }
-        offset = input.offset();
+        offset = m_input.offset();
     }
 
     wrapper.addToken(offset);
@@ -97,12 +92,12 @@
     wrapper.finalizeConstruction(m_tokens.begin());
 }
 
-CSSParserTokenRange CSSTokenizer::Scope::tokenRange()
+CSSParserTokenRange CSSTokenizer::tokenRange()
 {
     return m_tokens;
 }
 
-unsigned CSSTokenizer::Scope::tokenCount()
+unsigned CSSTokenizer::tokenCount()
 {
     return m_tokens.size();
 }
@@ -119,12 +114,6 @@
     return first == '\\' && !isNewLine(second);
 }
 
-CSSTokenizer::CSSTokenizer(CSSTokenizerInputStream& inputStream, Scope& scope)
-    : m_input(inputStream)
-    , m_scope(scope)
-{
-}
-
 void CSSTokenizer::reconsume(UChar c)
 {
     m_input.pushBack(c);
@@ -883,7 +872,7 @@
 
 StringView CSSTokenizer::registerString(const String& string)
 {
-    m_scope.storeString(string);
+    m_stringPool.append(string);
     return string;
 }
 

Modified: trunk/Source/WebCore/css/parser/CSSTokenizer.h (209465 => 209466)


--- trunk/Source/WebCore/css/parser/CSSTokenizer.h	2016-12-07 19:31:08 UTC (rev 209465)
+++ trunk/Source/WebCore/css/parser/CSSTokenizer.h	2016-12-07 19:51:56 UTC (rev 209466)
@@ -30,6 +30,7 @@
 #pragma once
 
 #include "CSSParserToken.h"
+#include "CSSTokenizerInputStream.h"
 #include <climits>
 #include <wtf/text/StringView.h>
 #include <wtf/text/WTFString.h>
@@ -44,27 +45,13 @@
     WTF_MAKE_NONCOPYABLE(CSSTokenizer);
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    class Scope {
-    public:
-        Scope(const String&);
-        Scope(const String&, CSSParserObserverWrapper&); // For the inspector
+    CSSTokenizer(const String&);
+    CSSTokenizer(const String&, CSSParserObserverWrapper&); // For the inspector
 
-        CSSParserTokenRange tokenRange();
-        unsigned tokenCount();
+    CSSParserTokenRange tokenRange();
+    unsigned tokenCount();
 
-    private:
-        void storeString(const String& string) { m_stringPool.append(string); }
-        Vector<CSSParserToken, 32> m_tokens;
-        // We only allocate strings when escapes are used.
-        Vector<String> m_stringPool;
-        String m_string;
-
-        friend class CSSTokenizer;
-    };
-
 private:
-    CSSTokenizer(CSSTokenizerInputStream&, Scope&);
-
     CSSParserToken nextToken();
 
     UChar consume();
@@ -129,8 +116,11 @@
     static const CodePoint codePoints[];
 
     Vector<CSSParserTokenType, 8> m_blockStack;
-    CSSTokenizerInputStream& m_input;
-    Scope& m_scope;
+    CSSTokenizerInputStream m_input;
+    
+    Vector<CSSParserToken, 32> m_tokens;
+    // We only allocate strings when escapes are used.
+    Vector<String> m_stringPool;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/css/parser/CSSTokenizerInputStream.cpp (209465 => 209466)


--- trunk/Source/WebCore/css/parser/CSSTokenizerInputStream.cpp	2016-12-07 19:31:08 UTC (rev 209465)
+++ trunk/Source/WebCore/css/parser/CSSTokenizerInputStream.cpp	2016-12-07 19:51:56 UTC (rev 209466)
@@ -34,7 +34,7 @@
 
 namespace WebCore {
 
-CSSTokenizerInputStream::CSSTokenizerInputStream(String input)
+CSSTokenizerInputStream::CSSTokenizerInputStream(const String& input)
     : m_offset(0)
     , m_stringLength(input.length())
     , m_string(input.impl())

Modified: trunk/Source/WebCore/css/parser/CSSTokenizerInputStream.h (209465 => 209466)


--- trunk/Source/WebCore/css/parser/CSSTokenizerInputStream.h	2016-12-07 19:31:08 UTC (rev 209465)
+++ trunk/Source/WebCore/css/parser/CSSTokenizerInputStream.h	2016-12-07 19:51:56 UTC (rev 209466)
@@ -39,7 +39,7 @@
     WTF_MAKE_NONCOPYABLE(CSSTokenizerInputStream);
     WTF_MAKE_FAST_ALLOCATED;
 public:
-    explicit CSSTokenizerInputStream(String input);
+    explicit CSSTokenizerInputStream(const String& input);
 
     // Gets the char in the stream replacing NUL characters with a unicode
     // replacement character. Will return (NUL) kEndOfFileMarker when at the
@@ -101,7 +101,7 @@
 private:
     size_t m_offset;
     const size_t m_stringLength;
-    const RefPtr<StringImpl> m_string;
+    RefPtr<StringImpl> m_string;
 };
 
 } // namespace WebCore

Modified: trunk/Source/WebCore/css/parser/MediaQueryParser.cpp (209465 => 209466)


--- trunk/Source/WebCore/css/parser/MediaQueryParser.cpp	2016-12-07 19:31:08 UTC (rev 209465)
+++ trunk/Source/WebCore/css/parser/MediaQueryParser.cpp	2016-12-07 19:51:56 UTC (rev 209466)
@@ -38,7 +38,7 @@
 
 RefPtr<MediaQuerySet> MediaQueryParser::parseMediaQuerySet(const String& queryString)
 {
-    return parseMediaQuerySet(CSSTokenizer::Scope(queryString).tokenRange());
+    return parseMediaQuerySet(CSSTokenizer(queryString).tokenRange());
 }
 
 RefPtr<MediaQuerySet> MediaQueryParser::parseMediaQuerySet(CSSParserTokenRange range)

Modified: trunk/Source/WebCore/css/parser/SizesAttributeParser.cpp (209465 => 209466)


--- trunk/Source/WebCore/css/parser/SizesAttributeParser.cpp	2016-12-07 19:31:08 UTC (rev 209465)
+++ trunk/Source/WebCore/css/parser/SizesAttributeParser.cpp	2016-12-07 19:51:56 UTC (rev 209466)
@@ -70,7 +70,7 @@
     , m_length(0)
     , m_lengthWasSet(false)
 {
-    m_isValid = parse(CSSTokenizer::Scope(attribute).tokenRange());
+    m_isValid = parse(CSSTokenizer(attribute).tokenRange());
 }
 
 float SizesAttributeParser::length()
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to