From 5d920df460191aac756541000fcb321300d8e8a2 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Fri, 12 Jan 2018 14:55:38 +0100 Subject: [PATCH] =?UTF-8?q?Move=20PrecomputedHash=20bounds=20to=20where=20?= =?UTF-8?q?they=E2=80=99re=20actually=20needed.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/selectors/parser.rs | 35 +++++++++++++++++---------- components/selectors/size_of_tests.rs | 5 ---- 2 files changed, 22 insertions(+), 18 deletions(-) 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!() } -}