Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create a new infrastructure for presentational hints. #5857

Merged
merged 5 commits into from Apr 28, 2015
Merged
Changes from 1 commit
Commits
File filter...
Filter file types
Jump to…
Jump to file
Failed to load files.

Always

Just for now

Prev

Move the sink into util::vec.

  • Loading branch information
Ms2ger committed Apr 27, 2015
commit ed052bc080dc78cf30d416609311172fa2fbd14e
@@ -20,7 +20,6 @@ use selectors::bloom::BloomFilter;
use selectors::matching::{CommonStyleAffectingAttributeMode, CommonStyleAffectingAttributes};
use selectors::matching::{common_style_affecting_attributes, rare_style_affecting_attributes};
use selectors::parser::PseudoElement;
use selectors::smallvec::VecLike;
use std::borrow::ToOwned;
use std::hash::{Hash, Hasher};
use std::mem;
@@ -35,6 +34,7 @@ use util::arc_ptr_eq;
use util::cache::{LRUCache, SimpleHashCache};
use util::opts;
use util::smallvec::{SmallVec, SmallVec16};
use util::vec::ForgetfulSink;

pub struct ApplicableDeclarations {
pub normal: SmallVec16<DeclarationBlock>,
@@ -290,29 +290,9 @@ impl StyleSharingCandidate {
return false
}

struct RulesSink {
empty: bool,
}
impl<T> VecLike<T> for RulesSink {
#[inline]
fn vec_len(&self) -> usize {
unreachable!()
}

#[inline]
fn vec_push(&mut self, _value: T) {
self.empty = false;
}

#[inline]
fn vec_slice_mut<'a>(&'a mut self, _start: usize, _end: usize)
-> &'a mut [T] {
unreachable!()
}
}
let mut matching_rules = RulesSink { empty: true };
let mut matching_rules = ForgetfulSink::new();
element.synthesize_presentational_hints_for_legacy_attributes(&mut matching_rules);
if !matching_rules.empty {
if !matching_rules.is_empty() {
return false;
}

This comment has been minimized.

@pcwalton

pcwalton Apr 27, 2015

Contributor

This is probably going to be too slow. can_share_style_with is called zillions of times. Can you avoid creating the vector?


@@ -2,6 +2,8 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */

use selectors::smallvec::VecLike;

use std::cmp::{PartialOrd, PartialEq, Ordering};
use std::iter::range_step;

@@ -72,3 +74,37 @@ pub fn byte_swap(data: &mut [u8]) {
data[i + 0] = r;
}
}

/// A `VecLike` that only tracks whether or not something was ever pushed to it.
pub struct ForgetfulSink {
empty: bool,
}

impl ForgetfulSink {
pub fn new() -> ForgetfulSink {
ForgetfulSink {
empty: true,
}
}

pub fn is_empty(&self) -> bool {
self.empty
}
}

impl<T> VecLike<T> for ForgetfulSink {
#[inline]
fn vec_len(&self) -> usize {
unreachable!()
}

#[inline]
fn vec_push(&mut self, _value: T) {
self.empty = false;
}

#[inline]
fn vec_slice_mut<'a>(&'a mut self, _start: usize, _end: usize) -> &'a mut [T] {
unreachable!()
}
}
ProTip! Use n and p to navigate between commits in a pull request.
You can’t perform that action at this time.