mirror of
https://github.com/servo/servo.git
synced 2025-07-23 15:23:42 +01:00
Removing recursion from ComplexSelector
formatting formatting
This commit is contained in:
parent
ca3cd64d6b
commit
ec04de4ab7
4 changed files with 26 additions and 6 deletions
1
Cargo.lock
generated
1
Cargo.lock
generated
|
@ -2393,6 +2393,7 @@ dependencies = [
|
||||||
"fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
"fnv 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
"matches 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"precomputed-hash 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"precomputed-hash 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"smallvec 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
@ -21,3 +21,4 @@ matches = "0.1"
|
||||||
cssparser = "0.12.1"
|
cssparser = "0.12.1"
|
||||||
fnv = "1.0"
|
fnv = "1.0"
|
||||||
precomputed-hash = "0.1"
|
precomputed-hash = "0.1"
|
||||||
|
smallvec = "0.3"
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#[macro_use] extern crate matches;
|
#[macro_use] extern crate matches;
|
||||||
extern crate fnv;
|
extern crate fnv;
|
||||||
extern crate precomputed_hash;
|
extern crate precomputed_hash;
|
||||||
|
extern crate smallvec;
|
||||||
|
|
||||||
pub mod bloom;
|
pub mod bloom;
|
||||||
pub mod matching;
|
pub mod matching;
|
||||||
|
|
|
@ -360,12 +360,29 @@ impl<Impl: SelectorImpl> ToCss for Selector<Impl> {
|
||||||
|
|
||||||
impl<Impl: SelectorImpl> ToCss for ComplexSelector<Impl> {
|
impl<Impl: SelectorImpl> ToCss for ComplexSelector<Impl> {
|
||||||
fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write {
|
fn to_css<W>(&self, dest: &mut W) -> fmt::Result where W: fmt::Write {
|
||||||
if let Some((ref next, ref combinator)) = self.next {
|
use smallvec::SmallVec;
|
||||||
next.to_css(dest)?;
|
let mut current = self;
|
||||||
combinator.to_css(dest)?;
|
let mut nodes = SmallVec::<[&Self;8]>::new();
|
||||||
}
|
nodes.push(current);
|
||||||
for simple in &self.compound_selector {
|
|
||||||
simple.to_css(dest)?;
|
loop {
|
||||||
|
match current.next {
|
||||||
|
None => break,
|
||||||
|
Some((ref next, _)) => {
|
||||||
|
current = &**next;
|
||||||
|
nodes.push(next);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for selector in nodes.iter().rev() {
|
||||||
|
if let Some((_, ref combinator)) = selector.next {
|
||||||
|
combinator.to_css(dest)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
for simple in &selector.compound_selector {
|
||||||
|
simple.to_css(dest)?;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue