style: Update layer ordering to follow the spec

The bitfield approach worked when the layer order was in pre-order, but
the spec was changed to make it work like post-order and I don't think
there's a way to keep it working like that, so keep the layer order in a
separate data structure that we look up when going from Rule to
ApplicableDeclarationBlock.

This is just a vector index operation so hopefully shouldn't be too bad.

This patch intentionally regresses @keyframe handling to some extent,
since we need a bit more complicated approach and it seemed worth
implementing in a separate patch.

Depends on D129380

Differential Revision: https://phabricator.services.mozilla.com/D129381
This commit is contained in:
Emilio Cobos Álvarez 2023-05-27 17:36:01 +02:00 committed by Oriol Brufau
parent 5f2a29659f
commit 1b2ef21c8c
6 changed files with 190 additions and 164 deletions

View file

@ -12,7 +12,7 @@ use crate::hash::map as hash_map;
use crate::hash::{HashMap, HashSet};
use crate::rule_tree::CascadeLevel;
use crate::selector_parser::SelectorImpl;
use crate::stylist::Rule;
use crate::stylist::{Rule, CascadeData};
use crate::{Atom, LocalName, Namespace, WeakAtom};
use fallible::FallibleVec;
use hashglobe::FailedAllocationError;
@ -189,6 +189,7 @@ impl SelectorMap<Rule> {
context: &mut MatchingContext<E::Impl>,
flags_setter: &mut F,
cascade_level: CascadeLevel,
cascade_data: &CascadeData,
) where
E: TElement,
F: FnMut(&E, ElementSelectorFlags),
@ -207,6 +208,7 @@ impl SelectorMap<Rule> {
context,
flags_setter,
cascade_level,
cascade_data,
);
}
@ -219,6 +221,7 @@ impl SelectorMap<Rule> {
context,
flags_setter,
cascade_level,
cascade_data,
)
}
}
@ -232,6 +235,7 @@ impl SelectorMap<Rule> {
context,
flags_setter,
cascade_level,
cascade_data,
)
}
});
@ -246,6 +250,7 @@ impl SelectorMap<Rule> {
context,
flags_setter,
cascade_level,
cascade_data,
)
}
});
@ -259,6 +264,7 @@ impl SelectorMap<Rule> {
context,
flags_setter,
cascade_level,
cascade_data,
)
}
@ -270,6 +276,7 @@ impl SelectorMap<Rule> {
context,
flags_setter,
cascade_level,
cascade_data,
)
}
@ -280,6 +287,7 @@ impl SelectorMap<Rule> {
context,
flags_setter,
cascade_level,
cascade_data,
);
}
@ -291,6 +299,7 @@ impl SelectorMap<Rule> {
context: &mut MatchingContext<E::Impl>,
flags_setter: &mut F,
cascade_level: CascadeLevel,
cascade_data: &CascadeData,
) where
E: TElement,
F: FnMut(&E, ElementSelectorFlags),
@ -304,7 +313,7 @@ impl SelectorMap<Rule> {
context,
flags_setter,
) {
matching_rules.push(rule.to_applicable_declaration_block(cascade_level));
matching_rules.push(rule.to_applicable_declaration_block(cascade_level, cascade_data));
}
}
}