aboutsummaryrefslogtreecommitdiffstats
path: root/components/selectors/builder.rs
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2019-12-16 23:51:18 -0500
committerGitHub <noreply@github.com>2019-12-16 23:51:18 -0500
commita8b8f4647622dc88e2d19c04de3948795dcc594d (patch)
tree50ccc190c83684029855eeaf1b0b422b90da062e /components/selectors/builder.rs
parentb274d59875522ad303e9b54c17414dd57dee325b (diff)
parent7513bc293e0e515dd4e9e56b8ede32b68b8c8186 (diff)
downloadservo-a8b8f4647622dc88e2d19c04de3948795dcc594d.tar.gz
servo-a8b8f4647622dc88e2d19c04de3948795dcc594d.zip
Auto merge of #25299 - emilio:gecko-sync, r=emilio,nox
style: Sync changes from mozilla-central. See individual commits for details.
Diffstat (limited to 'components/selectors/builder.rs')
-rw-r--r--components/selectors/builder.rs14
1 files changed, 9 insertions, 5 deletions
diff --git a/components/selectors/builder.rs b/components/selectors/builder.rs
index 41b83b0c40e..7a58e35d17f 100644
--- a/components/selectors/builder.rs
+++ b/components/selectors/builder.rs
@@ -17,7 +17,7 @@
//! is non-trivial. This module encapsulates those details and presents an
//! easy-to-use API for the parser.
-use crate::parser::{Combinator, Component, SelectorImpl};
+use crate::parser::{Combinator, Component, NonTSPseudoClass, SelectorImpl};
use crate::sink::Push;
use servo_arc::{Arc, HeaderWithLength, ThinArc};
use smallvec::{self, SmallVec};
@@ -142,7 +142,7 @@ impl<Impl: SelectorImpl> SelectorBuilder<Impl> {
let iter = SelectorBuilderIter {
current_simple_selectors: current.iter(),
rest_of_simple_selectors: rest,
- combinators: self.combinators.drain().rev(),
+ combinators: self.combinators.drain(..).rev(),
};
Arc::into_thin(Arc::from_header_and_iter(header, iter))
@@ -152,7 +152,7 @@ impl<Impl: SelectorImpl> SelectorBuilder<Impl> {
struct SelectorBuilderIter<'a, Impl: SelectorImpl> {
current_simple_selectors: slice::Iter<'a, Component<Impl>>,
rest_of_simple_selectors: &'a [Component<Impl>],
- combinators: iter::Rev<smallvec::Drain<'a, (Combinator, usize)>>,
+ combinators: iter::Rev<smallvec::Drain<'a, [(Combinator, usize); 16]>>,
}
impl<'a, Impl: SelectorImpl> ExactSizeIterator for SelectorBuilderIter<'a, Impl> {
@@ -322,10 +322,14 @@ where
Component::NthLastOfType(..) |
Component::FirstOfType |
Component::LastOfType |
- Component::OnlyOfType |
- Component::NonTSPseudoClass(..) => {
+ Component::OnlyOfType => {
specificity.class_like_selectors += 1;
},
+ Component::NonTSPseudoClass(ref pseudo) => {
+ if !pseudo.has_zero_specificity() {
+ specificity.class_like_selectors += 1;
+ }
+ },
Component::ExplicitUniversalType |
Component::ExplicitAnyNamespace |
Component::ExplicitNoNamespace |