Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(460)

Unified Diff: Source/core/css/parser/MediaQueryTokenizer.cpp

Issue 225293006: Moved MQ parsing block tracking to tokenizer (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Removed unused member var Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/css/parser/MediaQueryTokenizer.h ('k') | Source/core/css/parser/MediaQueryTokenizerTest.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/css/parser/MediaQueryTokenizer.cpp
diff --git a/Source/core/css/parser/MediaQueryTokenizer.cpp b/Source/core/css/parser/MediaQueryTokenizer.cpp
index 469221d5252f011d894a9ece53292ef33c08fe02..828f0495f89b240eec1bc154fb20ca39ba612f5f 100644
--- a/Source/core/css/parser/MediaQueryTokenizer.cpp
+++ b/Source/core/css/parser/MediaQueryTokenizer.cpp
@@ -67,34 +67,62 @@ MediaQueryToken MediaQueryTokenizer::whiteSpace(UChar cc)
return MediaQueryToken(WhitespaceToken);
}
+static bool popIfBlockMatches(Vector<MediaQueryTokenType>& blockStack, MediaQueryTokenType type)
+{
+ if (!blockStack.isEmpty() && blockStack.last() == type) {
+ blockStack.removeLast();
+ return true;
+ }
+ return false;
+}
+
+MediaQueryToken MediaQueryTokenizer::blockStart(MediaQueryTokenType type)
+{
+ m_blockStack.append(type);
+ return MediaQueryToken(type, MediaQueryToken::BlockStart);
+}
+
+MediaQueryToken MediaQueryTokenizer::blockStart(MediaQueryTokenType blockType, MediaQueryTokenType type, String name)
+{
+ m_blockStack.append(blockType);
+ return MediaQueryToken(type, name, MediaQueryToken::BlockStart);
+}
+
+MediaQueryToken MediaQueryTokenizer::blockEnd(MediaQueryTokenType type, MediaQueryTokenType startType)
+{
+ if (popIfBlockMatches(m_blockStack, startType))
+ return MediaQueryToken(type, MediaQueryToken::BlockEnd);
+ return MediaQueryToken(type);
+}
+
MediaQueryToken MediaQueryTokenizer::leftParenthesis(UChar cc)
{
- return MediaQueryToken(LeftParenthesisToken);
+ return blockStart(LeftParenthesisToken);
}
MediaQueryToken MediaQueryTokenizer::rightParenthesis(UChar cc)
{
- return MediaQueryToken(RightParenthesisToken);
+ return blockEnd(RightParenthesisToken, LeftParenthesisToken);
}
MediaQueryToken MediaQueryTokenizer::leftBracket(UChar cc)
{
- return MediaQueryToken(LeftBracketToken);
+ return blockStart(LeftBracketToken);
}
MediaQueryToken MediaQueryTokenizer::rightBracket(UChar cc)
{
- return MediaQueryToken(RightBracketToken);
+ return blockEnd(RightBracketToken, LeftBracketToken);
}
MediaQueryToken MediaQueryTokenizer::leftBrace(UChar cc)
{
- return MediaQueryToken(LeftBraceToken);
+ return blockStart(LeftBraceToken);
}
MediaQueryToken MediaQueryTokenizer::rightBrace(UChar cc)
{
- return MediaQueryToken(RightBraceToken);
+ return blockEnd(RightBraceToken, LeftBraceToken);
}
MediaQueryToken MediaQueryTokenizer::plusOrFullStop(UChar cc)
@@ -216,7 +244,6 @@ MediaQueryToken MediaQueryTokenizer::nextToken()
if (codePointFunc)
return ((this)->*(codePointFunc))(cc);
-
return MediaQueryToken(DelimiterToken, cc);
}
@@ -315,8 +342,9 @@ MediaQueryToken MediaQueryTokenizer::consumeNumericToken()
MediaQueryToken MediaQueryTokenizer::consumeIdentLikeToken()
{
String name = consumeName();
- if (consumeIfNext('('))
- return MediaQueryToken(FunctionToken, name);
+ if (consumeIfNext('(')) {
+ return blockStart(LeftParenthesisToken, FunctionToken, name);
+ }
return MediaQueryToken(IdentToken, name);
}
« no previous file with comments | « Source/core/css/parser/MediaQueryTokenizer.h ('k') | Source/core/css/parser/MediaQueryTokenizerTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698