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

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

Issue 14620012: Improved parse error handling for CSSMQ. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@query-selector-performance
Patch Set: Fixed review issues. Created 7 years, 6 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 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public 9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 case VAR_DEFINITION: 80 case VAR_DEFINITION:
81 case UNICODERANGE: 81 case UNICODERANGE:
82 return true; 82 return true;
83 default: 83 default:
84 return false; 84 return false;
85 } 85 }
86 } 86 }
87 87
88 %} 88 %}
89 89
90 %expect 11 90 %expect 3
91 91
92 %nonassoc LOWEST_PREC 92 %nonassoc LOWEST_PREC
93 93
94 %left UNIMPORTANT_TOK 94 %left UNIMPORTANT_TOK
95 95
96 %token WHITESPACE SGML_CD 96 %token WHITESPACE SGML_CD
97 %token TOKEN_EOF 0 97 %token TOKEN_EOF 0
98 98
99 %token INCLUDES 99 %token INCLUDES
100 %token DASHMATCH 100 %token DASHMATCH
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 241
242 %type <string> maybe_ns_prefix 242 %type <string> maybe_ns_prefix
243 243
244 %type <string> namespace_selector 244 %type <string> namespace_selector
245 245
246 %type <string> string_or_uri 246 %type <string> string_or_uri
247 %type <string> ident_or_string 247 %type <string> ident_or_string
248 %type <string> medium 248 %type <string> medium
249 %type <marginBox> margin_sym 249 %type <marginBox> margin_sym
250 250
251 %type <string> media_feature
252 %type <mediaList> media_list 251 %type <mediaList> media_list
253 %type <mediaList> maybe_media_list 252 %type <mediaList> maybe_media_list
253 %type <mediaList> mq_list
254 %type <mediaQuery> media_query 254 %type <mediaQuery> media_query
255 %type <mediaQuery> media_query_or_null
255 %type <mediaQueryRestrictor> maybe_media_restrictor 256 %type <mediaQueryRestrictor> maybe_media_restrictor
256 %type <valueList> maybe_media_value 257 %type <valueList> maybe_media_value
257 %type <mediaQueryExp> media_query_exp 258 %type <mediaQueryExp> media_query_exp
258 %type <mediaQueryExpList> media_query_exp_list 259 %type <mediaQueryExpList> media_query_exp_list
259 %type <mediaQueryExpList> maybe_and_media_query_exp_list 260 %type <mediaQueryExpList> maybe_and_media_query_exp_list
260 261
261 %type <boolean> supports_condition 262 %type <boolean> supports_condition
262 %type <boolean> supports_condition_in_parens 263 %type <boolean> supports_condition_in_parens
263 %type <boolean> supports_negation 264 %type <boolean> supports_negation
264 %type <boolean> supports_conjunction 265 %type <boolean> supports_conjunction
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
357 parser->m_valueList = parser->sinkFloatingValueList($4); 358 parser->m_valueList = parser->sinkFloatingValueList($4);
358 int oldParsedProperties = parser->m_parsedProperties.size(); 359 int oldParsedProperties = parser->m_parsedProperties.size();
359 if (!parser->parseValue(parser->m_id, parser->m_important)) 360 if (!parser->parseValue(parser->m_id, parser->m_important))
360 parser->rollbackLastProperties(parser->m_parsedProperties.size() - oldParsedProperties); 361 parser->rollbackLastProperties(parser->m_parsedProperties.size() - oldParsedProperties);
361 parser->m_valueList = nullptr; 362 parser->m_valueList = nullptr;
362 } 363 }
363 } 364 }
364 ; 365 ;
365 366
366 webkit_mediaquery: 367 webkit_mediaquery:
367 WEBKIT_MEDIAQUERY_SYM WHITESPACE maybe_space media_query '}' { 368 WEBKIT_MEDIAQUERY_SYM maybe_space media_query_or_null '}' {
368 parser->m_mediaQuery = parser->sinkFloatingMediaQuery($4); 369 parser->m_mediaQuery = parser->sinkFloatingMediaQuery($3);
369 } 370 }
370 ; 371 ;
371 372
372 internal_selector: 373 internal_selector:
373 INTERNAL_SELECTOR_SYM '{' maybe_space selector_list '}' { 374 INTERNAL_SELECTOR_SYM '{' maybe_space selector_list '}' {
374 if ($4) { 375 if ($4) {
375 if (parser->m_selectorListForParseSelector) 376 if (parser->m_selectorListForParseSelector)
376 parser->m_selectorListForParseSelector->adoptSelectorVector(*$4) ; 377 parser->m_selectorListForParseSelector->adoptSelectorVector(*$4) ;
377 } 378 }
378 } 379 }
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
567 maybe_ns_prefix: 568 maybe_ns_prefix:
568 /* empty */ { $$.clear(); } 569 /* empty */ { $$.clear(); }
569 | IDENT maybe_space { $$ = $1; } 570 | IDENT maybe_space { $$ = $1; }
570 ; 571 ;
571 572
572 string_or_uri: 573 string_or_uri:
573 STRING 574 STRING
574 | URI 575 | URI
575 ; 576 ;
576 577
577 media_feature:
578 IDENT maybe_space {
579 $$ = $1;
580 }
581 ;
582
583 maybe_media_value: 578 maybe_media_value:
584 /*empty*/ { 579 /*empty*/ {
585 $$ = 0; 580 $$ = 0;
586 } 581 }
587 | ':' maybe_space expr { 582 | ':' maybe_space expr {
588 $$ = $3; 583 $$ = $3;
589 } 584 }
590 ; 585 ;
591 586
592 media_query_exp: 587 media_query_exp:
593 maybe_media_restrictor maybe_space '(' maybe_space media_feature maybe_space maybe_media_value ')' maybe_space { 588 '(' maybe_space IDENT maybe_space maybe_media_value closing_parenthesis mayb e_space {
594 // If restrictor is specified, media query expression is invalid. 589 parser->tokenToLowerCase($3);
595 // Create empty media query expression and continue parsing media query. 590 $$ = parser->createFloatingMediaQueryExp($3, $5);
596 if ($1 != MediaQuery::None)
597 $$ = parser->createFloatingMediaQueryExp("", 0);
598 else {
599 parser->tokenToLowerCase($5);
600 $$ = parser->createFloatingMediaQueryExp($5, $7);
601 }
602 } 591 }
603 | maybe_media_restrictor maybe_space '(' error error_recovery ')' { 592 | '(' error error_recovery closing_parenthesis {
604 YYERROR; 593 YYERROR;
605 } 594 }
606 ; 595 ;
607 596
608 media_query_exp_list: 597 media_query_exp_list:
609 media_query_exp { 598 media_query_exp {
610 $$ = parser->createFloatingMediaQueryExpList(); 599 $$ = parser->createFloatingMediaQueryExpList();
611 $$->append(parser->sinkFloatingMediaQueryExp($1)); 600 $$->append(parser->sinkFloatingMediaQueryExp($1));
612 } 601 }
613 | media_query_exp_list maybe_space MEDIA_AND maybe_space media_query_exp { 602 | media_query_exp_list MEDIA_AND maybe_space media_query_exp {
614 $$ = $1; 603 $$ = $1;
615 $$->append(parser->sinkFloatingMediaQueryExp($5)); 604 $$->append(parser->sinkFloatingMediaQueryExp($4));
616 } 605 }
617 ; 606 ;
618 607
619 maybe_and_media_query_exp_list: 608 maybe_and_media_query_exp_list:
620 /*empty*/ { 609 /*empty*/ {
621 $$ = parser->createFloatingMediaQueryExpList(); 610 $$ = parser->createFloatingMediaQueryExpList();
622 } 611 }
623 | MEDIA_AND maybe_space media_query_exp_list { 612 | MEDIA_AND maybe_space media_query_exp_list {
624 $$ = $3; 613 $$ = $3;
625 } 614 }
626 ; 615 ;
627 616
628 maybe_media_restrictor: 617 maybe_media_restrictor:
629 /*empty*/ { 618 /*empty*/ {
630 $$ = MediaQuery::None; 619 $$ = MediaQuery::None;
631 } 620 }
632 | MEDIA_ONLY { 621 | MEDIA_ONLY maybe_space {
633 $$ = MediaQuery::Only; 622 $$ = MediaQuery::Only;
634 } 623 }
635 | MEDIA_NOT { 624 | MEDIA_NOT maybe_space {
636 $$ = MediaQuery::Not; 625 $$ = MediaQuery::Not;
637 } 626 }
638 ; 627 ;
639 628
640 media_query: 629 media_query_or_null:
SeRya 2013/06/03 11:31:27 My suggestion is: valid_media_query: ...; me
641 media_query_exp_list { 630 media_query_exp_list {
642 $$ = parser->createFloatingMediaQuery(parser->sinkFloatingMediaQueryExpL ist($1)); 631 $$ = parser->createFloatingMediaQuery(parser->sinkFloatingMediaQueryExpL ist($1));
643 } 632 }
644 | 633 | maybe_media_restrictor medium maybe_and_media_query_exp_list {
645 maybe_media_restrictor maybe_space medium maybe_and_media_query_exp_list { 634 parser->tokenToLowerCase($2);
646 parser->tokenToLowerCase($3); 635 $$ = parser->createFloatingMediaQuery($1, $2, parser->sinkFloatingMediaQ ueryExpList($3));
647 $$ = parser->createFloatingMediaQuery($1, $3, parser->sinkFloatingMediaQ ueryExpList($4)); 636 }
637 | error rule_error_recovery {
638 $$ = 0;
639 }
640 ;
641
642 media_query:
643 media_query_or_null {
644 $$ = $1;
645 if (!$$)
646 $$ = parser->createFloatingNotAllQuery();
648 } 647 }
649 ; 648 ;
650 649
651 maybe_media_list: 650 maybe_media_list:
652 /* empty */ { 651 /* empty */ {
653 $$ = parser->createMediaQuerySet(); 652 $$ = parser->createMediaQuerySet();
654 } 653 }
655 | media_list 654 | media_list
656 ; 655 ;
657 656
658 media_list: 657 media_list:
659 media_query { 658 media_query {
660 $$ = parser->createMediaQuerySet(); 659 $$ = parser->createMediaQuerySet();
661 $$->addMediaQuery(parser->sinkFloatingMediaQuery($1)); 660 $$->addMediaQuery(parser->sinkFloatingMediaQuery($1));
662 parser->updateLastMediaLine($$); 661 parser->updateLastMediaLine($$);
663 } 662 }
664 | media_list ',' maybe_space media_query { 663 | mq_list media_query {
665 $$ = $1; 664 $$ = $1;
666 if ($$) { 665 $$->addMediaQuery(parser->sinkFloatingMediaQuery($2));
667 $$->addMediaQuery(parser->sinkFloatingMediaQuery($4)); 666 parser->updateLastMediaLine($$);
668 parser->updateLastMediaLine($$);
669 }
670 } 667 }
671 | media_list error { 668 | mq_list {
672 $$ = 0; 669 $$ = $1;
670 $$->addMediaQuery(parser->sinkFloatingMediaQuery(parser->createFloatingN otAllQuery()));
671 parser->updateLastMediaLine($$);
673 } 672 }
674 ; 673 ;
675 674
675 mq_list:
676 media_query ',' maybe_space {
677 $$ = parser->createMediaQuerySet();
678 $$->addMediaQuery(parser->sinkFloatingMediaQuery($1));
679 }
680 | mq_list media_query ',' maybe_space {
681 $$ = $1;
682 $$->addMediaQuery(parser->sinkFloatingMediaQuery($2));
683 }
684 ;
685
676 at_rule_body_start: 686 at_rule_body_start:
677 /* empty */ { 687 /* empty */ {
678 parser->startRuleBody(); 688 parser->startRuleBody();
679 } 689 }
680 ; 690 ;
681 691
682 before_media_rule: 692 before_media_rule:
683 /* empty */ { 693 /* empty */ {
684 parser->startRuleHeader(CSSRuleSourceData::MEDIA_RULE); 694 parser->startRuleHeader(CSSRuleSourceData::MEDIA_RULE);
685 } 695 }
686 ; 696 ;
687 697
688 at_rule_header_end_maybe_space: 698 at_rule_header_end_maybe_space:
689 maybe_space { 699 maybe_space {
690 parser->endRuleHeader(); 700 parser->endRuleHeader();
691 } 701 }
692 ; 702 ;
693 703
694 media: 704 media:
695 before_media_rule MEDIA_SYM maybe_space media_list at_rule_header_end '{' at _rule_body_start maybe_space block_rule_body closing_brace { 705 before_media_rule MEDIA_SYM maybe_space media_list at_rule_header_end '{' at _rule_body_start maybe_space block_rule_body closing_brace {
696 $$ = parser->createMediaRule($4, $9); 706 $$ = parser->createMediaRule($4, $9);
697 } 707 }
698 | before_media_rule MEDIA_SYM at_rule_header_end_maybe_space '{' at_rule_bod y_start maybe_space block_rule_body closing_brace { 708 | before_media_rule MEDIA_SYM at_rule_header_end_maybe_space '{' at_rule_bod y_start maybe_space block_rule_body closing_brace {
699 $$ = parser->createMediaRule(0, $7); 709 $$ = parser->createMediaRule(0, $7);
700 } 710 }
711 | before_media_rule MEDIA_SYM maybe_space media_list ';' {
712 $$ = 0;
713 parser->endRuleBody(true);
714 }
701 | before_media_rule MEDIA_SYM at_rule_recovery { 715 | before_media_rule MEDIA_SYM at_rule_recovery {
702 $$ = 0; 716 $$ = 0;
703 parser->endRuleBody(true); 717 parser->endRuleBody(true);
704 } 718 }
705 ; 719 ;
706 720
707 medium: 721 medium:
708 IDENT maybe_space { 722 IDENT maybe_space {
709 $$ = $1; 723 $$ = $1;
710 } 724 }
(...skipping 1278 matching lines...) Expand 10 before | Expand all | Expand 10 after
1989 2003
1990 rule_error_recovery: 2004 rule_error_recovery:
1991 /* empty */ 2005 /* empty */
1992 | rule_error_recovery error 2006 | rule_error_recovery error
1993 | rule_error_recovery invalid_square_brackets_block 2007 | rule_error_recovery invalid_square_brackets_block
1994 | rule_error_recovery invalid_parentheses_block 2008 | rule_error_recovery invalid_parentheses_block
1995 ; 2009 ;
1996 2010
1997 %% 2011 %%
1998 2012
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698