aboutsummaryrefslogtreecommitdiffstats
path: root/components/style/gecko/snapshot_helpers.rs
diff options
context:
space:
mode:
authorEmilio Cobos Álvarez <emilio@crisal.io>2021-01-04 17:56:33 +0000
committerEmilio Cobos Álvarez <emilio@crisal.io>2021-02-26 16:44:05 +0100
commit892b0ffb5da78c753c44ae6fe4b83a4374a27345 (patch)
tree7805ae007615f7f111aeb319095af36ff5f54c3c /components/style/gecko/snapshot_helpers.rs
parentb8d46406f64507b031c662d2a4fde4eccb5f8ccc (diff)
downloadservo-892b0ffb5da78c753c44ae6fe4b83a4374a27345.tar.gz
servo-892b0ffb5da78c753c44ae6fe4b83a4374a27345.zip
style: Use an AutoTArray for atom arrays in attributes (class / part).
These are never empty, and storing 4 elements inline seems worth it given we also heap-allocate the array itself. Depends on D100592 Differential Revision: https://phabricator.services.mozilla.com/D100593
Diffstat (limited to 'components/style/gecko/snapshot_helpers.rs')
-rw-r--r--components/style/gecko/snapshot_helpers.rs9
1 files changed, 6 insertions, 3 deletions
diff --git a/components/style/gecko/snapshot_helpers.rs b/components/style/gecko/snapshot_helpers.rs
index f34fca40f1c..8d99f84a958 100644
--- a/components/style/gecko/snapshot_helpers.rs
+++ b/components/style/gecko/snapshot_helpers.rs
@@ -43,14 +43,16 @@ unsafe fn get_class_or_part_from_attr(attr: &structs::nsAttrValue) -> Class {
(*container).mType,
structs::nsAttrValue_ValueType_eAtomArray
);
- let array = (*container)
+ // NOTE: Bindgen doesn't deal with AutoTArray, so cast it below.
+ let array: *mut u8 = *(*container)
.__bindgen_anon_1
.mValue
.as_ref()
.__bindgen_anon_1
.mAtomArray
.as_ref();
- return Class::More(&***array)
+ let array = array as *const structs::nsTArray<structs::RefPtr<nsAtom>>;
+ return Class::More(&**array)
}
debug_assert_eq!(base_type, structs::nsAttrValue_ValueBaseType_eStringBase);
Class::None
@@ -132,7 +134,8 @@ pub fn has_class_or_part(
Class::One(atom) => unsafe { case_sensitivity.eq_atom(name, WeakAtom::new(atom)) },
Class::More(atoms) => match case_sensitivity {
CaseSensitivity::CaseSensitive => {
- atoms.iter().any(|atom| atom.mRawPtr == name.as_ptr())
+ let name_ptr = name.as_ptr();
+ atoms.iter().any(|atom| atom.mRawPtr == name_ptr)
},
CaseSensitivity::AsciiCaseInsensitive => unsafe {
atoms