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
This commit is contained in:
Emilio Cobos Álvarez 2021-01-04 17:56:33 +00:00
parent b8d46406f6
commit 892b0ffb5d

View file

@ -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