From 892b0ffb5da78c753c44ae6fe4b83a4374a27345 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Mon, 4 Jan 2021 17:56:33 +0000 Subject: [PATCH] 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 --- components/style/gecko/snapshot_helpers.rs | 9 ++++++--- 1 file 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>; + 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