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()