| 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
|
| ;
|
|
|
| %%
|
|
|