mirror of
https://github.com/servo/servo.git
synced 2025-08-06 14:10:11 +01:00
Move PrecomputedHash bounds to where they’re actually needed.
This commit is contained in:
parent
b0003f77e4
commit
5d920df460
2 changed files with 22 additions and 18 deletions
|
@ -86,10 +86,10 @@ macro_rules! with_all_bounds {
|
||||||
pub trait SelectorImpl: Clone + Sized + 'static {
|
pub trait SelectorImpl: Clone + Sized + 'static {
|
||||||
type ExtraMatchingData: Sized + Default + 'static;
|
type ExtraMatchingData: Sized + Default + 'static;
|
||||||
type AttrValue: $($InSelector)*;
|
type AttrValue: $($InSelector)*;
|
||||||
type Identifier: $($InSelector)* + PrecomputedHash;
|
type Identifier: $($InSelector)*;
|
||||||
type ClassName: $($InSelector)* + PrecomputedHash;
|
type ClassName: $($InSelector)*;
|
||||||
type LocalName: $($InSelector)* + Borrow<Self::BorrowedLocalName> + PrecomputedHash;
|
type LocalName: $($InSelector)* + Borrow<Self::BorrowedLocalName>;
|
||||||
type NamespaceUrl: $($CommonBounds)* + Default + Borrow<Self::BorrowedNamespaceUrl> + PrecomputedHash;
|
type NamespaceUrl: $($CommonBounds)* + Default + Borrow<Self::BorrowedNamespaceUrl>;
|
||||||
type NamespacePrefix: $($InSelector)* + Default;
|
type NamespacePrefix: $($InSelector)* + Default;
|
||||||
type BorrowedNamespaceUrl: ?Sized + Eq;
|
type BorrowedNamespaceUrl: ?Sized + Eq;
|
||||||
type BorrowedLocalName: ?Sized + Eq;
|
type BorrowedLocalName: ?Sized + Eq;
|
||||||
|
@ -275,14 +275,24 @@ impl AncestorHashes {
|
||||||
pub fn new<Impl: SelectorImpl>(
|
pub fn new<Impl: SelectorImpl>(
|
||||||
selector: &Selector<Impl>,
|
selector: &Selector<Impl>,
|
||||||
quirks_mode: QuirksMode,
|
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)
|
Self::from_iter(selector.iter(), quirks_mode)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn from_iter<Impl: SelectorImpl>(
|
fn from_iter<Impl: SelectorImpl>(
|
||||||
iter: SelectorIter<Impl>,
|
iter: SelectorIter<Impl>,
|
||||||
quirks_mode: QuirksMode,
|
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.
|
// Compute ancestor hashes for the bloom filter.
|
||||||
let mut hashes = [0u32; 4];
|
let mut hashes = [0u32; 4];
|
||||||
let mut hash_iter = AncestorIter::new(iter)
|
let mut hash_iter = AncestorIter::new(iter)
|
||||||
|
@ -789,7 +799,12 @@ pub enum Component<Impl: SelectorImpl> {
|
||||||
|
|
||||||
impl<Impl: SelectorImpl> Component<Impl> {
|
impl<Impl: SelectorImpl> Component<Impl> {
|
||||||
/// Compute the ancestor hash to check against the bloom filter.
|
/// Compute the ancestor hash to check against the bloom filter.
|
||||||
fn ancestor_hash(&self, quirks_mode: QuirksMode) -> Option<u32> {
|
fn ancestor_hash(&self, quirks_mode: QuirksMode) -> Option<u32>
|
||||||
|
where Impl::Identifier: PrecomputedHash,
|
||||||
|
Impl::ClassName: PrecomputedHash,
|
||||||
|
Impl::LocalName: PrecomputedHash,
|
||||||
|
Impl::NamespaceUrl: PrecomputedHash,
|
||||||
|
{
|
||||||
match *self {
|
match *self {
|
||||||
Component::LocalName(LocalName { ref name, ref lower_name }) => {
|
Component::LocalName(LocalName { ref name, ref lower_name }) => {
|
||||||
// Only insert the local-name into the filter if it's all
|
// 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 {
|
impl<'i> Parser<'i> for DummyParser {
|
||||||
type Impl = DummySelectorImpl;
|
type Impl = DummySelectorImpl;
|
||||||
type Error = SelectorParseErrorKind<'i>;
|
type Error = SelectorParseErrorKind<'i>;
|
||||||
|
|
|
@ -7,7 +7,6 @@ use gecko_like_types;
|
||||||
use gecko_like_types::*;
|
use gecko_like_types::*;
|
||||||
use parser;
|
use parser;
|
||||||
use parser::*;
|
use parser::*;
|
||||||
use precomputed_hash::PrecomputedHash;
|
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use visitor::SelectorVisitor;
|
use visitor::SelectorVisitor;
|
||||||
|
|
||||||
|
@ -68,7 +67,3 @@ impl From<String> for Atom {
|
||||||
impl<'a> From<&'a str> for Atom {
|
impl<'a> From<&'a str> for Atom {
|
||||||
fn from(_: &'a str) -> Self { unimplemented!() }
|
fn from(_: &'a str) -> Self { unimplemented!() }
|
||||||
}
|
}
|
||||||
|
|
||||||
impl PrecomputedHash for Atom {
|
|
||||||
fn precomputed_hash(&self) -> u32 { unimplemented!() }
|
|
||||||
}
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue