@@ -136,6 +136,7 @@ bitflags! {
136136
137137 const AFTER_WEBKIT_SCROLLBAR = 1 << 8 ;
138138 const AFTER_VIEW_TRANSITION = 1 << 9 ;
139+ const AFTER_UNKNOWN_PSEUDO_ELEMENT = 1 << 10 ;
139140 }
140141}
141142
@@ -2004,9 +2005,6 @@ where
20042005
20052006 let mut builder = SelectorBuilder :: default ( ) ;
20062007
2007- let mut has_pseudo_element = false ;
2008- let mut slotted = false ;
2009- let mut part = false ;
20102008 ' outer_loop: loop {
20112009 // Parse a sequence of simple selectors.
20122010 let empty = parse_compound_selector ( parser, state, input, & mut builder) ?;
@@ -2019,10 +2017,6 @@ where
20192017 }
20202018
20212019 if state. intersects ( SelectorParsingState :: AFTER_PSEUDO ) {
2022- has_pseudo_element = state. intersects ( SelectorParsingState :: AFTER_PSEUDO_ELEMENT ) ;
2023- slotted = state. intersects ( SelectorParsingState :: AFTER_SLOTTED ) ;
2024- part = state. intersects ( SelectorParsingState :: AFTER_PART ) ;
2025- debug_assert ! ( has_pseudo_element || slotted || part) ;
20262020 break ;
20272021 }
20282022
@@ -2102,6 +2096,10 @@ where
21022096 }
21032097 }
21042098
2099+ let has_pseudo_element = state
2100+ . intersects ( SelectorParsingState :: AFTER_PSEUDO_ELEMENT | SelectorParsingState :: AFTER_UNKNOWN_PSEUDO_ELEMENT ) ;
2101+ let slotted = state. intersects ( SelectorParsingState :: AFTER_SLOTTED ) ;
2102+ let part = state. intersects ( SelectorParsingState :: AFTER_PART ) ;
21052103 let ( spec, components) = builder. build ( has_pseudo_element, slotted, part) ;
21062104 Ok ( Selector ( spec, components) )
21072105}
@@ -2647,6 +2645,8 @@ where
26472645 if !p. is_unknown ( ) {
26482646 state. insert ( SelectorParsingState :: AFTER_PSEUDO_ELEMENT ) ;
26492647 builder. push_combinator ( Combinator :: PseudoElement ) ;
2648+ } else {
2649+ state. insert ( SelectorParsingState :: AFTER_UNKNOWN_PSEUDO_ELEMENT ) ;
26502650 }
26512651 if !p. accepts_state_pseudo_classes ( ) {
26522652 state. insert ( SelectorParsingState :: AFTER_NON_STATEFUL_PSEUDO_ELEMENT ) ;
0 commit comments