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

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

Issue 17129003: Auto-closing at unexpected EOF for all entry points. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Rebased Patch Set 2 onto master 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 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 %token HOST_SYM 132 %token HOST_SYM
133 %token CHARSET_SYM 133 %token CHARSET_SYM
134 %token NAMESPACE_SYM 134 %token NAMESPACE_SYM
135 %token VARFUNCTION 135 %token VARFUNCTION
136 %token VIEWPORT_RULE_SYM 136 %token VIEWPORT_RULE_SYM
137 %token INTERNAL_DECLS_SYM 137 %token INTERNAL_DECLS_SYM
138 %token INTERNAL_MEDIALIST_SYM 138 %token INTERNAL_MEDIALIST_SYM
139 %token INTERNAL_RULE_SYM 139 %token INTERNAL_RULE_SYM
140 %token INTERNAL_SELECTOR_SYM 140 %token INTERNAL_SELECTOR_SYM
141 %token INTERNAL_VALUE_SYM 141 %token INTERNAL_VALUE_SYM
142 %token WEBKIT_KEYFRAME_RULE_SYM 142 %token INTERNAL_KEYFRAME_RULE_SYM
143 %token INTERNAL_SUPPORTS_CONDITION_SYM
143 %token WEBKIT_KEYFRAMES_SYM 144 %token WEBKIT_KEYFRAMES_SYM
144 %token WEBKIT_REGION_RULE_SYM 145 %token WEBKIT_REGION_RULE_SYM
145 %token WEBKIT_SUPPORTS_CONDITION_SYM
146 %token WEBKIT_FILTER_RULE_SYM 146 %token WEBKIT_FILTER_RULE_SYM
147 %token <marginBox> TOPLEFTCORNER_SYM 147 %token <marginBox> TOPLEFTCORNER_SYM
148 %token <marginBox> TOPLEFT_SYM 148 %token <marginBox> TOPLEFT_SYM
149 %token <marginBox> TOPCENTER_SYM 149 %token <marginBox> TOPCENTER_SYM
150 %token <marginBox> TOPRIGHT_SYM 150 %token <marginBox> TOPRIGHT_SYM
151 %token <marginBox> TOPRIGHTCORNER_SYM 151 %token <marginBox> TOPRIGHTCORNER_SYM
152 %token <marginBox> BOTTOMLEFTCORNER_SYM 152 %token <marginBox> BOTTOMLEFTCORNER_SYM
153 %token <marginBox> BOTTOMLEFT_SYM 153 %token <marginBox> BOTTOMLEFT_SYM
154 %token <marginBox> BOTTOMCENTER_SYM 154 %token <marginBox> BOTTOMCENTER_SYM
155 %token <marginBox> BOTTOMRIGHT_SYM 155 %token <marginBox> BOTTOMRIGHT_SYM
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
321 321
322 %type <string> element_name 322 %type <string> element_name
323 %type <string> attr_name 323 %type <string> attr_name
324 324
325 %type <location> error_location 325 %type <location> error_location
326 326
327 %% 327 %%
328 328
329 stylesheet: 329 stylesheet:
330 maybe_charset maybe_sgml rule_list 330 maybe_charset maybe_sgml rule_list
331 | internal_decls maybe_space 331 | internal_decls
332 | internal_rule maybe_space 332 | internal_rule
333 | internal_selector maybe_space 333 | internal_selector
334 | internal_value maybe_space 334 | internal_value
335 | internal_medialist 335 | internal_medialist
336 | webkit_keyframe_rule maybe_space 336 | internal_keyframe_rule
337 | webkit_supports_condition maybe_space 337 | internal_supports_condition
338 ; 338 ;
339 339
340 internal_rule: 340 internal_rule:
341 INTERNAL_RULE_SYM '{' maybe_space valid_rule maybe_space '}' { 341 INTERNAL_RULE_SYM maybe_space valid_rule maybe_space TOKEN_EOF {
342 parser->m_rule = $4; 342 parser->m_rule = $3;
343 } 343 }
344 ; 344 ;
345 345
346 webkit_keyframe_rule: 346 internal_keyframe_rule:
347 WEBKIT_KEYFRAME_RULE_SYM '{' maybe_space keyframe_rule maybe_space '}' { 347 INTERNAL_KEYFRAME_RULE_SYM maybe_space keyframe_rule maybe_space TOKEN_EOF {
348 parser->m_keyframe = $4; 348 parser->m_keyframe = $3;
349 } 349 }
350 ; 350 ;
351 351
352 internal_decls: 352 internal_decls:
353 INTERNAL_DECLS_SYM '{' maybe_space_before_declaration declaration_list '}' { 353 INTERNAL_DECLS_SYM maybe_space_before_declaration declaration_list TOKEN_EOF {
354 /* can be empty */ 354 /* can be empty */
355 } 355 }
356 ; 356 ;
357 357
358 internal_value: 358 internal_value:
359 INTERNAL_VALUE_SYM '{' maybe_space expr '}' { 359 INTERNAL_VALUE_SYM maybe_space expr TOKEN_EOF {
360 parser->m_valueList = parser->sinkFloatingValueList($4); 360 parser->m_valueList = parser->sinkFloatingValueList($3);
361 int oldParsedProperties = parser->m_parsedProperties.size(); 361 int oldParsedProperties = parser->m_parsedProperties.size();
362 if (!parser->parseValue(parser->m_id, parser->m_important)) 362 if (!parser->parseValue(parser->m_id, parser->m_important))
363 parser->rollbackLastProperties(parser->m_parsedProperties.size() - o ldParsedProperties); 363 parser->rollbackLastProperties(parser->m_parsedProperties.size() - o ldParsedProperties);
364 parser->m_valueList = nullptr; 364 parser->m_valueList = nullptr;
365 } 365 }
366 ; 366 ;
367 367
368 internal_medialist: 368 internal_medialist:
369 INTERNAL_MEDIALIST_SYM maybe_space maybe_media_list TOKEN_EOF { 369 INTERNAL_MEDIALIST_SYM maybe_space maybe_media_list TOKEN_EOF {
370 parser->m_mediaList = $3; 370 parser->m_mediaList = $3;
371 } 371 }
372 ; 372 ;
373 373
374 internal_selector: 374 internal_selector:
375 INTERNAL_SELECTOR_SYM '{' maybe_space selector_list '}' { 375 INTERNAL_SELECTOR_SYM maybe_space selector_list TOKEN_EOF {
376 if (parser->m_selectorListForParseSelector) 376 if (parser->m_selectorListForParseSelector)
377 parser->m_selectorListForParseSelector->adoptSelectorVector(*$4); 377 parser->m_selectorListForParseSelector->adoptSelectorVector(*$3);
378 } 378 }
379 ; 379 ;
380 380
381 webkit_supports_condition: 381 internal_supports_condition:
382 WEBKIT_SUPPORTS_CONDITION_SYM '{' maybe_space supports_condition '}' { 382 INTERNAL_SUPPORTS_CONDITION_SYM maybe_space supports_condition TOKEN_EOF {
383 parser->m_supportsCondition = $4; 383 parser->m_supportsCondition = $3;
384 } 384 }
385 ; 385 ;
386 386
387 maybe_space: 387 maybe_space:
388 /* empty */ %prec UNIMPORTANT_TOK 388 /* empty */ %prec UNIMPORTANT_TOK
389 | maybe_space WHITESPACE 389 | maybe_space WHITESPACE
390 ; 390 ;
391 391
392 maybe_sgml: 392 maybe_sgml:
393 /* empty */ 393 /* empty */
394 | maybe_sgml SGML_CD 394 | maybe_sgml SGML_CD
395 | maybe_sgml WHITESPACE 395 | maybe_sgml WHITESPACE
396 ; 396 ;
397 397
398 maybe_charset: 398 maybe_charset:
399 /* empty */ 399 /* empty */
400 | charset 400 | charset
401 ; 401 ;
402 402
403 closing_brace: 403 closing_brace:
404 '}' 404 '}'
405 | %prec LOWEST_PREC TOKEN_EOF 405 | %prec LOWEST_PREC TOKEN_EOF
406 ; 406 ;
407 407
408 closing_parenthesis: 408 closing_parenthesis:
409 ')' 409 ')'
410 | %prec LOWEST_PREC TOKEN_EOF 410 | %prec LOWEST_PREC TOKEN_EOF
411 ; 411 ;
412 412
413 closing_square_bracket:
414 ']'
415 | %prec LOWEST_PREC TOKEN_EOF
416 ;
417
418 semi_or_eof:
419 ';'
420 | TOKEN_EOF
421 ;
422
413 charset: 423 charset:
414 CHARSET_SYM maybe_space STRING maybe_space ';' { 424 CHARSET_SYM maybe_space STRING maybe_space semi_or_eof {
415 if (parser->m_styleSheet) 425 if (parser->m_styleSheet)
416 parser->m_styleSheet->parserSetEncodingFromCharsetRule($3); 426 parser->m_styleSheet->parserSetEncodingFromCharsetRule($3);
417 parser->startEndUnknownRule(); 427 parser->startEndUnknownRule();
418 $$ = 0; 428 $$ = 0;
419 } 429 }
420 | CHARSET_SYM at_rule_recovery { 430 | CHARSET_SYM at_rule_recovery {
421 $$ = 0; 431 $$ = 0;
422 } 432 }
423 ; 433 ;
424 434
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
516 } 526 }
517 ; 527 ;
518 528
519 before_import_rule: 529 before_import_rule:
520 /* empty */ { 530 /* empty */ {
521 parser->startRuleHeader(CSSRuleSourceData::IMPORT_RULE); 531 parser->startRuleHeader(CSSRuleSourceData::IMPORT_RULE);
522 } 532 }
523 ; 533 ;
524 534
525 import: 535 import:
526 before_import_rule IMPORT_SYM at_import_header_end_maybe_space string_or_uri maybe_space maybe_media_list ';' { 536 before_import_rule IMPORT_SYM at_import_header_end_maybe_space string_or_uri maybe_space maybe_media_list semi_or_eof {
527 $$ = parser->createImportRule($4, $6);
528 }
529 | before_import_rule IMPORT_SYM at_import_header_end_maybe_space string_or_uri maybe_space maybe_media_list TOKEN_EOF {
530 $$ = parser->createImportRule($4, $6); 537 $$ = parser->createImportRule($4, $6);
531 } 538 }
532 | before_import_rule IMPORT_SYM at_import_header_end_maybe_space string_or_uri maybe_space maybe_media_list invalid_block { 539 | before_import_rule IMPORT_SYM at_import_header_end_maybe_space string_or_uri maybe_space maybe_media_list invalid_block {
533 $$ = 0; 540 $$ = 0;
534 parser->endRuleBody(true); 541 parser->endRuleBody(true);
535 } 542 }
536 | before_import_rule IMPORT_SYM at_rule_recovery { 543 | before_import_rule IMPORT_SYM at_rule_recovery {
537 $$ = 0; 544 $$ = 0;
538 parser->endRuleBody(true); 545 parser->endRuleBody(true);
539 } 546 }
540 ; 547 ;
541 548
542 before_namespace_rule: 549 before_namespace_rule:
543 /* empty */ { 550 /* empty */ {
544 // FIXME: There should be parser->startRuleHeader. 551 // FIXME: There should be parser->startRuleHeader.
545 } 552 }
546 ; 553 ;
547 554
548 namespace: 555 namespace:
549 before_namespace_rule NAMESPACE_SYM maybe_space maybe_ns_prefix string_or_ur i maybe_space ';' { 556 before_namespace_rule NAMESPACE_SYM maybe_space maybe_ns_prefix string_or_ur i maybe_space semi_or_eof {
550 parser->addNamespace($4, $5); 557 parser->addNamespace($4, $5);
551 $$ = 0; 558 $$ = 0;
552 } 559 }
553 | before_namespace_rule NAMESPACE_SYM maybe_space maybe_ns_prefix string_or_ur i maybe_space invalid_block { 560 | before_namespace_rule NAMESPACE_SYM maybe_space maybe_ns_prefix string_or_ur i maybe_space invalid_block {
554 $$ = 0; 561 $$ = 0;
555 } 562 }
556 | before_namespace_rule NAMESPACE_SYM at_rule_recovery { 563 | before_namespace_rule NAMESPACE_SYM at_rule_recovery {
557 $$ = 0; 564 $$ = 0;
558 } 565 }
559 ; 566 ;
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 } 703 }
697 ; 704 ;
698 705
699 media: 706 media:
700 before_media_rule MEDIA_SYM maybe_space media_list at_rule_header_end '{' at _rule_body_start maybe_space block_rule_body closing_brace { 707 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 $$ = parser->createMediaRule($4, $9); 708 $$ = parser->createMediaRule($4, $9);
702 } 709 }
703 | before_media_rule MEDIA_SYM at_rule_header_end_maybe_space '{' at_rule_bod y_start maybe_space block_rule_body closing_brace { 710 | before_media_rule MEDIA_SYM at_rule_header_end_maybe_space '{' at_rule_bod y_start maybe_space block_rule_body closing_brace {
704 $$ = parser->createMediaRule(0, $7); 711 $$ = parser->createMediaRule(0, $7);
705 } 712 }
706 | before_media_rule MEDIA_SYM maybe_space media_list ';' { 713 | before_media_rule MEDIA_SYM maybe_space media_list semi_or_eof {
707 $$ = 0; 714 $$ = 0;
708 parser->endRuleBody(true); 715 parser->endRuleBody(true);
709 } 716 }
710 | before_media_rule MEDIA_SYM at_rule_recovery { 717 | before_media_rule MEDIA_SYM at_rule_recovery {
711 $$ = 0; 718 $$ = 0;
712 parser->endRuleBody(true); 719 parser->endRuleBody(true);
713 } 720 }
714 ; 721 ;
715 722
716 medium: 723 medium:
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 supports_disjunction: 777 supports_disjunction:
771 supports_condition_in_parens SUPPORTS_OR maybe_space supports_condition_in_p arens { 778 supports_condition_in_parens SUPPORTS_OR maybe_space supports_condition_in_p arens {
772 $$ = $1 || $4; 779 $$ = $1 || $4;
773 } 780 }
774 | supports_disjunction SUPPORTS_OR maybe_space supports_condition_in_parens { 781 | supports_disjunction SUPPORTS_OR maybe_space supports_condition_in_parens {
775 $$ = $1 || $4; 782 $$ = $1 || $4;
776 } 783 }
777 ; 784 ;
778 785
779 supports_condition_in_parens: 786 supports_condition_in_parens:
780 '(' maybe_space supports_condition ')' maybe_space { 787 '(' maybe_space supports_condition closing_parenthesis maybe_space {
781 $$ = $3; 788 $$ = $3;
782 } 789 }
783 | supports_declaration_condition 790 | supports_declaration_condition
784 | '(' error error_location error_recovery ')' maybe_space { 791 | '(' error error_location error_recovery closing_parenthesis maybe_space {
785 parser->reportError($3, CSSParser::InvalidSupportsConditionError); 792 parser->reportError($3, CSSParser::InvalidSupportsConditionError);
786 $$ = false; 793 $$ = false;
787 } 794 }
788 ; 795 ;
789 796
790 supports_declaration_condition: 797 supports_declaration_condition:
791 '(' maybe_space IDENT maybe_space ':' maybe_space expr prio ')' maybe_space { 798 '(' maybe_space IDENT maybe_space ':' maybe_space expr prio closing_parenthe sis maybe_space {
792 $$ = false; 799 $$ = false;
793 CSSPropertyID id = cssPropertyID($3); 800 CSSPropertyID id = cssPropertyID($3);
794 if (id != CSSPropertyInvalid) { 801 if (id != CSSPropertyInvalid) {
795 parser->m_valueList = parser->sinkFloatingValueList($7); 802 parser->m_valueList = parser->sinkFloatingValueList($7);
796 int oldParsedProperties = parser->m_parsedProperties.size(); 803 int oldParsedProperties = parser->m_parsedProperties.size();
797 $$ = parser->parseValue(id, $8); 804 $$ = parser->parseValue(id, $8);
798 // We just need to know if the declaration is supported as it is wri tten. Rollback any additions. 805 // We just need to know if the declaration is supported as it is wri tten. Rollback any additions.
799 if ($$) 806 if ($$)
800 parser->rollbackLastProperties(parser->m_parsedProperties.size() - oldParsedProperties); 807 parser->rollbackLastProperties(parser->m_parsedProperties.size() - oldParsedProperties);
801 } 808 }
802 parser->m_valueList = nullptr; 809 parser->m_valueList = nullptr;
803 parser->endProperty($8, false); 810 parser->endProperty($8, false);
804 } 811 }
805 | '(' maybe_space IDENT maybe_space ':' maybe_space error error_recovery ')' maybe_space { 812 | '(' maybe_space IDENT maybe_space ':' maybe_space error error_recovery clo sing_parenthesis maybe_space {
806 $$ = false; 813 $$ = false;
807 parser->endProperty(false, false, CSSParser::GeneralError); 814 parser->endProperty(false, false, CSSParser::GeneralError);
808 } 815 }
809 ; 816 ;
810 817
811 before_keyframes_rule: 818 before_keyframes_rule:
812 /* empty */ { 819 /* empty */ {
813 parser->startRuleHeader(CSSRuleSourceData::KEYFRAMES_RULE); 820 parser->startRuleHeader(CSSRuleSourceData::KEYFRAMES_RULE);
814 } 821 }
815 ; 822 ;
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after
1296 1303
1297 attr_name: 1304 attr_name:
1298 IDENT maybe_space { 1305 IDENT maybe_space {
1299 if (parser->m_context.isHTMLDocument) 1306 if (parser->m_context.isHTMLDocument)
1300 parser->tokenToLowerCase($1); 1307 parser->tokenToLowerCase($1);
1301 $$ = $1; 1308 $$ = $1;
1302 } 1309 }
1303 ; 1310 ;
1304 1311
1305 attrib: 1312 attrib:
1306 '[' maybe_space attr_name ']' { 1313 '[' maybe_space attr_name closing_square_bracket {
1307 $$ = parser->createFloatingSelector(); 1314 $$ = parser->createFloatingSelector();
1308 $$->setAttribute(QualifiedName(nullAtom, $3, nullAtom)); 1315 $$->setAttribute(QualifiedName(nullAtom, $3, nullAtom));
1309 $$->setMatch(CSSSelector::Set); 1316 $$->setMatch(CSSSelector::Set);
1310 } 1317 }
1311 | '[' maybe_space attr_name match maybe_space ident_or_string maybe_space '] ' { 1318 | '[' maybe_space attr_name match maybe_space ident_or_string maybe_space cl osing_square_bracket {
1312 $$ = parser->createFloatingSelector(); 1319 $$ = parser->createFloatingSelector();
1313 $$->setAttribute(QualifiedName(nullAtom, $3, nullAtom)); 1320 $$->setAttribute(QualifiedName(nullAtom, $3, nullAtom));
1314 $$->setMatch((CSSSelector::Match)$4); 1321 $$->setMatch((CSSSelector::Match)$4);
1315 $$->setValue($6); 1322 $$->setValue($6);
1316 } 1323 }
1317 | '[' maybe_space namespace_selector attr_name ']' { 1324 | '[' maybe_space namespace_selector attr_name closing_square_bracket {
1318 $$ = parser->createFloatingSelector(); 1325 $$ = parser->createFloatingSelector();
1319 $$->setAttribute(parser->determineNameInNamespace($3, $4)); 1326 $$->setAttribute(parser->determineNameInNamespace($3, $4));
1320 $$->setMatch(CSSSelector::Set); 1327 $$->setMatch(CSSSelector::Set);
1321 } 1328 }
1322 | '[' maybe_space namespace_selector attr_name match maybe_space ident_or_st ring maybe_space ']' { 1329 | '[' maybe_space namespace_selector attr_name match maybe_space ident_or_st ring maybe_space closing_square_bracket {
1323 $$ = parser->createFloatingSelector(); 1330 $$ = parser->createFloatingSelector();
1324 $$->setAttribute(parser->determineNameInNamespace($3, $4)); 1331 $$->setAttribute(parser->determineNameInNamespace($3, $4));
1325 $$->setMatch((CSSSelector::Match)$5); 1332 $$->setMatch((CSSSelector::Match)$5);
1326 $$->setValue($7); 1333 $$->setValue($7);
1327 } 1334 }
1328 | '[' selector_recovery ']' { 1335 | '[' selector_recovery closing_square_bracket {
1329 YYERROR; 1336 YYERROR;
1330 } 1337 }
1331 ; 1338 ;
1332 1339
1333 match: 1340 match:
1334 '=' { 1341 '=' {
1335 $$ = CSSSelector::Exact; 1342 $$ = CSSSelector::Exact;
1336 } 1343 }
1337 | INCLUDES { 1344 | INCLUDES {
1338 $$ = CSSSelector::List; 1345 $$ = CSSSelector::List;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1381 $$ = parser->createFloatingSelector(); 1388 $$ = parser->createFloatingSelector();
1382 $$->setMatch(CSSSelector::PseudoElement); 1389 $$->setMatch(CSSSelector::PseudoElement);
1383 parser->tokenToLowerCase($3); 1390 parser->tokenToLowerCase($3);
1384 $$->setValue($3); 1391 $$->setValue($3);
1385 // FIXME: This call is needed to force selector to compute the pseudoTyp e early enough. 1392 // FIXME: This call is needed to force selector to compute the pseudoTyp e early enough.
1386 CSSSelector::PseudoType type = $$->pseudoType(); 1393 CSSSelector::PseudoType type = $$->pseudoType();
1387 if (type == CSSSelector::PseudoUnknown) 1394 if (type == CSSSelector::PseudoUnknown)
1388 YYERROR; 1395 YYERROR;
1389 } 1396 }
1390 // used by ::cue(:past/:future) 1397 // used by ::cue(:past/:future)
1391 | ':' ':' CUEFUNCTION maybe_space simple_selector_list maybe_space ')' { 1398 | ':' ':' CUEFUNCTION maybe_space simple_selector_list maybe_space closing_p arenthesis {
1392 $$ = parser->createFloatingSelector(); 1399 $$ = parser->createFloatingSelector();
1393 $$->setMatch(CSSSelector::PseudoClass); 1400 $$->setMatch(CSSSelector::PseudoClass);
1394 $$->adoptSelectorVector(*parser->sinkFloatingSelectorVector($5)); 1401 $$->adoptSelectorVector(*parser->sinkFloatingSelectorVector($5));
1395 $$->setValue($3); 1402 $$->setValue($3);
1396 CSSSelector::PseudoType type = $$->pseudoType(); 1403 CSSSelector::PseudoType type = $$->pseudoType();
1397 if (type != CSSSelector::PseudoCue) 1404 if (type != CSSSelector::PseudoCue)
1398 YYERROR; 1405 YYERROR;
1399 } 1406 }
1400 | ':' ':' CUEFUNCTION selector_recovery ')' { 1407 | ':' ':' CUEFUNCTION selector_recovery closing_parenthesis {
1401 YYERROR; 1408 YYERROR;
1402 } 1409 }
1403 | ':' ':' DISTRIBUTEDFUNCTION maybe_space relative_selector ')' { 1410 | ':' ':' DISTRIBUTEDFUNCTION maybe_space relative_selector closing_parenthe sis {
1404 $$ = parser->createFloatingSelector(); 1411 $$ = parser->createFloatingSelector();
1405 $$->setMatch(CSSSelector::PseudoElement); 1412 $$->setMatch(CSSSelector::PseudoElement);
1406 $$->setFunctionArgumentSelector($5); 1413 $$->setFunctionArgumentSelector($5);
1407 parser->tokenToLowerCase($3); 1414 parser->tokenToLowerCase($3);
1408 $$->setValue($3); 1415 $$->setValue($3);
1409 } 1416 }
1410 | ':' ':' DISTRIBUTEDFUNCTION selector_recovery ')' { 1417 | ':' ':' DISTRIBUTEDFUNCTION selector_recovery closing_parenthesis {
1411 YYERROR; 1418 YYERROR;
1412 } 1419 }
1413 // use by :-webkit-any. 1420 // use by :-webkit-any.
1414 // FIXME: should we support generic selectors here or just simple_selectors? 1421 // FIXME: should we support generic selectors here or just simple_selectors?
1415 // Use simple_selector_list for now to match -moz-any. 1422 // Use simple_selector_list for now to match -moz-any.
1416 // See http://lists.w3.org/Archives/Public/www-style/2010Sep/0566.html for s ome 1423 // See http://lists.w3.org/Archives/Public/www-style/2010Sep/0566.html for s ome
1417 // related discussion with respect to :not. 1424 // related discussion with respect to :not.
1418 | ':' ANYFUNCTION maybe_space simple_selector_list maybe_space ')' { 1425 | ':' ANYFUNCTION maybe_space simple_selector_list maybe_space closing_paren thesis {
1419 $$ = parser->createFloatingSelector(); 1426 $$ = parser->createFloatingSelector();
1420 $$->setMatch(CSSSelector::PseudoClass); 1427 $$->setMatch(CSSSelector::PseudoClass);
1421 $$->adoptSelectorVector(*parser->sinkFloatingSelectorVector($4)); 1428 $$->adoptSelectorVector(*parser->sinkFloatingSelectorVector($4));
1422 parser->tokenToLowerCase($2); 1429 parser->tokenToLowerCase($2);
1423 $$->setValue($2); 1430 $$->setValue($2);
1424 CSSSelector::PseudoType type = $$->pseudoType(); 1431 CSSSelector::PseudoType type = $$->pseudoType();
1425 if (type != CSSSelector::PseudoAny) 1432 if (type != CSSSelector::PseudoAny)
1426 YYERROR; 1433 YYERROR;
1427 } 1434 }
1428 | ':' ANYFUNCTION selector_recovery ')' { 1435 | ':' ANYFUNCTION selector_recovery closing_parenthesis {
1429 YYERROR; 1436 YYERROR;
1430 } 1437 }
1431 // used by :nth-*(ax+b) 1438 // used by :nth-*(ax+b)
1432 | ':' FUNCTION maybe_space NTH maybe_space ')' { 1439 | ':' FUNCTION maybe_space NTH maybe_space closing_parenthesis {
1433 $$ = parser->createFloatingSelector(); 1440 $$ = parser->createFloatingSelector();
1434 $$->setMatch(CSSSelector::PseudoClass); 1441 $$->setMatch(CSSSelector::PseudoClass);
1435 $$->setArgument($4); 1442 $$->setArgument($4);
1436 $$->setValue($2); 1443 $$->setValue($2);
1437 CSSSelector::PseudoType type = $$->pseudoType(); 1444 CSSSelector::PseudoType type = $$->pseudoType();
1438 if (type == CSSSelector::PseudoUnknown) 1445 if (type == CSSSelector::PseudoUnknown)
1439 YYERROR; 1446 YYERROR;
1440 } 1447 }
1441 // used by :nth-* 1448 // used by :nth-*
1442 | ':' FUNCTION maybe_space maybe_unary_operator INTEGER maybe_space ')' { 1449 | ':' FUNCTION maybe_space maybe_unary_operator INTEGER maybe_space closing_ parenthesis {
1443 $$ = parser->createFloatingSelector(); 1450 $$ = parser->createFloatingSelector();
1444 $$->setMatch(CSSSelector::PseudoClass); 1451 $$->setMatch(CSSSelector::PseudoClass);
1445 $$->setArgument(String::number($4 * $5)); 1452 $$->setArgument(String::number($4 * $5));
1446 $$->setValue($2); 1453 $$->setValue($2);
1447 CSSSelector::PseudoType type = $$->pseudoType(); 1454 CSSSelector::PseudoType type = $$->pseudoType();
1448 if (type == CSSSelector::PseudoUnknown) 1455 if (type == CSSSelector::PseudoUnknown)
1449 YYERROR; 1456 YYERROR;
1450 } 1457 }
1451 // used by :nth-*(odd/even) and :lang 1458 // used by :nth-*(odd/even) and :lang
1452 | ':' FUNCTION maybe_space IDENT maybe_space ')' { 1459 | ':' FUNCTION maybe_space IDENT maybe_space closing_parenthesis {
1453 $$ = parser->createFloatingSelector(); 1460 $$ = parser->createFloatingSelector();
1454 $$->setMatch(CSSSelector::PseudoClass); 1461 $$->setMatch(CSSSelector::PseudoClass);
1455 $$->setArgument($4); 1462 $$->setArgument($4);
1456 parser->tokenToLowerCase($2); 1463 parser->tokenToLowerCase($2);
1457 $$->setValue($2); 1464 $$->setValue($2);
1458 CSSSelector::PseudoType type = $$->pseudoType(); 1465 CSSSelector::PseudoType type = $$->pseudoType();
1459 if (type == CSSSelector::PseudoUnknown) 1466 if (type == CSSSelector::PseudoUnknown)
1460 YYERROR; 1467 YYERROR;
1461 else if (type == CSSSelector::PseudoNthChild || 1468 else if (type == CSSSelector::PseudoNthChild ||
1462 type == CSSSelector::PseudoNthOfType || 1469 type == CSSSelector::PseudoNthOfType ||
1463 type == CSSSelector::PseudoNthLastChild || 1470 type == CSSSelector::PseudoNthLastChild ||
1464 type == CSSSelector::PseudoNthLastOfType) { 1471 type == CSSSelector::PseudoNthLastOfType) {
1465 if (!isValidNthToken($4)) 1472 if (!isValidNthToken($4))
1466 YYERROR; 1473 YYERROR;
1467 } 1474 }
1468 } 1475 }
1469 | ':' FUNCTION selector_recovery ')' { 1476 | ':' FUNCTION selector_recovery closing_parenthesis {
1470 YYERROR; 1477 YYERROR;
1471 } 1478 }
1472 // used by :not 1479 // used by :not
1473 | ':' NOTFUNCTION maybe_space simple_selector maybe_space ')' { 1480 | ':' NOTFUNCTION maybe_space simple_selector maybe_space closing_parenthesi s {
1474 if (!$4->isSimple()) 1481 if (!$4->isSimple())
1475 YYERROR; 1482 YYERROR;
1476 else { 1483 else {
1477 $$ = parser->createFloatingSelector(); 1484 $$ = parser->createFloatingSelector();
1478 $$->setMatch(CSSSelector::PseudoClass); 1485 $$->setMatch(CSSSelector::PseudoClass);
1479 1486
1480 Vector<OwnPtr<CSSParserSelector> > selectorVector; 1487 Vector<OwnPtr<CSSParserSelector> > selectorVector;
1481 selectorVector.append(parser->sinkFloatingSelector($4)); 1488 selectorVector.append(parser->sinkFloatingSelector($4));
1482 $$->adoptSelectorVector(selectorVector); 1489 $$->adoptSelectorVector(selectorVector);
1483 1490
1484 parser->tokenToLowerCase($2); 1491 parser->tokenToLowerCase($2);
1485 $$->setValue($2); 1492 $$->setValue($2);
1486 } 1493 }
1487 } 1494 }
1488 | ':' NOTFUNCTION selector_recovery ')' { 1495 | ':' NOTFUNCTION selector_recovery closing_parenthesis {
1489 YYERROR; 1496 YYERROR;
1490 } 1497 }
1491 ; 1498 ;
1492 1499
1493 selector_recovery: 1500 selector_recovery:
1494 error error_location error_recovery; 1501 error error_location error_recovery;
1495 1502
1496 declaration_list: 1503 declaration_list:
1497 /* empty */ { $$ = false; } 1504 /* empty */ { $$ = false; }
1498 | declaration { 1505 | declaration {
(...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after
1807 at_rule_header_recovery at_invalid_rule_header_end at_rule_end 1814 at_rule_header_recovery at_invalid_rule_header_end at_rule_end
1808 ; 1815 ;
1809 1816
1810 at_rule_header_recovery: 1817 at_rule_header_recovery:
1811 error error_location rule_error_recovery { 1818 error error_location rule_error_recovery {
1812 parser->reportError($2, CSSParser::InvalidRuleError); 1819 parser->reportError($2, CSSParser::InvalidRuleError);
1813 } 1820 }
1814 ; 1821 ;
1815 1822
1816 at_rule_end: 1823 at_rule_end:
1817 at_invalid_rule_header_end ';' 1824 at_invalid_rule_header_end semi_or_eof
1818 | at_invalid_rule_header_end invalid_block 1825 | at_invalid_rule_header_end invalid_block
1819 ; 1826 ;
1820 1827
1821 invalid_rule: 1828 invalid_rule:
1822 error error_location rule_error_recovery at_invalid_rule_header_end invalid_ block { 1829 error error_location rule_error_recovery at_invalid_rule_header_end invalid_ block {
1823 parser->reportError($2, CSSParser::InvalidRuleError); 1830 parser->reportError($2, CSSParser::InvalidRuleError);
1824 $$ = 0; 1831 $$ = 0;
1825 } 1832 }
1826 | error_location invalid_at rule_error_recovery at_invalid_rule_header_end at_ rule_end { 1833 | error_location invalid_at rule_error_recovery at_invalid_rule_header_end at_ rule_end {
1827 parser->resumeErrorLogging(); 1834 parser->resumeErrorLogging();
1828 parser->reportError($1, CSSParser::InvalidRuleError); 1835 parser->reportError($1, CSSParser::InvalidRuleError);
1829 $$ = 0; 1836 $$ = 0;
1830 } 1837 }
1831 ; 1838 ;
1832 1839
1833 at_invalid_rule_header_end: 1840 at_invalid_rule_header_end:
1834 /* empty */ { 1841 /* empty */ {
1835 parser->endInvalidRuleHeader(); 1842 parser->endInvalidRuleHeader();
1836 } 1843 }
1837 ; 1844 ;
1838 1845
1839 invalid_block: 1846 invalid_block:
1840 '{' error_recovery closing_brace { 1847 '{' error_recovery closing_brace {
1841 parser->invalidBlockHit(); 1848 parser->invalidBlockHit();
1842 } 1849 }
1843 ; 1850 ;
1844 1851
1845 invalid_square_brackets_block: 1852 invalid_square_brackets_block:
1846 '[' error_recovery ']' 1853 '[' error_recovery closing_square_bracket
1847 | '[' error_recovery TOKEN_EOF
1848 ; 1854 ;
1849 1855
1850 invalid_parentheses_block: 1856 invalid_parentheses_block:
1851 opening_parenthesis error_recovery closing_parenthesis; 1857 opening_parenthesis error_recovery closing_parenthesis;
1852 1858
1853 opening_parenthesis: 1859 opening_parenthesis:
1854 '(' | FUNCTION | CALCFUNCTION | VARFUNCTION | MINFUNCTION | MAXFUNCTION | AN YFUNCTION | NOTFUNCTION | CUEFUNCTION | DISTRIBUTEDFUNCTION 1860 '(' | FUNCTION | CALCFUNCTION | VARFUNCTION | MINFUNCTION | MAXFUNCTION | AN YFUNCTION | NOTFUNCTION | CUEFUNCTION | DISTRIBUTEDFUNCTION
1855 ; 1861 ;
1856 1862
1857 error_location: { 1863 error_location: {
(...skipping 11 matching lines...) Expand all
1869 1875
1870 rule_error_recovery: 1876 rule_error_recovery:
1871 /* empty */ 1877 /* empty */
1872 | rule_error_recovery error 1878 | rule_error_recovery error
1873 | rule_error_recovery invalid_square_brackets_block 1879 | rule_error_recovery invalid_square_brackets_block
1874 | rule_error_recovery invalid_parentheses_block 1880 | rule_error_recovery invalid_parentheses_block
1875 ; 1881 ;
1876 1882
1877 %% 1883 %%
1878 1884
OLDNEW
« no previous file with comments | « LayoutTests/virtual/gpu/canvas/philip/tests/2d.fillStyle.parse.rgba-eof-expected.txt ('k') | Source/core/css/CSSParser.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698