Pre-compute classes and IDs case-sensitivity

This commit is contained in:
Simon Sapin 2017-06-13 00:36:12 +02:00
parent 9316c41bf7
commit b82713924c
2 changed files with 11 additions and 2 deletions

View file

@ -99,6 +99,7 @@ pub struct MatchingContext<'a> {
pub relevant_link_found: bool, pub relevant_link_found: bool,
quirks_mode: QuirksMode, quirks_mode: QuirksMode,
classes_and_ids_case_sensitivity: CaseSensitivity,
} }
impl<'a> MatchingContext<'a> { impl<'a> MatchingContext<'a> {
@ -115,6 +116,7 @@ impl<'a> MatchingContext<'a> {
visited_handling: VisitedHandlingMode::AllLinksUnvisited, visited_handling: VisitedHandlingMode::AllLinksUnvisited,
relevant_link_found: false, relevant_link_found: false,
quirks_mode: quirks_mode, quirks_mode: quirks_mode,
classes_and_ids_case_sensitivity: quirks_mode.classes_and_ids_case_sensitivity(),
} }
} }
@ -132,6 +134,7 @@ impl<'a> MatchingContext<'a> {
visited_handling: visited_handling, visited_handling: visited_handling,
relevant_link_found: false, relevant_link_found: false,
quirks_mode: quirks_mode, quirks_mode: quirks_mode,
classes_and_ids_case_sensitivity: quirks_mode.classes_and_ids_case_sensitivity(),
} }
} }
@ -140,4 +143,10 @@ impl<'a> MatchingContext<'a> {
pub fn quirks_mode(&self) -> QuirksMode { pub fn quirks_mode(&self) -> QuirksMode {
self.quirks_mode self.quirks_mode
} }
/// The case-sensitivity for class and ID selectors
#[inline]
pub fn classes_and_ids_case_sensitivity(&self) -> CaseSensitivity {
self.classes_and_ids_case_sensitivity
}
} }

View file

@ -549,10 +549,10 @@ fn matches_simple_selector<E, F>(
element.get_namespace() == ns.borrow() element.get_namespace() == ns.borrow()
} }
Component::ID(ref id) => { Component::ID(ref id) => {
element.has_id(id, context.shared.quirks_mode().classes_and_ids_case_sensitivity()) element.has_id(id, context.shared.classes_and_ids_case_sensitivity())
} }
Component::Class(ref class) => { Component::Class(ref class) => {
element.has_class(class, context.shared.quirks_mode().classes_and_ids_case_sensitivity()) element.has_class(class, context.shared.classes_and_ids_case_sensitivity())
} }
Component::AttributeInNoNamespaceExists { ref local_name, ref local_name_lower } => { Component::AttributeInNoNamespaceExists { ref local_name, ref local_name_lower } => {
let is_html = element.is_html_element_in_html_document(); let is_html = element.is_html_element_in_html_document();