Chromium Code Reviews| Index: Source/core/css/CSSGrammar.y.in |
| diff --git a/Source/core/css/CSSGrammar.y.in b/Source/core/css/CSSGrammar.y.in |
| index 20860de7ce6e4c380e738dea75e7e8f86bd61db5..926dccfe88ef86d15238185a1b9a6c841c2d54f2 100644 |
| --- a/Source/core/css/CSSGrammar.y.in |
| +++ b/Source/core/css/CSSGrammar.y.in |
| @@ -87,7 +87,7 @@ static inline bool isCSSTokenAString(int yytype) |
| %} |
| -%expect 35 |
| +%expect 34 |
| %nonassoc LOWEST_PREC |
| @@ -403,6 +403,11 @@ closing_brace: |
| | %prec LOWEST_PREC TOKEN_EOF |
| ; |
| +closing_parenthesis: |
| + ')' |
| + | %prec LOWEST_PREC TOKEN_EOF |
| + ; |
| + |
| charset: |
| CHARSET_SYM maybe_space STRING maybe_space ';' { |
| if (parser->m_styleSheet) |
| @@ -1543,11 +1548,9 @@ decl_list: |
| ; |
| decl_list_recovery: |
| - error error_location { |
| + error error_location error_recovery { |
| parser->syntaxError($2, CSSParser::PropertyDeclarationError); |
| } |
| - | decl_list_recovery invalid_block |
| - | decl_list_recovery error |
| ; |
| declaration: |
| @@ -1598,11 +1601,9 @@ declaration: |
| ; |
| declaration_recovery: |
| - error error_location { |
| + error error_location error_recovery { |
| parser->syntaxError($2); |
| } |
| - | declaration_recovery invalid_block |
| - | declaration_recovery error |
| ; |
| property: |
| @@ -1634,17 +1635,15 @@ expr: |
| $$->addValue(parser->sinkFloatingValue($3)); |
| } |
| } |
| - | expr invalid_block_list { |
| - $$ = 0; |
| - } |
| - | expr invalid_block_list error { |
| - $$ = 0; |
| - } |
| - | expr error { |
| + | expr expr_recovery { |
| $$ = 0; |
| } |
| ; |
| +expr_recovery: |
| + error error_location error_recovery |
| + ; |
| + |
| operator: |
| '/' maybe_space { |
| $$ = '/'; |
| @@ -1733,7 +1732,7 @@ unary_term: |
| ; |
| function: |
| - FUNCTION maybe_space expr ')' maybe_space { |
| + FUNCTION maybe_space expr closing_parenthesis maybe_space { |
| CSSParserFunction* f = parser->createFloatingFunction(); |
| f->name = $1; |
| f->args = parser->sinkFloatingValueList($3); |
| @@ -1741,15 +1740,7 @@ function: |
| $$.unit = CSSParserValue::Function; |
| $$.function = f; |
| } | |
| - FUNCTION maybe_space expr TOKEN_EOF { |
| - CSSParserFunction* f = parser->createFloatingFunction(); |
| - f->name = $1; |
| - f->args = parser->sinkFloatingValueList($3); |
| - $$.id = 0; |
| - $$.unit = CSSParserValue::Function; |
| - $$.function = f; |
| - } | |
| - FUNCTION maybe_space ')' maybe_space { |
| + FUNCTION maybe_space closing_parenthesis maybe_space { |
|
apavlov
2013/05/07 14:37:37
This is not quite equivalent (TOKEN_EOF is dropped
SeRya
2013/05/08 06:24:07
Actually "FUNCTION maybe_space expr TOKEN_EOF" is
|
| CSSParserFunction* f = parser->createFloatingFunction(); |
| f->name = $1; |
| CSSParserValueList* valueList = parser->createFloatingValueList(); |
| @@ -1758,7 +1749,7 @@ function: |
| $$.unit = CSSParserValue::Function; |
| $$.function = f; |
| } | |
| - FUNCTION maybe_space error { |
| + FUNCTION maybe_space expr_recovery closing_parenthesis maybe_space { |
|
SeRya
2013/05/08 06:24:07
Functional change is here. I extracted nonfunction
|
| CSSParserFunction* f = parser->createFloatingFunction(); |
| f->name = $1; |
| f->args = nullptr; |
| @@ -1767,7 +1758,7 @@ function: |
| $$.function = f; |
| } |
| ; |
| - |
| + |
| calc_func_term: |
| unary_term { $$ = $1; } |
| | VARFUNCTION maybe_space IDENT ')' { |
| @@ -1982,5 +1973,10 @@ error_location: { |
| } |
| ; |
| +error_recovery: |
| + /* empty */ |
| + | error_recovery invalid_block |
| + | error_recovery error |
| + |
| %% |