@@ -747,27 +747,34 @@ fn next_token_inner(rdr: @mut StringReader) -> token::Token {
747747 }
748748
749749 // Otherwise it is a character constant:
750- if c2 == '\\' {
751- // '\X' for some X must be a character constant:
752- let escaped = rdr. curr ;
753- let escaped_pos = rdr. last_pos ;
754- bump ( rdr) ;
755- match escaped {
756- 'n' => { c2 = '\n' ; }
757- 'r' => { c2 = '\r' ; }
758- 't' => { c2 = '\t' ; }
759- '\\' => { c2 = '\\' ; }
760- '\'' => { c2 = '\'' ; }
761- '"' => { c2 = '"' ; }
762- '0' => { c2 = '\x00' ; }
763- 'x' => { c2 = scan_numeric_escape ( rdr, 2 u) ; }
764- 'u' => { c2 = scan_numeric_escape ( rdr, 4 u) ; }
765- 'U' => { c2 = scan_numeric_escape ( rdr, 8 u) ; }
766- c2 => {
767- fatal_span_char ( rdr, escaped_pos, rdr. last_pos ,
768- ~"unknown character escape", c2) ;
769- }
750+ match c2 {
751+ '\\' => {
752+ // '\X' for some X must be a character constant:
753+ let escaped = rdr. curr ;
754+ let escaped_pos = rdr. last_pos ;
755+ bump ( rdr) ;
756+ match escaped {
757+ 'n' => { c2 = '\n' ; }
758+ 'r' => { c2 = '\r' ; }
759+ 't' => { c2 = '\t' ; }
760+ '\\' => { c2 = '\\' ; }
761+ '\'' => { c2 = '\'' ; }
762+ '"' => { c2 = '"' ; }
763+ '0' => { c2 = '\x00' ; }
764+ 'x' => { c2 = scan_numeric_escape ( rdr, 2 u) ; }
765+ 'u' => { c2 = scan_numeric_escape ( rdr, 4 u) ; }
766+ 'U' => { c2 = scan_numeric_escape ( rdr, 8 u) ; }
767+ c2 => {
768+ fatal_span_char ( rdr, escaped_pos, rdr. last_pos ,
769+ ~"unknown character escape", c2) ;
770+ }
771+ }
772+ }
773+ '\t' | '\n' | '\r' | '\'' => {
774+ fatal_span_char ( rdr, start, rdr. last_pos ,
775+ ~"character constant must be escaped", c2) ;
770776 }
777+ _ => { }
771778 }
772779 if rdr. curr != '\'' {
773780 fatal_span_verbose ( rdr,
@@ -973,7 +980,7 @@ mod test {
973980 }
974981
975982 #[ test] fn character_escaped ( ) {
976- let env = setup ( @"'\n' ") ;
983+ let env = setup ( @"' \\ n' ") ;
977984 let TokenAndSpan { tok, sp : _} =
978985 env. string_reader . next_token ( ) ;
979986 assert_eq ! ( tok, token:: LIT_CHAR ( '\n' as u32 ) ) ;
0 commit comments