diff options
author | Emilio Cobos Álvarez <emilio@crisal.io> | 2021-01-04 17:56:33 +0000 |
---|---|---|
committer | Emilio Cobos Álvarez <emilio@crisal.io> | 2021-02-26 16:44:05 +0100 |
commit | 892b0ffb5da78c753c44ae6fe4b83a4374a27345 (patch) | |
tree | 7805ae007615f7f111aeb319095af36ff5f54c3c /components/style/gecko/snapshot_helpers.rs | |
parent | b8d46406f64507b031c662d2a4fde4eccb5f8ccc (diff) | |
download | servo-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.rs | 9 |
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 |