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

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: Let expected result for "and(" be the current implementation. 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
« no previous file with comments | « LayoutTests/fast/media/mq-append-delete-expected.txt ('k') | Source/core/css/CSSParser.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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> valid_media_query
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 valid_media_query '}' {
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 valid_media_query:
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 ;
638
639 media_query:
640 valid_media_query
641 | error rule_error_recovery {
642 $$ = parser->createFloatingNotAllQuery();
648 } 643 }
649 ; 644 ;
650 645
651 maybe_media_list: 646 maybe_media_list:
652 /* empty */ { 647 /* empty */ {
653 $$ = parser->createMediaQuerySet(); 648 $$ = parser->createMediaQuerySet();
654 } 649 }
655 | media_list 650 | media_list
656 ; 651 ;
657 652
658 media_list: 653 media_list:
659 media_query { 654 media_query {
660 $$ = parser->createMediaQuerySet(); 655 $$ = parser->createMediaQuerySet();
661 $$->addMediaQuery(parser->sinkFloatingMediaQuery($1)); 656 $$->addMediaQuery(parser->sinkFloatingMediaQuery($1));
662 parser->updateLastMediaLine($$); 657 parser->updateLastMediaLine($$);
663 } 658 }
664 | media_list ',' maybe_space media_query { 659 | mq_list media_query {
665 $$ = $1; 660 $$ = $1;
666 if ($$) { 661 $$->addMediaQuery(parser->sinkFloatingMediaQuery($2));
667 $$->addMediaQuery(parser->sinkFloatingMediaQuery($4)); 662 parser->updateLastMediaLine($$);
668 parser->updateLastMediaLine($$);
669 }
670 } 663 }
671 | media_list error { 664 | mq_list {
672 $$ = 0; 665 $$ = $1;
666 $$->addMediaQuery(parser->sinkFloatingMediaQuery(parser->createFloatingN otAllQuery()));
667 parser->updateLastMediaLine($$);
673 } 668 }
674 ; 669 ;
675 670
671 mq_list:
672 media_query ',' maybe_space {
673 $$ = parser->createMediaQuerySet();
674 $$->addMediaQuery(parser->sinkFloatingMediaQuery($1));
675 }
676 | mq_list media_query ',' maybe_space {
677 $$ = $1;
678 $$->addMediaQuery(parser->sinkFloatingMediaQuery($2));
679 }
680 ;
681
676 at_rule_body_start: 682 at_rule_body_start:
677 /* empty */ { 683 /* empty */ {
678 parser->startRuleBody(); 684 parser->startRuleBody();
679 } 685 }
680 ; 686 ;
681 687
682 before_media_rule: 688 before_media_rule:
683 /* empty */ { 689 /* empty */ {
684 parser->startRuleHeader(CSSRuleSourceData::MEDIA_RULE); 690 parser->startRuleHeader(CSSRuleSourceData::MEDIA_RULE);
685 } 691 }
686 ; 692 ;
687 693
688 at_rule_header_end_maybe_space: 694 at_rule_header_end_maybe_space:
689 maybe_space { 695 maybe_space {
690 parser->endRuleHeader(); 696 parser->endRuleHeader();
691 } 697 }
692 ; 698 ;
693 699
694 media: 700 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 { 701 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); 702 $$ = parser->createMediaRule($4, $9);
697 } 703 }
698 | before_media_rule MEDIA_SYM at_rule_header_end_maybe_space '{' at_rule_bod y_start maybe_space block_rule_body closing_brace { 704 | 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); 705 $$ = parser->createMediaRule(0, $7);
700 } 706 }
707 | before_media_rule MEDIA_SYM maybe_space media_list ';' {
708 $$ = 0;
709 parser->endRuleBody(true);
710 }
701 | before_media_rule MEDIA_SYM at_rule_recovery { 711 | before_media_rule MEDIA_SYM at_rule_recovery {
702 $$ = 0; 712 $$ = 0;
703 parser->endRuleBody(true); 713 parser->endRuleBody(true);
704 } 714 }
705 ; 715 ;
706 716
707 medium: 717 medium:
708 IDENT maybe_space { 718 IDENT maybe_space {
709 $$ = $1; 719 $$ = $1;
710 } 720 }
(...skipping 1281 matching lines...) Expand 10 before | Expand all | Expand 10 after
1992 2002
1993 rule_error_recovery: 2003 rule_error_recovery:
1994 /* empty */ 2004 /* empty */
1995 | rule_error_recovery error 2005 | rule_error_recovery error
1996 | rule_error_recovery invalid_square_brackets_block 2006 | rule_error_recovery invalid_square_brackets_block
1997 | rule_error_recovery invalid_parentheses_block 2007 | rule_error_recovery invalid_parentheses_block
1998 ; 2008 ;
1999 2009
2000 %% 2010 %%
2001 2011
OLDNEW
« no previous file with comments | « LayoutTests/fast/media/mq-append-delete-expected.txt ('k') | Source/core/css/CSSParser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698