Expand description

Applicable declarations management.


Stores the source order of a block, the cascade level it belongs to, and the counter needed to handle Shadow DOM cascade order properly.

A property declaration together with its precedence among rules of equal specificity so that we can sort them.


We pack the cascade level in a single byte, see CascadeLevel::to_byte_lossy for the different trade-offs there.

Blink uses 18 bits to store source order, and does not check overflow [1]. That’s a limit that could be reached in realistic webpages, so we use 24 bits and enforce defined behavior in the overflow case.

Type Definitions

List of applicable declarations. This is a transient structure that shuttles declarations between selector matching and inserting into the rule tree, and therefore we want to avoid heap-allocation where possible.