@@ -287,29 +287,21 @@ pub fn char_lit(lit: &str) -> (char, isize) {
287287 use std:: char;
288288
289289 let mut chars = lit. chars ( ) ;
290- let c = match ( chars. next ( ) , chars. next ( ) ) {
290+ match ( chars. next ( ) , chars. next ( ) ) {
291291 ( Some ( c) , None ) if c != '\\' => return ( c, 1 ) ,
292292 ( 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+ _ => { }
301301 } ,
302302 _ => panic ! ( "lexer accepted invalid char escape `{}`" , lit)
303303 } ;
304304
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-
313305 fn esc ( len : usize , lit : & str ) -> Option < ( char , isize ) > {
314306 u32:: from_str_radix ( & lit[ 2 ..len] , 16 ) . ok ( )
315307 . and_then ( char:: from_u32)
@@ -318,7 +310,10 @@ pub fn char_lit(lit: &str) -> (char, isize) {
318310
319311 let unicode_escape = || -> Option < ( char , isize ) > {
320312 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+
322317 let subslice = & lit[ 3 ..idx] ;
323318 u32:: from_str_radix ( subslice, 16 ) . ok ( )
324319 . and_then ( char:: from_u32)
@@ -334,7 +329,9 @@ pub fn char_lit(lit: &str) -> (char, isize) {
334329 'u' => unicode_escape ( ) ,
335330 'U' => esc ( 10 , lit) ,
336331 _ => None ,
337- } . expect ( msg2) ;
332+ } . unwrap_or_else ( || {
333+ panic ! ( "lexer should have rejected a bad character escape {}" , lit)
334+ } )
338335}
339336
340337/// Parse a string representing a string literal into its final form. Does
0 commit comments