diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2017-06-15 01:36:22 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-06-15 01:36:22 -0700 |
commit | b0392dbf39d36f19cd16ec06e29b6aca6e6135e2 (patch) | |
tree | a3296b2b61db0461642d30f238508303ff8f4e9a /components | |
parent | 09b8f124f59f98d83e4fe72a3fe4d506e912cdb6 (diff) | |
parent | 7334298f3018f4be1b20bdaf58efd4f67beeda4b (diff) | |
download | servo-b0392dbf39d36f19cd16ec06e29b6aca6e6135e2.tar.gz servo-b0392dbf39d36f19cd16ec06e29b6aca6e6135e2.zip |
Auto merge of #17324 - ferjm:bug1371393.column, r=SimonSapin
stylo: set location for NestedRuleParser during prelude parsing
From https://bugzilla.mozilla.org/show_bug.cgi?id=1371393
<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/17324)
<!-- Reviewable:end -->
Diffstat (limited to 'components')
-rw-r--r-- | components/style/stylesheets/rule_parser.rs | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/components/style/stylesheets/rule_parser.rs b/components/style/stylesheets/rule_parser.rs index 34db0c1d69f..0cecb8bf36a 100644 --- a/components/style/stylesheets/rule_parser.rs +++ b/components/style/stylesheets/rule_parser.rs @@ -257,15 +257,19 @@ impl<'a, 'i> AtRuleParser<'i> for TopLevelRuleParser<'a> { } } +pub struct QualifiedRuleParserPrelude { + selectors: SelectorList<SelectorImpl>, + source_location: SourceLocation, +} impl<'a, 'i> QualifiedRuleParser<'i> for TopLevelRuleParser<'a> { - type Prelude = SelectorList<SelectorImpl>; + type Prelude = QualifiedRuleParserPrelude; type QualifiedRule = CssRule; type Error = SelectorParseError<'i, StyleParseError<'i>>; #[inline] fn parse_prelude<'t>(&mut self, input: &mut Parser<'i, 't>) - -> Result<SelectorList<SelectorImpl>, ParseError<'i>> { + -> Result<QualifiedRuleParserPrelude, ParseError<'i>> { self.state = State::Body; // "Freeze" the namespace map (no more namespace rules can be parsed @@ -281,7 +285,7 @@ impl<'a, 'i> QualifiedRuleParser<'i> for TopLevelRuleParser<'a> { #[inline] fn parse_block<'t>( &mut self, - prelude: SelectorList<SelectorImpl>, + prelude: QualifiedRuleParserPrelude, input: &mut Parser<'i, 't> ) -> Result<CssRule, ParseError<'i>> { QualifiedRuleParser::parse_block(&mut self.nested(), prelude, input) @@ -482,33 +486,38 @@ impl<'a, 'b, 'i> AtRuleParser<'i> for NestedRuleParser<'a, 'b> { } impl<'a, 'b, 'i> QualifiedRuleParser<'i> for NestedRuleParser<'a, 'b> { - type Prelude = SelectorList<SelectorImpl>; + type Prelude = QualifiedRuleParserPrelude; type QualifiedRule = CssRule; type Error = SelectorParseError<'i, StyleParseError<'i>>; fn parse_prelude<'t>(&mut self, input: &mut Parser<'i, 't>) - -> Result<SelectorList<SelectorImpl>, ParseError<'i>> { + -> Result<QualifiedRuleParserPrelude, ParseError<'i>> { let selector_parser = SelectorParser { stylesheet_origin: self.stylesheet_origin, namespaces: self.context.namespaces.unwrap(), }; - SelectorList::parse(&selector_parser, input) + let location = get_location_with_offset(input.current_source_location(), + self.context.line_number_offset); + let selectors = SelectorList::parse(&selector_parser, input)?; + + Ok(QualifiedRuleParserPrelude { + selectors: selectors, + source_location: location, + }) } fn parse_block<'t>( &mut self, - prelude: SelectorList<SelectorImpl>, + prelude: QualifiedRuleParserPrelude, input: &mut Parser<'i, 't> ) -> Result<CssRule, ParseError<'i>> { - let location = get_location_with_offset(input.current_source_location(), - self.context.line_number_offset); let context = ParserContext::new_with_rule_type(self.context, Some(CssRuleType::Style)); let declarations = parse_property_declaration_list(&context, input); Ok(CssRule::Style(Arc::new(self.shared_lock.wrap(StyleRule { - selectors: prelude, + selectors: prelude.selectors, block: Arc::new(self.shared_lock.wrap(declarations)), - source_location: location, + source_location: prelude.source_location, })))) } } |