55use attr:: { AttrSelectorWithNamespace , ParsedAttrSelectorOperation , AttrSelectorOperator } ;
66use attr:: { ParsedCaseSensitivity , SELECTOR_WHITESPACE , NamespaceConstraint } ;
77use bloom:: BLOOM_HASH_MASK ;
8- use cssparser:: { ParseError , BasicParseError } ;
8+ use cssparser:: { ParseError , BasicParseError , CompactCowStr } ;
99use cssparser:: { Token , Parser as CssParser , parse_nth, ToCss , serialize_identifier, CssStringWriter } ;
1010use precomputed_hash:: PrecomputedHash ;
1111use servo_arc:: { Arc , HeaderWithLength , ThinArc } ;
@@ -58,7 +58,7 @@ pub enum SelectorParseError<'i, T> {
5858 PseudoElementExpectedColon ,
5959 PseudoElementExpectedIdent ,
6060 UnsupportedPseudoClass ,
61- UnexpectedIdent ( Cow < ' i , str > ) ,
61+ UnexpectedIdent ( CompactCowStr < ' i > ) ,
6262 ExpectedNamespace ,
6363 Custom ( T ) ,
6464}
@@ -133,21 +133,21 @@ pub trait Parser<'i> {
133133
134134 /// This function can return an "Err" pseudo-element in order to support CSS2.1
135135 /// pseudo-elements.
136- fn parse_non_ts_pseudo_class ( & self , name : Cow < ' i , str > )
136+ fn parse_non_ts_pseudo_class ( & self , name : CompactCowStr < ' i > )
137137 -> Result < <Self :: Impl as SelectorImpl >:: NonTSPseudoClass ,
138138 ParseError < ' i , SelectorParseError < ' i , Self :: Error > > > {
139139 Err ( ParseError :: Custom ( SelectorParseError :: UnexpectedIdent ( name) ) )
140140 }
141141
142142 fn parse_non_ts_functional_pseudo_class < ' t >
143- ( & self , name : Cow < ' i , str > , _arguments : & mut CssParser < ' i , ' t > )
143+ ( & self , name : CompactCowStr < ' i > , _arguments : & mut CssParser < ' i , ' t > )
144144 -> Result < <Self :: Impl as SelectorImpl >:: NonTSPseudoClass ,
145145 ParseError < ' i , SelectorParseError < ' i , Self :: Error > > >
146146 {
147147 Err ( ParseError :: Custom ( SelectorParseError :: UnexpectedIdent ( name) ) )
148148 }
149149
150- fn parse_pseudo_element ( & self , name : Cow < ' i , str > )
150+ fn parse_pseudo_element ( & self , name : CompactCowStr < ' i > )
151151 -> Result < <Self :: Impl as SelectorImpl >:: PseudoElement ,
152152 ParseError < ' i , SelectorParseError < ' i , Self :: Error > > > {
153153 Err ( ParseError :: Custom ( SelectorParseError :: UnexpectedIdent ( name) ) )
@@ -1152,7 +1152,7 @@ fn parse_type_selector<'i, 't, P, E, Impl>(parser: &P, input: &mut CssParser<'i,
11521152 Some ( name) => {
11531153 sequence. push ( Component :: LocalName ( LocalName {
11541154 lower_name : from_cow_str ( to_ascii_lowercase ( & name) ) ,
1155- name : from_cow_str ( name) ,
1155+ name : from_cow_str ( name. into ( ) ) ,
11561156 } ) )
11571157 }
11581158 None => {
@@ -1186,7 +1186,7 @@ enum QNamePrefix<Impl: SelectorImpl> {
11861186fn parse_qualified_name < ' i , ' t , P , E , Impl >
11871187 ( parser : & P , input : & mut CssParser < ' i , ' t > ,
11881188 in_attr_selector : bool )
1189- -> Result < Option < ( QNamePrefix < Impl > , Option < Cow < ' i , str > > ) > ,
1189+ -> Result < Option < ( QNamePrefix < Impl > , Option < CompactCowStr < ' i > > ) > ,
11901190 ParseError < ' i , SelectorParseError < ' i , E > > >
11911191 where P : Parser < ' i , Impl =Impl , Error =E > , Impl : SelectorImpl
11921192{
@@ -1217,7 +1217,7 @@ fn parse_qualified_name<'i, 't, P, E, Impl>
12171217 let position = input. position ( ) ;
12181218 match input. next_including_whitespace ( ) {
12191219 Ok ( Token :: Delim ( '|' ) ) => {
1220- let prefix = from_cow_str ( value) ;
1220+ let prefix = from_cow_str ( value. into ( ) ) ;
12211221 let result = parser. namespace_for_prefix ( & prefix) ;
12221222 let url = result. ok_or ( ParseError :: Custom ( SelectorParseError :: ExpectedNamespace ) ) ?;
12231223 explicit_namespace ( input, QNamePrefix :: ExplicitNamespace ( prefix, url) )
@@ -1300,7 +1300,7 @@ fn parse_attribute_selector<'i, 't, P, E, Impl>(parser: &P, input: &mut CssParse
13001300 // [foo]
13011301 Err ( _) => {
13021302 let local_name_lower = from_cow_str ( to_ascii_lowercase ( & local_name) ) ;
1303- let local_name = from_cow_str ( local_name) ;
1303+ let local_name = from_cow_str ( local_name. into ( ) ) ;
13041304 if let Some ( namespace) = namespace {
13051305 return Ok ( Component :: AttributeOther ( Box :: new ( AttrSelectorWithNamespace {
13061306 namespace : namespace,
@@ -1358,7 +1358,7 @@ fn parse_attribute_selector<'i, 't, P, E, Impl>(parser: &P, input: &mut CssParse
13581358
13591359 let mut case_sensitivity = parse_attribute_flags ( input) ?;
13601360
1361- let value = from_cow_str ( value) ;
1361+ let value = from_cow_str ( value. into ( ) ) ;
13621362 let local_name_lower;
13631363 {
13641364 let local_name_lower_cow = to_ascii_lowercase ( & local_name) ;
@@ -1371,9 +1371,9 @@ fn parse_attribute_selector<'i, 't, P, E, Impl>(parser: &P, input: &mut CssParse
13711371 ParsedCaseSensitivity :: AsciiCaseInsensitiveIfInHtmlElementInHtmlDocument
13721372 }
13731373 }
1374- local_name_lower = from_cow_str ( local_name_lower_cow) ;
1374+ local_name_lower = from_cow_str ( local_name_lower_cow. into ( ) ) ;
13751375 }
1376- let local_name = from_cow_str ( local_name) ;
1376+ let local_name = from_cow_str ( local_name. into ( ) ) ;
13771377 if let Some ( namespace) = namespace {
13781378 Ok ( Component :: AttributeOther ( Box :: new ( AttrSelectorWithNamespace {
13791379 namespace : namespace,
@@ -1551,7 +1551,7 @@ fn parse_compound_selector<'i, 't, P, E, Impl>(
15511551
15521552fn parse_functional_pseudo_class < ' i , ' t , P , E , Impl > ( parser : & P ,
15531553 input : & mut CssParser < ' i , ' t > ,
1554- name : Cow < ' i , str > ,
1554+ name : CompactCowStr < ' i > ,
15551555 inside_negation : bool )
15561556 -> Result < Component < Impl > ,
15571557 ParseError < ' i , SelectorParseError < ' i , E > > >
@@ -1599,13 +1599,13 @@ fn parse_one_simple_selector<'i, 't, P, E, Impl>(parser: &P,
15991599 let start_position = input. position ( ) ;
16001600 match input. next_including_whitespace ( ) {
16011601 Ok ( Token :: IDHash ( id) ) => {
1602- let id = Component :: ID ( from_cow_str ( id) ) ;
1602+ let id = Component :: ID ( from_cow_str ( id. into ( ) ) ) ;
16031603 Ok ( Some ( SimpleSelectorParseResult :: SimpleSelector ( id) ) )
16041604 }
16051605 Ok ( Token :: Delim ( '.' ) ) => {
16061606 match input. next_including_whitespace ( ) {
16071607 Ok ( Token :: Ident ( class) ) => {
1608- let class = Component :: Class ( from_cow_str ( class) ) ;
1608+ let class = Component :: Class ( from_cow_str ( class. into ( ) ) ) ;
16091609 Ok ( Some ( SimpleSelectorParseResult :: SimpleSelector ( class) ) )
16101610 }
16111611 Ok ( t) => Err ( ParseError :: Basic ( BasicParseError :: UnexpectedToken ( t) ) ) ,
@@ -1659,7 +1659,7 @@ fn parse_one_simple_selector<'i, 't, P, E, Impl>(parser: &P,
16591659 }
16601660}
16611661
1662- fn parse_simple_pseudo_class < ' i , P , E , Impl > ( parser : & P , name : Cow < ' i , str > )
1662+ fn parse_simple_pseudo_class < ' i , P , E , Impl > ( parser : & P , name : CompactCowStr < ' i > )
16631663 -> Result < Component < Impl > ,
16641664 ParseError < ' i , SelectorParseError < ' i , E > > >
16651665 where P : Parser < ' i , Impl =Impl , Error =E > , Impl : SelectorImpl
@@ -1804,7 +1804,7 @@ pub mod tests {
18041804 type Impl = DummySelectorImpl ;
18051805 type Error = ( ) ;
18061806
1807- fn parse_non_ts_pseudo_class ( & self , name : Cow < ' i , str > )
1807+ fn parse_non_ts_pseudo_class ( & self , name : CompactCowStr < ' i > )
18081808 -> Result < PseudoClass ,
18091809 ParseError < ' i , SelectorParseError < ' i , ( ) > > > {
18101810 match_ignore_ascii_case ! { & name,
@@ -1814,7 +1814,7 @@ pub mod tests {
18141814 }
18151815 }
18161816
1817- fn parse_non_ts_functional_pseudo_class < ' t > ( & self , name : Cow < ' i , str > ,
1817+ fn parse_non_ts_functional_pseudo_class < ' t > ( & self , name : CompactCowStr < ' i > ,
18181818 parser : & mut CssParser < ' i , ' t > )
18191819 -> Result < PseudoClass ,
18201820 ParseError < ' i , SelectorParseError < ' i , ( ) > > > {
@@ -1824,7 +1824,7 @@ pub mod tests {
18241824 }
18251825 }
18261826
1827- fn parse_pseudo_element ( & self , name : Cow < ' i , str > )
1827+ fn parse_pseudo_element ( & self , name : CompactCowStr < ' i > )
18281828 -> Result < PseudoElement ,
18291829 ParseError < ' i , SelectorParseError < ' i , ( ) > > > {
18301830 match_ignore_ascii_case ! { & name,
0 commit comments