@@ -266,17 +266,10 @@ where
266
266
fn next ( & mut self ) -> Option < Self :: Item > {
267
267
loop {
268
268
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 ( ) {
271
270
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 ( ) ;
280
273
let result = {
281
274
let parser = & mut self . parser ;
282
275
// FIXME: https://github.com/servo/rust-cssparser/issues/254
@@ -288,18 +281,20 @@ where
288
281
} ;
289
282
return Some ( result. map_err ( |e| ( e, self . input . slice_from ( start. position ( ) ) ) ) ) ;
290
283
}
291
- Ok ( Err ( name) ) => {
292
- // At-keyword
284
+ Ok ( & Token :: AtKeyword ( ref name) ) => {
285
+ let name = name . clone ( ) ;
293
286
return Some ( parse_at_rule ( & start, name, self . input , & mut self . parser ) ) ;
294
287
}
295
- Err ( token) => {
288
+ Ok ( token) => {
289
+ let token = token. clone ( ) ;
296
290
let result = self . input . parse_until_after ( Delimiter :: Semicolon , |_| {
297
291
Err ( start
298
292
. source_location ( )
299
- . new_unexpected_token_error ( token. clone ( ) ) )
293
+ . new_unexpected_token_error ( token) )
300
294
} ) ;
301
295
return Some ( result. map_err ( |e| ( e, self . input . slice_from ( start. position ( ) ) ) ) ) ;
302
296
}
297
+ Err ( ..) => return None ,
303
298
}
304
299
}
305
300
}
@@ -374,21 +369,18 @@ where
374
369
}
375
370
let start = self . input . state ( ) ;
376
371
377
- let at_keyword;
378
- match self . input . next_byte ( ) {
379
- Some ( b'@' ) => {
372
+ let at_keyword = match self . input . next_byte ( ) ? {
373
+ b'@' => {
380
374
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
+ } ,
387
380
}
388
381
}
389
- Some ( _) => at_keyword = None ,
390
- None => return None ,
391
- }
382
+ _ => None ,
383
+ } ;
392
384
393
385
if let Some ( name) = at_keyword {
394
386
let first_stylesheet_rule = self . is_stylesheet && !self . any_rule_so_far ;
@@ -444,20 +436,17 @@ where
444
436
input. parse_entirely ( |input| {
445
437
input. skip_whitespace ( ) ;
446
438
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'@' ) {
450
440
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
+ }
457
446
}
458
447
} else {
459
- at_keyword = None
460
- }
448
+ None
449
+ } ;
461
450
462
451
if let Some ( name) = at_keyword {
463
452
parse_at_rule ( & start, name, input, parser) . map_err ( |e| e. 0 )
0 commit comments