From b82713924c7d6b52348088f1409fb5f7a30379e9 Mon Sep 17 00:00:00 2001 From: Simon Sapin Date: Tue, 13 Jun 2017 00:36:12 +0200 Subject: [PATCH] Pre-compute classes and IDs case-sensitivity --- components/selectors/context.rs | 9 +++++++++ components/selectors/matching.rs | 4 ++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/components/selectors/context.rs b/components/selectors/context.rs index 16a320fb5d2..c40c4b68ab4 100644 --- a/components/selectors/context.rs +++ b/components/selectors/context.rs @@ -99,6 +99,7 @@ pub struct MatchingContext<'a> { pub relevant_link_found: bool, quirks_mode: QuirksMode, + classes_and_ids_case_sensitivity: CaseSensitivity, } impl<'a> MatchingContext<'a> { @@ -115,6 +116,7 @@ impl<'a> MatchingContext<'a> { visited_handling: VisitedHandlingMode::AllLinksUnvisited, relevant_link_found: false, 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, relevant_link_found: false, 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 { 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 + } } diff --git a/components/selectors/matching.rs b/components/selectors/matching.rs index bec22596a71..b9f4377f38d 100644 --- a/components/selectors/matching.rs +++ b/components/selectors/matching.rs @@ -549,10 +549,10 @@ fn matches_simple_selector( element.get_namespace() == ns.borrow() } 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) => { - 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 } => { let is_html = element.is_html_element_in_html_document();