Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Change repr of Servo enum PseudoElement from usize to u8
Every fragment in the fragment tree stores:

```rust
pub struct PseudoElementChain {
    pub primary: Option<PseudoElement>,
    pub secondary: Option<PseudoElement>,
}
```

… so this change reduces memory use slightly

Signed-off-by: Simon Sapin <simon@igalia.com>
  • Loading branch information
SimonSapin committed Aug 4, 2026
commit 57edfebff597ca7b77bdab4e89a853426baf7d98
5 changes: 3 additions & 2 deletions style/servo/selector_parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ use style_traits::{ParseError, StyleParseErrorKind};
Clone, Copy, Debug, Deserialize, Eq, Hash, MallocSizeOf, PartialEq, Serialize, ToShmem,
)]
#[allow(missing_docs)]
#[repr(usize)]
#[repr(u8)]
pub enum PseudoElement {
// Eager pseudos. Keep these first so that eager_index() works.
After = 0,
Expand Down Expand Up @@ -151,8 +151,9 @@ impl PseudoElement {
/// Creates a pseudo-element from an eager index.
#[inline]
pub fn from_eager_index(i: usize) -> Self {
const _: () = assert!(EAGER_PSEUDO_COUNT <= (u8::MAX as usize));
assert!(i < EAGER_PSEUDO_COUNT);
let result: PseudoElement = unsafe { mem::transmute(i) };
let result: PseudoElement = unsafe { mem::transmute(i as u8) };
debug_assert!(result.is_eager());
result
}
Expand Down