Auto merge of #19822 - emilio:less-match-public, r=KiChjang

style: More tiny selector-matching cleanup

See each commit individually.

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/19822)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2018-01-19 23:05:18 -06:00 committed by GitHub
commit 6fc71a7644
4 changed files with 47 additions and 36 deletions

View file

@ -100,7 +100,7 @@ where
Impl: SelectorImpl, Impl: SelectorImpl,
{ {
/// Input with the matching mode we should use when matching selectors. /// Input with the matching mode we should use when matching selectors.
pub matching_mode: MatchingMode, matching_mode: MatchingMode,
/// Input with the bloom filter used to fast-reject selectors. /// Input with the bloom filter used to fast-reject selectors.
pub bloom_filter: Option<&'a BloomFilter>, pub bloom_filter: Option<&'a BloomFilter>,
/// An optional cache to speed up nth-index-like selectors. /// An optional cache to speed up nth-index-like selectors.
@ -204,6 +204,12 @@ where
self.quirks_mode self.quirks_mode
} }
/// The matching-mode for this selector-matching operation.
#[inline]
pub fn matching_mode(&self) -> MatchingMode {
self.matching_mode
}
/// The case-sensitivity for class and ID selectors /// The case-sensitivity for class and ID selectors
#[inline] #[inline]
pub fn classes_and_ids_case_sensitivity(&self) -> CaseSensitivity { pub fn classes_and_ids_case_sensitivity(&self) -> CaseSensitivity {

View file

@ -285,7 +285,7 @@ where
{ {
// If this is the special pseudo-element mode, consume the ::pseudo-element // If this is the special pseudo-element mode, consume the ::pseudo-element
// before proceeding, since the caller has already handled that part. // before proceeding, since the caller has already handled that part.
if context.matching_mode == MatchingMode::ForStatelessPseudoElement && if context.matching_mode() == MatchingMode::ForStatelessPseudoElement &&
!context.is_nested() { !context.is_nested() {
// Consume the pseudo. // Consume the pseudo.
match *iter.next().unwrap() { match *iter.next().unwrap() {
@ -349,7 +349,7 @@ fn matches_hover_and_active_quirk<Impl: SelectorImpl>(
// This compound selector had a pseudo-element to the right that we // This compound selector had a pseudo-element to the right that we
// intentionally skipped. // intentionally skipped.
if rightmost == Rightmost::Yes && if rightmost == Rightmost::Yes &&
context.matching_mode == MatchingMode::ForStatelessPseudoElement { context.matching_mode() == MatchingMode::ForStatelessPseudoElement {
return MatchesHoverAndActiveQuirk::No; return MatchesHoverAndActiveQuirk::No;
} }

View file

@ -159,7 +159,6 @@ impl SelectorMap<Rule> {
rule_hash_target: E, rule_hash_target: E,
matching_rules_list: &mut ApplicableDeclarationList, matching_rules_list: &mut ApplicableDeclarationList,
context: &mut MatchingContext<E::Impl>, context: &mut MatchingContext<E::Impl>,
quirks_mode: QuirksMode,
flags_setter: &mut F, flags_setter: &mut F,
cascade_level: CascadeLevel, cascade_level: CascadeLevel,
) )
@ -171,45 +170,56 @@ impl SelectorMap<Rule> {
return return
} }
// At the end, we're going to sort the rules that we added, so remember where we began. let quirks_mode = context.quirks_mode();
// At the end, we're going to sort the rules that we added, so remember
// where we began.
let init_len = matching_rules_list.len(); let init_len = matching_rules_list.len();
if let Some(id) = rule_hash_target.get_id() { if let Some(id) = rule_hash_target.get_id() {
if let Some(rules) = self.id_hash.get(&id, quirks_mode) { if let Some(rules) = self.id_hash.get(&id, quirks_mode) {
SelectorMap::get_matching_rules(element, SelectorMap::get_matching_rules(
element,
rules, rules,
matching_rules_list, matching_rules_list,
context, context,
flags_setter, flags_setter,
cascade_level) cascade_level,
)
} }
} }
rule_hash_target.each_class(|class| { rule_hash_target.each_class(|class| {
if let Some(rules) = self.class_hash.get(&class, quirks_mode) { if let Some(rules) = self.class_hash.get(&class, quirks_mode) {
SelectorMap::get_matching_rules(element, SelectorMap::get_matching_rules(
element,
rules, rules,
matching_rules_list, matching_rules_list,
context, context,
flags_setter, flags_setter,
cascade_level) cascade_level,
)
} }
}); });
if let Some(rules) = self.local_name_hash.get(rule_hash_target.get_local_name()) { if let Some(rules) = self.local_name_hash.get(rule_hash_target.get_local_name()) {
SelectorMap::get_matching_rules(element, SelectorMap::get_matching_rules(
element,
rules, rules,
matching_rules_list, matching_rules_list,
context, context,
flags_setter, flags_setter,
cascade_level) cascade_level,
)
} }
SelectorMap::get_matching_rules(element, SelectorMap::get_matching_rules(
element,
&self.other, &self.other,
matching_rules_list, matching_rules_list,
context, context,
flags_setter, flags_setter,
cascade_level); cascade_level,
);
// Sort only the rules we just added. // Sort only the rules we just added.
matching_rules_list[init_len..].sort_unstable_by_key(|block| (block.specificity, block.source_order())); matching_rules_list[init_len..].sort_unstable_by_key(|block| (block.specificity, block.source_order()));
@ -247,7 +257,7 @@ impl<T: SelectorMapEntry> SelectorMap<T> {
pub fn insert( pub fn insert(
&mut self, &mut self,
entry: T, entry: T,
quirks_mode: QuirksMode quirks_mode: QuirksMode,
) -> Result<(), FailedAllocationError> { ) -> Result<(), FailedAllocationError> {
self.count += 1; self.count += 1;

View file

@ -1236,7 +1236,6 @@ impl Stylist {
rule_hash_target, rule_hash_target,
applicable_declarations, applicable_declarations,
context, context,
self.quirks_mode,
flags_setter, flags_setter,
CascadeLevel::UANormal CascadeLevel::UANormal
); );
@ -1274,7 +1273,6 @@ impl Stylist {
rule_hash_target, rule_hash_target,
applicable_declarations, applicable_declarations,
context, context,
self.quirks_mode,
flags_setter, flags_setter,
CascadeLevel::UserNormal, CascadeLevel::UserNormal,
); );
@ -1305,7 +1303,6 @@ impl Stylist {
rule_hash_target, rule_hash_target,
applicable_declarations, applicable_declarations,
context, context,
self.quirks_mode,
flags_setter, flags_setter,
CascadeLevel::AuthorNormal CascadeLevel::AuthorNormal
); );
@ -1327,7 +1324,7 @@ impl Stylist {
// as `context`, write a test-case of :visited not working on // as `context`, write a test-case of :visited not working on
// Shadow DOM and fix it! // Shadow DOM and fix it!
let mut matching_context = MatchingContext::new( let mut matching_context = MatchingContext::new(
context.matching_mode, context.matching_mode(),
context.bloom_filter, context.bloom_filter,
context.nth_index_cache.as_mut().map(|s| &mut **s), context.nth_index_cache.as_mut().map(|s| &mut **s),
stylist.quirks_mode, stylist.quirks_mode,
@ -1339,7 +1336,6 @@ impl Stylist {
rule_hash_target, rule_hash_target,
applicable_declarations, applicable_declarations,
&mut matching_context, &mut matching_context,
stylist.quirks_mode,
flags_setter, flags_setter,
CascadeLevel::AuthorNormal, CascadeLevel::AuthorNormal,
); );
@ -1356,7 +1352,6 @@ impl Stylist {
rule_hash_target, rule_hash_target,
applicable_declarations, applicable_declarations,
context, context,
self.quirks_mode,
flags_setter, flags_setter,
CascadeLevel::AuthorNormal CascadeLevel::AuthorNormal
); );