@@ -266,17 +266,10 @@ where
266266 fn next ( & mut self ) -> Option < Self :: Item > {
267267 loop {
268268 let start = self . input . state ( ) ;
269- // FIXME: remove intermediate variable when lifetimes are non-lexical
270- let ident = match self . input . next_including_whitespace_and_comments ( ) {
269+ match self . input . next_including_whitespace_and_comments ( ) {
271270 Ok ( & Token :: WhiteSpace ( _) ) | Ok ( & Token :: Comment ( _) ) | Ok ( & Token :: Semicolon ) => continue ,
272- Ok ( & Token :: Ident ( ref name) ) => Ok ( Ok ( name. clone ( ) ) ) ,
273- Ok ( & Token :: AtKeyword ( ref name) ) => Ok ( Err ( name. clone ( ) ) ) ,
274- Ok ( token) => Err ( token. clone ( ) ) ,
275- Err ( _) => return None ,
276- } ;
277- match ident {
278- Ok ( Ok ( name) ) => {
279- // Ident
271+ Ok ( & Token :: Ident ( ref name) ) => {
272+ let name = name. clone ( ) ;
280273 let result = {
281274 let parser = & mut self . parser ;
282275 // FIXME: https://github.com/servo/rust-cssparser/issues/254
@@ -288,18 +281,20 @@ where
288281 } ;
289282 return Some ( result. map_err ( |e| ( e, self . input . slice_from ( start. position ( ) ) ) ) ) ;
290283 }
291- Ok ( Err ( name) ) => {
292- // At-keyword
284+ Ok ( & Token :: AtKeyword ( ref name) ) => {
285+ let name = name . clone ( ) ;
293286 return Some ( parse_at_rule ( & start, name, self . input , & mut self . parser ) ) ;
294287 }
295- Err ( token) => {
288+ Ok ( token) => {
289+ let token = token. clone ( ) ;
296290 let result = self . input . parse_until_after ( Delimiter :: Semicolon , |_| {
297291 Err ( start
298292 . source_location ( )
299- . new_unexpected_token_error ( token. clone ( ) ) )
293+ . new_unexpected_token_error ( token) )
300294 } ) ;
301295 return Some ( result. map_err ( |e| ( e, self . input . slice_from ( start. position ( ) ) ) ) ) ;
302296 }
297+ Err ( ..) => return None ,
303298 }
304299 }
305300 }
@@ -374,21 +369,18 @@ where
374369 }
375370 let start = self . input . state ( ) ;
376371
377- let at_keyword;
378- match self . input . next_byte ( ) {
379- Some ( b'@' ) => {
372+ let at_keyword = match self . input . next_byte ( ) ? {
373+ b'@' => {
380374 match self . input . next_including_whitespace_and_comments ( ) {
381- Ok ( & Token :: AtKeyword ( ref name) ) => at_keyword = Some ( name. clone ( ) ) ,
382- _ => at_keyword = None ,
383- }
384- // FIXME: move this back inside `match` when lifetimes are non-lexical
385- if at_keyword. is_none ( ) {
386- self . input . reset ( & start)
375+ Ok ( & Token :: AtKeyword ( ref name) ) => Some ( name. clone ( ) ) ,
376+ _ => {
377+ self . input . reset ( & start) ;
378+ None
379+ } ,
387380 }
388381 }
389- Some ( _) => at_keyword = None ,
390- None => return None ,
391- }
382+ _ => None ,
383+ } ;
392384
393385 if let Some ( name) = at_keyword {
394386 let first_stylesheet_rule = self . is_stylesheet && !self . any_rule_so_far ;
@@ -444,20 +436,17 @@ where
444436 input. parse_entirely ( |input| {
445437 input. skip_whitespace ( ) ;
446438 let start = input. state ( ) ;
447-
448- let at_keyword;
449- if input. next_byte ( ) == Some ( b'@' ) {
439+ let at_keyword = if input. next_byte ( ) == Some ( b'@' ) {
450440 match * input. next_including_whitespace_and_comments ( ) ? {
451- Token :: AtKeyword ( ref name) => at_keyword = Some ( name. clone ( ) ) ,
452- _ => at_keyword = None ,
453- }
454- // FIXME: move this back inside `match` when lifetimes are non-lexical
455- if at_keyword. is_none ( ) {
456- input. reset ( & start)
441+ Token :: AtKeyword ( ref name) => Some ( name. clone ( ) ) ,
442+ _ => {
443+ input. reset ( & start) ;
444+ None
445+ }
457446 }
458447 } else {
459- at_keyword = None
460- }
448+ None
449+ } ;
461450
462451 if let Some ( name) = at_keyword {
463452 parse_at_rule ( & start, name, input, parser) . map_err ( |e| e. 0 )
0 commit comments