diff --git a/components/selectors/parser.rs b/components/selectors/parser.rs index e39ba36bd4e..7e7194b109e 100644 --- a/components/selectors/parser.rs +++ b/components/selectors/parser.rs @@ -86,10 +86,10 @@ macro_rules! with_all_bounds { pub trait SelectorImpl: Clone + Sized + 'static { type ExtraMatchingData: Sized + Default + 'static; type AttrValue: $($InSelector)*; - type Identifier: $($InSelector)* + PrecomputedHash; - type ClassName: $($InSelector)* + PrecomputedHash; - type LocalName: $($InSelector)* + Borrow + PrecomputedHash; - type NamespaceUrl: $($CommonBounds)* + Default + Borrow + PrecomputedHash; + type Identifier: $($InSelector)*; + type ClassName: $($InSelector)*; + type LocalName: $($InSelector)* + Borrow; + type NamespaceUrl: $($CommonBounds)* + Default + Borrow; type NamespacePrefix: $($InSelector)* + Default; type BorrowedNamespaceUrl: ?Sized + Eq; type BorrowedLocalName: ?Sized + Eq; @@ -275,14 +275,24 @@ impl AncestorHashes { pub fn new( selector: &Selector, quirks_mode: QuirksMode, - ) -> Self { + ) -> Self + where Impl::Identifier: PrecomputedHash, + Impl::ClassName: PrecomputedHash, + Impl::LocalName: PrecomputedHash, + Impl::NamespaceUrl: PrecomputedHash, + { Self::from_iter(selector.iter(), quirks_mode) } fn from_iter( iter: SelectorIter, quirks_mode: QuirksMode, - ) -> Self { + ) -> Self + where Impl::Identifier: PrecomputedHash, + Impl::ClassName: PrecomputedHash, + Impl::LocalName: PrecomputedHash, + Impl::NamespaceUrl: PrecomputedHash, + { // Compute ancestor hashes for the bloom filter. let mut hashes = [0u32; 4]; let mut hash_iter = AncestorIter::new(iter) @@ -789,7 +799,12 @@ pub enum Component { impl Component { /// Compute the ancestor hash to check against the bloom filter. - fn ancestor_hash(&self, quirks_mode: QuirksMode) -> Option { + fn ancestor_hash(&self, quirks_mode: QuirksMode) -> Option + where Impl::Identifier: PrecomputedHash, + Impl::ClassName: PrecomputedHash, + Impl::LocalName: PrecomputedHash, + Impl::NamespaceUrl: PrecomputedHash, + { match *self { Component::LocalName(LocalName { ref name, ref lower_name }) => { // Only insert the local-name into the filter if it's all @@ -2068,12 +2083,6 @@ pub mod tests { } } - impl PrecomputedHash for DummyAtom { - fn precomputed_hash(&self) -> u32 { - return 0 - } - } - impl<'i> Parser<'i> for DummyParser { type Impl = DummySelectorImpl; type Error = SelectorParseErrorKind<'i>; diff --git a/components/selectors/size_of_tests.rs b/components/selectors/size_of_tests.rs index 8f0d6da94ef..35f4e6f0ab0 100644 --- a/components/selectors/size_of_tests.rs +++ b/components/selectors/size_of_tests.rs @@ -7,7 +7,6 @@ use gecko_like_types; use gecko_like_types::*; use parser; use parser::*; -use precomputed_hash::PrecomputedHash; use std::fmt; use visitor::SelectorVisitor; @@ -68,7 +67,3 @@ impl From for Atom { impl<'a> From<&'a str> for Atom { fn from(_: &'a str) -> Self { unimplemented!() } } - -impl PrecomputedHash for Atom { - fn precomputed_hash(&self) -> u32 { unimplemented!() } -}