mirror of
https://github.com/servo/servo.git
synced 2025-07-25 16:20:36 +01:00
style: Don't recompute quirks mode -> case sensitivity over and over
The only reason we pass the quirks mode around is to compute the case sensitivity, but we can just pass the later. Differential Revision: https://phabricator.services.mozilla.com/D180527
This commit is contained in:
parent
5b184f448b
commit
c36a22a97f
1 changed files with 24 additions and 22 deletions
|
@ -290,12 +290,11 @@ where
|
||||||
fn fast_connected_elements_with_id<'a, N>(
|
fn fast_connected_elements_with_id<'a, N>(
|
||||||
root: N,
|
root: N,
|
||||||
id: &AtomIdent,
|
id: &AtomIdent,
|
||||||
quirks_mode: QuirksMode,
|
case_sensitivity: CaseSensitivity,
|
||||||
) -> Result<&'a [N::ConcreteElement], ()>
|
) -> Result<&'a [N::ConcreteElement], ()>
|
||||||
where
|
where
|
||||||
N: TNode + 'a,
|
N: TNode + 'a,
|
||||||
{
|
{
|
||||||
let case_sensitivity = quirks_mode.classes_and_ids_case_sensitivity();
|
|
||||||
if case_sensitivity != CaseSensitivity::CaseSensitive {
|
if case_sensitivity != CaseSensitivity::CaseSensitive {
|
||||||
return Err(());
|
return Err(());
|
||||||
}
|
}
|
||||||
|
@ -320,20 +319,18 @@ fn collect_elements_with_id<E, Q, F>(
|
||||||
root: E::ConcreteNode,
|
root: E::ConcreteNode,
|
||||||
id: &AtomIdent,
|
id: &AtomIdent,
|
||||||
results: &mut Q::Output,
|
results: &mut Q::Output,
|
||||||
quirks_mode: QuirksMode,
|
class_and_id_case_sensitivity: CaseSensitivity,
|
||||||
mut filter: F,
|
mut filter: F,
|
||||||
) where
|
) where
|
||||||
E: TElement,
|
E: TElement,
|
||||||
Q: SelectorQuery<E>,
|
Q: SelectorQuery<E>,
|
||||||
F: FnMut(E) -> bool,
|
F: FnMut(E) -> bool,
|
||||||
{
|
{
|
||||||
let elements = match fast_connected_elements_with_id(root, id, quirks_mode) {
|
let elements = match fast_connected_elements_with_id(root, id, class_and_id_case_sensitivity) {
|
||||||
Ok(elements) => elements,
|
Ok(elements) => elements,
|
||||||
Err(()) => {
|
Err(()) => {
|
||||||
let case_sensitivity = quirks_mode.classes_and_ids_case_sensitivity();
|
|
||||||
|
|
||||||
collect_all_elements::<E, Q, _>(root, results, |e| {
|
collect_all_elements::<E, Q, _>(root, results, |e| {
|
||||||
e.has_id(id, case_sensitivity) && filter(e)
|
e.has_id(id, class_and_id_case_sensitivity) && filter(e)
|
||||||
});
|
});
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
@ -404,7 +401,7 @@ fn query_selector_single_query<E, Q>(
|
||||||
root: E::ConcreteNode,
|
root: E::ConcreteNode,
|
||||||
component: &Component<E::Impl>,
|
component: &Component<E::Impl>,
|
||||||
results: &mut Q::Output,
|
results: &mut Q::Output,
|
||||||
quirks_mode: QuirksMode,
|
class_and_id_case_sensitivity: CaseSensitivity,
|
||||||
) -> Result<(), ()>
|
) -> Result<(), ()>
|
||||||
where
|
where
|
||||||
E: TElement,
|
E: TElement,
|
||||||
|
@ -415,12 +412,9 @@ where
|
||||||
Component::ExplicitUniversalType => {
|
Component::ExplicitUniversalType => {
|
||||||
collect_all_elements::<E, Q, _>(root, results, |_| true)
|
collect_all_elements::<E, Q, _>(root, results, |_| true)
|
||||||
},
|
},
|
||||||
Component::Class(ref class) => {
|
Component::Class(ref class) => collect_all_elements::<E, Q, _>(root, results, |element| {
|
||||||
let case_sensitivity = quirks_mode.classes_and_ids_case_sensitivity();
|
element.has_class(class, class_and_id_case_sensitivity)
|
||||||
collect_all_elements::<E, Q, _>(root, results, |element| {
|
}),
|
||||||
element.has_class(class, case_sensitivity)
|
|
||||||
})
|
|
||||||
},
|
|
||||||
Component::LocalName(ref local_name) => {
|
Component::LocalName(ref local_name) => {
|
||||||
collect_all_elements::<E, Q, _>(root, results, |element| {
|
collect_all_elements::<E, Q, _>(root, results, |element| {
|
||||||
local_name_matches(element, local_name)
|
local_name_matches(element, local_name)
|
||||||
|
@ -432,7 +426,13 @@ where
|
||||||
// TODO(emilio): More fast paths?
|
// TODO(emilio): More fast paths?
|
||||||
None => return Err(()),
|
None => return Err(()),
|
||||||
};
|
};
|
||||||
collect_elements_with_id::<E, Q, _>(root, id, results, quirks_mode, |_| true);
|
collect_elements_with_id::<E, Q, _>(
|
||||||
|
root,
|
||||||
|
id,
|
||||||
|
results,
|
||||||
|
class_and_id_case_sensitivity,
|
||||||
|
|_| true,
|
||||||
|
);
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -470,15 +470,14 @@ where
|
||||||
}
|
}
|
||||||
|
|
||||||
let selector = &selector_list.0[0];
|
let selector = &selector_list.0[0];
|
||||||
let quirks_mode = matching_context.quirks_mode();
|
let class_and_id_case_sensitivity = matching_context.classes_and_ids_case_sensitivity();
|
||||||
|
|
||||||
// Let's just care about the easy cases for now.
|
// Let's just care about the easy cases for now.
|
||||||
if selector.len() == 1 {
|
if selector.len() == 1 {
|
||||||
return query_selector_single_query::<E, Q>(
|
return query_selector_single_query::<E, Q>(
|
||||||
root,
|
root,
|
||||||
selector.iter().next().unwrap(),
|
selector.iter().next().unwrap(),
|
||||||
results,
|
results,
|
||||||
quirks_mode,
|
class_and_id_case_sensitivity,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -519,7 +518,7 @@ where
|
||||||
root,
|
root,
|
||||||
id,
|
id,
|
||||||
results,
|
results,
|
||||||
quirks_mode,
|
class_and_id_case_sensitivity,
|
||||||
|e| {
|
|e| {
|
||||||
matching::matches_selector_list(
|
matching::matches_selector_list(
|
||||||
selector_list,
|
selector_list,
|
||||||
|
@ -531,7 +530,11 @@ where
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|
||||||
let elements = fast_connected_elements_with_id(root, id, quirks_mode)?;
|
let elements = fast_connected_elements_with_id(
|
||||||
|
root,
|
||||||
|
id,
|
||||||
|
class_and_id_case_sensitivity,
|
||||||
|
)?;
|
||||||
if elements.is_empty() {
|
if elements.is_empty() {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
@ -607,9 +610,8 @@ where
|
||||||
|
|
||||||
match simple_filter {
|
match simple_filter {
|
||||||
SimpleFilter::Class(ref class) => {
|
SimpleFilter::Class(ref class) => {
|
||||||
let case_sensitivity = quirks_mode.classes_and_ids_case_sensitivity();
|
|
||||||
collect_all_elements::<E, Q, _>(root, results, |element| {
|
collect_all_elements::<E, Q, _>(root, results, |element| {
|
||||||
element.has_class(class, case_sensitivity) &&
|
element.has_class(class, class_and_id_case_sensitivity) &&
|
||||||
matching::matches_selector_list(selector_list, &element, matching_context)
|
matching::matches_selector_list(selector_list, &element, matching_context)
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue