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

Unified Diff: Source/core/css/CSSGrammar.y.in

Issue 14897004: Skipping {}, () and [] blocks while error recovering in CSS. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Merge Created 7 years, 7 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 | « LayoutTests/fast/css/parsing-expr-error-recovery-expected.txt ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/css/CSSGrammar.y.in
diff --git a/Source/core/css/CSSGrammar.y.in b/Source/core/css/CSSGrammar.y.in
index 0629bb64b08650a9c28ea9a7cd66f8d84866b2c3..9cef7b694cddacacc0cb63f04a550d5146497ce2 100644
--- a/Source/core/css/CSSGrammar.y.in
+++ b/Source/core/css/CSSGrammar.y.in
@@ -300,12 +300,14 @@ static inline bool isCSSTokenAString(int yytype)
%type <character> operator
%type <valueList> expr
+%type <valueList> valid_expr
%type <value> term
%type <value> unary_term
%type <value> function
%type <value> calc_func_term
%type <character> calc_func_operator
%type <valueList> calc_func_expr
+%type <valueList> valid_calc_func_expr
%type <valueList> calc_func_expr_list
%type <valueList> calc_func_paren_expr
%type <value> calc_function
@@ -1618,11 +1620,16 @@ prio:
;
expr:
+ valid_expr
+ | valid_expr expr_recovery { $$ = 0; }
+ ;
+
+valid_expr:
term {
$$ = parser->createFloatingValueList();
$$->addValue(parser->sinkFloatingValue($1));
}
- | expr operator term {
+ | valid_expr operator term {
$$ = $1;
if ($$) {
if ($2) {
@@ -1635,9 +1642,6 @@ expr:
$$->addValue(parser->sinkFloatingValue($3));
}
}
- | expr expr_recovery {
- $$ = 0;
- }
;
expr_recovery:
@@ -1806,6 +1810,11 @@ calc_func_paren_expr:
;
calc_func_expr:
+ valid_calc_func_expr
+ | valid_calc_func_expr expr_recovery { $$ = 0; }
+ ;
+
+valid_calc_func_expr:
calc_func_term {
$$ = parser->createFloatingValueList();
$$->addValue(parser->sinkFloatingValue($1));
@@ -1836,9 +1845,6 @@ calc_func_expr:
$$ = 0;
}
| calc_func_paren_expr
- | calc_func_expr error {
- $$ = 0;
- }
;
calc_func_expr_list:
@@ -1956,8 +1962,18 @@ error_location: {
error_recovery:
/* empty */
- | error_recovery invalid_block
| error_recovery error
+ | error_recovery '{' error_recovery closing_brace { parser->invalidBlockHit(); }
+ | error_recovery '[' error_recovery ']'
+ | error_recovery '[' error_recovery TOKEN_EOF
+ | error_recovery '(' error_recovery closing_parenthesis
+ | error_recovery FUNCTION error_recovery closing_parenthesis
+ | error_recovery CALCFUNCTION error_recovery closing_parenthesis
+ | error_recovery VARFUNCTION error_recovery closing_parenthesis
+ | error_recovery MINFUNCTION error_recovery closing_parenthesis
+ | error_recovery MAXFUNCTION error_recovery closing_parenthesis
+ | error_recovery ANYFUNCTION error_recovery closing_parenthesis
+ | error_recovery NOTFUNCTION error_recovery closing_parenthesis
;
%%
« no previous file with comments | « LayoutTests/fast/css/parsing-expr-error-recovery-expected.txt ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698