@@ -232,7 +232,7 @@ where
232232 let mut saw_b = false ;
233233 let mut saw_r = false ;
234234 let mut saw_u = false ;
235- let saw_f = false ;
235+ let mut saw_f = false ;
236236 loop {
237237 // Detect r"", f"", b"" and u""
238238 // TODO: handle f-strings
@@ -242,10 +242,12 @@ where
242242 && ( self . chr0 == Some ( 'u' ) || self . chr0 == Some ( 'U' ) )
243243 {
244244 saw_u = true ;
245- } else if !( saw_r || saw_u || saw_f)
246- && ( self . chr0 == Some ( 'r' ) || self . chr0 == Some ( 'R' ) )
247- {
245+ } else if !( saw_r || saw_u) && ( self . chr0 == Some ( 'r' ) || self . chr0 == Some ( 'R' ) ) {
248246 saw_r = true ;
247+ } else if !( saw_b || saw_u || saw_f)
248+ && ( self . chr0 == Some ( 'f' ) || self . chr0 == Some ( 'F' ) )
249+ {
250+ saw_f = true ;
249251 } else {
250252 break ;
251253 }
@@ -313,7 +315,7 @@ where
313315
314316 fn lex_string (
315317 & mut self ,
316- _is_bytes : bool ,
318+ is_bytes : bool ,
317319 is_raw : bool ,
318320 _is_unicode : bool ,
319321 _is_fstring : bool ,
@@ -400,13 +402,17 @@ where
400402 }
401403 let end_pos = self . get_pos ( ) ;
402404
403- return Ok ( (
404- start_pos,
405+ let tok = if is_bytes {
406+ Tok :: Bytes {
407+ value : string_content. as_bytes ( ) . to_vec ( ) ,
408+ }
409+ } else {
405410 Tok :: String {
406411 value : string_content,
407- } ,
408- end_pos,
409- ) ) ;
412+ }
413+ } ;
414+
415+ return Ok ( ( start_pos, tok, end_pos) ) ;
410416 }
411417
412418 fn is_char ( & self ) -> bool {
@@ -921,10 +927,10 @@ mod tests {
921927 tokens,
922928 vec![
923929 Tok :: String {
924- value: "\\ \\ " . to_string( )
930+ value: "\\ \\ " . to_string( ) ,
925931 } ,
926932 Tok :: String {
927- value: "\\ " . to_string( )
933+ value: "\\ " . to_string( ) ,
928934 }
929935 ]
930936 ) ;
0 commit comments