@@ -287,29 +287,21 @@ pub fn char_lit(lit: &str) -> (char, isize) {
287
287
use std:: char;
288
288
289
289
let mut chars = lit. chars ( ) ;
290
- let c = match ( chars. next ( ) , chars. next ( ) ) {
290
+ match ( chars. next ( ) , chars. next ( ) ) {
291
291
( Some ( c) , None ) if c != '\\' => return ( c, 1 ) ,
292
292
( Some ( '\\' ) , Some ( c) ) => match c {
293
- '"' => Some ( '"' ) ,
294
- 'n' => Some ( '\n' ) ,
295
- 'r' => Some ( '\r' ) ,
296
- 't' => Some ( '\t' ) ,
297
- '\\' => Some ( '\\' ) ,
298
- '\'' => Some ( '\'' ) ,
299
- '0' => Some ( '\0' ) ,
300
- _ => { None }
293
+ '"' => return ( '"' , 2 ) ,
294
+ 'n' => return ( '\n' , 2 ) ,
295
+ 'r' => return ( '\r' , 2 ) ,
296
+ 't' => return ( '\t' , 2 ) ,
297
+ '\\' => return ( '\\' , 2 ) ,
298
+ '\'' => return ( '\'' , 2 ) ,
299
+ '0' => return ( '\0' , 2 ) ,
300
+ _ => { }
301
301
} ,
302
302
_ => panic ! ( "lexer accepted invalid char escape `{}`" , lit)
303
303
} ;
304
304
305
- match c {
306
- Some ( x) => return ( x, 2 ) ,
307
- None => { }
308
- }
309
-
310
- let msg = format ! ( "lexer should have rejected a bad character escape {}" , lit) ;
311
- let msg2 = & msg[ ..] ;
312
-
313
305
fn esc ( len : usize , lit : & str ) -> Option < ( char , isize ) > {
314
306
u32:: from_str_radix ( & lit[ 2 ..len] , 16 ) . ok ( )
315
307
. and_then ( char:: from_u32)
@@ -318,7 +310,10 @@ pub fn char_lit(lit: &str) -> (char, isize) {
318
310
319
311
let unicode_escape = || -> Option < ( char , isize ) > {
320
312
if lit. as_bytes ( ) [ 2 ] == b'{' {
321
- let idx = lit. find ( '}' ) . expect ( msg2) ;
313
+ let idx = lit. find ( '}' ) . unwrap_or_else ( || {
314
+ panic ! ( "lexer should have rejected a bad character escape {}" , lit)
315
+ } ) ;
316
+
322
317
let subslice = & lit[ 3 ..idx] ;
323
318
u32:: from_str_radix ( subslice, 16 ) . ok ( )
324
319
. and_then ( char:: from_u32)
@@ -334,7 +329,9 @@ pub fn char_lit(lit: &str) -> (char, isize) {
334
329
'u' => unicode_escape ( ) ,
335
330
'U' => esc ( 10 , lit) ,
336
331
_ => None ,
337
- } . expect ( msg2) ;
332
+ } . unwrap_or_else ( || {
333
+ panic ! ( "lexer should have rejected a bad character escape {}" , lit)
334
+ } )
338
335
}
339
336
340
337
/// Parse a string representing a string literal into its final form. Does
0 commit comments