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

Side by Side Diff: Source/core/css/CSSGrammar.y.in

Issue 14065029: Improved parse error handling for CSSMQ. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2002-2003 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 2002-2003 Lars Knoll (knoll@kde.org)
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 App le Inc. All rights reserved. 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 App le Inc. All rights reserved.
4 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com) 4 * Copyright (C) 2006 Alexey Proskuryakov (ap@nypop.com)
5 * Copyright (C) 2008 Eric Seidel <eric@webkit.org> 5 * Copyright (C) 2008 Eric Seidel <eric@webkit.org>
6 * Copyright (C) 2012 Intel Corporation. All rights reserved. 6 * Copyright (C) 2012 Intel Corporation. All rights reserved.
7 * Copyright (C) 2013 Opera Software ASA. All rights reserved.
7 * 8 *
8 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public 10 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either 11 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version. 12 * version 2 of the License, or (at your option) any later version.
12 * 13 *
13 * This library is distributed in the hope that it will be useful, 14 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details. 17 * Lesser General Public License for more details.
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 case VAR_DEFINITION: 81 case VAR_DEFINITION:
81 case UNICODERANGE: 82 case UNICODERANGE:
82 return true; 83 return true;
83 default: 84 default:
84 return false; 85 return false;
85 } 86 }
86 } 87 }
87 88
88 %} 89 %}
89 90
90 %expect 38 91 %expect 36
91 92
92 %nonassoc LOWEST_PREC 93 %nonassoc LOWEST_PREC
93 94
94 %left UNIMPORTANT_TOK 95 %left UNIMPORTANT_TOK
95 96
96 %token WHITESPACE SGML_CD 97 %token WHITESPACE SGML_CD
97 %token TOKEN_EOF 0 98 %token TOKEN_EOF 0
98 99
99 %token INCLUDES 100 %token INCLUDES
100 %token DASHMATCH 101 %token DASHMATCH
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
242 %type <string> namespace_selector 243 %type <string> namespace_selector
243 244
244 %type <string> string_or_uri 245 %type <string> string_or_uri
245 %type <string> ident_or_string 246 %type <string> ident_or_string
246 %type <string> medium 247 %type <string> medium
247 %type <marginBox> margin_sym 248 %type <marginBox> margin_sym
248 249
249 %type <string> media_feature 250 %type <string> media_feature
250 %type <mediaList> media_list 251 %type <mediaList> media_list
251 %type <mediaList> maybe_media_list 252 %type <mediaList> maybe_media_list
252 %type <mediaQuery> media_query 253 %type <mediaQuery> media_query invalid_media_query
253 %type <mediaQueryRestrictor> maybe_media_restrictor 254 %type <mediaQueryRestrictor> maybe_media_restrictor
254 %type <valueList> maybe_media_value 255 %type <valueList> maybe_media_value
255 %type <mediaQueryExp> media_query_exp 256 %type <mediaQueryExp> media_query_exp
256 %type <mediaQueryExpList> media_query_exp_list 257 %type <mediaQueryExpList> media_query_exp_list
257 %type <mediaQueryExpList> maybe_and_media_query_exp_list 258 %type <mediaQueryExpList> maybe_and_media_query_exp_list
258 259
259 %type <boolean> supports_condition 260 %type <boolean> supports_condition
260 %type <boolean> supports_condition_in_parens 261 %type <boolean> supports_condition_in_parens
261 %type <boolean> supports_negation 262 %type <boolean> supports_negation
262 %type <boolean> supports_conjunction 263 %type <boolean> supports_conjunction
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
354 parser->m_valueList = parser->sinkFloatingValueList($4); 355 parser->m_valueList = parser->sinkFloatingValueList($4);
355 int oldParsedProperties = parser->m_parsedProperties.size(); 356 int oldParsedProperties = parser->m_parsedProperties.size();
356 if (!parser->parseValue(parser->m_id, parser->m_important)) 357 if (!parser->parseValue(parser->m_id, parser->m_important))
357 parser->rollbackLastProperties(parser->m_parsedProperties.size() - oldParsedProperties); 358 parser->rollbackLastProperties(parser->m_parsedProperties.size() - oldParsedProperties);
358 parser->m_valueList = nullptr; 359 parser->m_valueList = nullptr;
359 } 360 }
360 } 361 }
361 ; 362 ;
362 363
363 webkit_mediaquery: 364 webkit_mediaquery:
364 WEBKIT_MEDIAQUERY_SYM WHITESPACE maybe_space media_query '}' { 365 WEBKIT_MEDIAQUERY_SYM maybe_space media_query TOKEN_EOF {
365 parser->m_mediaQuery = parser->sinkFloatingMediaQuery($4); 366 parser->m_mediaQuery = parser->sinkFloatingMediaQuery($3);
367 }
368 | WEBKIT_MEDIAQUERY_SYM maybe_space media_query error TOKEN_EOF {
369 parser->m_mediaQuery = parser->sinkFloatingMediaQuery(parser->createFlo atingMediaQuery(MediaQuery::Not, "all", parser->sinkFloatingMediaQueryExpList(pa rser->createFloatingMediaQueryExpList())));
370 }
371 | WEBKIT_MEDIAQUERY_SYM maybe_space error TOKEN_EOF {
372 parser->m_mediaQuery = parser->sinkFloatingMediaQuery(parser->createFlo atingMediaQuery(MediaQuery::Not, "all", parser->sinkFloatingMediaQueryExpList(pa rser->createFloatingMediaQueryExpList())));
366 } 373 }
367 ; 374 ;
368 375
369 internal_selector: 376 internal_selector:
370 INTERNAL_SELECTOR_SYM '{' maybe_space selector_list '}' { 377 INTERNAL_SELECTOR_SYM '{' maybe_space selector_list '}' {
371 if ($4) { 378 if ($4) {
372 if (parser->m_selectorListForParseSelector) 379 if (parser->m_selectorListForParseSelector)
373 parser->m_selectorListForParseSelector->adoptSelectorVector(*$4) ; 380 parser->m_selectorListForParseSelector->adoptSelectorVector(*$4) ;
374 } 381 }
375 } 382 }
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 maybe_media_value: 582 maybe_media_value:
576 /*empty*/ { 583 /*empty*/ {
577 $$ = 0; 584 $$ = 0;
578 } 585 }
579 | ':' maybe_space expr maybe_space { 586 | ':' maybe_space expr maybe_space {
580 $$ = $3; 587 $$ = $3;
581 } 588 }
582 ; 589 ;
583 590
584 media_query_exp: 591 media_query_exp:
585 maybe_media_restrictor maybe_space '(' maybe_space media_feature maybe_space maybe_media_value ')' maybe_space { 592 '(' maybe_space media_feature maybe_space maybe_media_value ')' maybe_space {
586 // If restrictor is specified, media query expression is invalid. 593 $3.lower();
587 // Create empty media query expression and continue parsing media query. 594 $$ = parser->createFloatingMediaQueryExp($3, $5);
588 if ($1 != MediaQuery::None)
589 $$ = parser->createFloatingMediaQueryExp("", 0);
590 else {
591 $5.lower();
592 $$ = parser->createFloatingMediaQueryExp($5, $7);
593 }
594 } 595 }
595 ; 596 ;
596 597
597 media_query_exp_list: 598 media_query_exp_list:
598 media_query_exp { 599 media_query_exp {
599 $$ = parser->createFloatingMediaQueryExpList(); 600 $$ = parser->createFloatingMediaQueryExpList();
600 $$->append(parser->sinkFloatingMediaQueryExp($1)); 601 $$->append(parser->sinkFloatingMediaQueryExp($1));
601 } 602 }
602 | media_query_exp_list maybe_space MEDIA_AND maybe_space media_query_exp { 603 | media_query_exp_list maybe_space MEDIA_AND maybe_space media_query_exp {
603 $$ = $1; 604 $$ = $1;
(...skipping 19 matching lines...) Expand all
623 } 624 }
624 | MEDIA_NOT { 625 | MEDIA_NOT {
625 $$ = MediaQuery::Not; 626 $$ = MediaQuery::Not;
626 } 627 }
627 ; 628 ;
628 629
629 media_query: 630 media_query:
630 media_query_exp_list { 631 media_query_exp_list {
631 $$ = parser->createFloatingMediaQuery(parser->sinkFloatingMediaQueryExpL ist($1)); 632 $$ = parser->createFloatingMediaQuery(parser->sinkFloatingMediaQueryExpL ist($1));
632 } 633 }
633 | 634 | maybe_media_restrictor maybe_space medium maybe_and_media_query_exp_list {
634 maybe_media_restrictor maybe_space medium maybe_and_media_query_exp_list {
635 $3.lower(); 635 $3.lower();
636 $$ = parser->createFloatingMediaQuery($1, $3, parser->sinkFloatingMediaQ ueryExpList($4)); 636 $$ = parser->createFloatingMediaQuery($1, $3, parser->sinkFloatingMediaQ ueryExpList($4));
637 } 637 }
638 | invalid_media_query maybe_space {
639 $$ = $1;
640 }
641 ;
642
643 invalid_media_query:
644 error ',' {
645 $$ = parser->recoverMediaQuery();
646 }
647 | error '{' {
648 $$ = parser->recoverMediaQuery();
649 }
650 | error ';' {
651 $$ = parser->recoverMediaQuery();
652 }
653 | error '}' {
654 $$ = parser->recoverMediaQuery();
655 }
638 ; 656 ;
639 657
640 maybe_media_list: 658 maybe_media_list:
641 /* empty */ { 659 /* empty */ {
642 $$ = parser->createMediaQuerySet(); 660 $$ = parser->createMediaQuerySet();
643 } 661 }
644 | media_list 662 | media_list
645 ; 663 ;
664
665 at_media_list_start:
666 /* empty */ {
667 parser->markMediaListStart();
668 }
669 ;
646 670
647 media_list: 671 media_list:
648 media_query { 672 at_media_list_start media_query {
649 $$ = parser->createMediaQuerySet(); 673 $$ = parser->createMediaQuerySet();
650 $$->addMediaQuery(parser->sinkFloatingMediaQuery($1)); 674 $$->addMediaQuery(parser->sinkFloatingMediaQuery($2));
651 parser->updateLastMediaLine($$); 675 parser->updateLastMediaLine($$);
652 } 676 }
653 | media_list ',' maybe_space media_query { 677 | media_list ',' maybe_space media_query {
654 $$ = $1; 678 $$ = $1;
655 if ($$) { 679 $$->addMediaQuery(parser->sinkFloatingMediaQuery($4));
656 $$->addMediaQuery(parser->sinkFloatingMediaQuery($4)); 680 parser->updateLastMediaLine($$);
657 parser->updateLastMediaLine($$);
658 }
659 } 681 }
660 | media_list error { 682 | media_list invalid_media_query maybe_space {
661 $$ = 0; 683 $$->replaceLastMediaQuery(parser->sinkFloatingMediaQuery($2));
662 } 684 }
663 ; 685 ;
664 686
665 at_rule_body_start: 687 at_rule_body_start:
666 /* empty */ { 688 /* empty */ {
667 parser->startRuleBody(); 689 parser->startRuleBody();
668 } 690 }
669 ; 691 ;
670 692
671 before_media_rule: 693 before_media_rule:
672 /* empty */ { 694 /* empty */ {
673 parser->startRuleHeader(CSSRuleSourceData::MEDIA_RULE); 695 parser->startRuleHeader(CSSRuleSourceData::MEDIA_RULE);
674 } 696 }
675 ; 697 ;
676 698
677 at_rule_header_end_maybe_space: 699 at_rule_header_end_maybe_space:
678 maybe_space { 700 maybe_space {
679 parser->endRuleHeader(); 701 parser->endRuleHeader();
680 } 702 }
681 ; 703 ;
682 704
683 media: 705 media:
684 before_media_rule MEDIA_SYM maybe_space media_list at_rule_header_end '{' at _rule_body_start maybe_space block_rule_list save_block { 706 before_media_rule MEDIA_SYM maybe_space media_list at_rule_header_end '{' at _rule_body_start maybe_space block_rule_list save_block {
685 $$ = parser->createMediaRule($4, $9); 707 $$ = parser->createMediaRule($4, $9);
686 } 708 }
687 | before_media_rule MEDIA_SYM at_rule_header_end_maybe_space '{' at_rule_bod y_start maybe_space block_rule_list save_block { 709 | before_media_rule MEDIA_SYM at_rule_header_end_maybe_space '{' at_rule_bod y_start maybe_space block_rule_list save_block {
688 $$ = parser->createMediaRule(0, $7); 710 $$ = parser->createMediaRule(0, $7);
689 } 711 }
690 | before_media_rule MEDIA_SYM at_rule_header_end_maybe_space ';' { 712 | before_media_rule MEDIA_SYM maybe_space media_list at_rule_header_end ';' {
691 $$ = 0; 713 $$ = 0;
692 parser->endRuleBody(true); 714 parser->endRuleBody(true);
693 } 715 }
716 | before_media_rule MEDIA_SYM maybe_space media_list at_rule_header_end '}' {
717 $$ = 0;
718 parser->endRuleBody(true);
719 }
694 ; 720 ;
695 721
696 medium: 722 medium:
697 IDENT maybe_space { 723 IDENT maybe_space {
698 $$ = $1; 724 $$ = $1;
699 } 725 }
700 ; 726 ;
701 727
702 supports: 728 supports:
703 before_supports_rule SUPPORTS_SYM maybe_space supports_condition at_supports _rule_header_end '{' at_rule_body_start maybe_space block_rule_list save_block { 729 before_supports_rule SUPPORTS_SYM maybe_space supports_condition at_supports _rule_header_end '{' at_rule_body_start maybe_space block_rule_list save_block {
(...skipping 1306 matching lines...) Expand 10 before | Expand all | Expand 10 after
2010 } 2036 }
2011 ; 2037 ;
2012 2038
2013 error_location: { 2039 error_location: {
2014 $$ = parser->currentLocation(); 2040 $$ = parser->currentLocation();
2015 } 2041 }
2016 ; 2042 ;
2017 2043
2018 %% 2044 %%
2019 2045
OLDNEW
« no previous file with comments | « LayoutTests/fast/media/mq-js-stylesheet-media-02-expected.html ('k') | Source/core/css/CSSParser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698