aboutsummaryrefslogtreecommitdiffstats
path: root/components
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2017-06-15 01:36:22 -0700
committerGitHub <noreply@github.com>2017-06-15 01:36:22 -0700
commitb0392dbf39d36f19cd16ec06e29b6aca6e6135e2 (patch)
treea3296b2b61db0461642d30f238508303ff8f4e9a /components
parent09b8f124f59f98d83e4fe72a3fe4d506e912cdb6 (diff)
parent7334298f3018f4be1b20bdaf58efd4f67beeda4b (diff)
downloadservo-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.rs31
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,
}))))
}
}