93
93
// NOTE: Raw strings do not perform any explicit character escaping, here we
94
94
// only translate CRLF to LF and produce errors on bare CR.
95
95
Mode :: RawStr | Mode :: RawByteStr => {
96
- unescape_raw_str_or_byte_str ( literal_text, mode, callback)
96
+ unescape_raw_str_or_raw_byte_str ( literal_text, mode, callback)
97
97
}
98
98
}
99
99
}
@@ -105,7 +105,7 @@ pub fn unescape_byte_literal<F>(literal_text: &str, mode: Mode, callback: &mut F
105
105
where
106
106
F : FnMut ( Range < usize > , Result < u8 , EscapeError > ) ,
107
107
{
108
- assert ! ( mode. is_bytes( ) ) ;
108
+ debug_assert ! ( mode. is_bytes( ) ) ;
109
109
unescape_literal ( literal_text, mode, & mut |range, result| {
110
110
callback ( range, result. map ( byte_from_char) ) ;
111
111
} )
@@ -129,7 +129,7 @@ pub fn unescape_byte(literal_text: &str) -> Result<u8, (usize, EscapeError)> {
129
129
}
130
130
131
131
/// What kind of literal do we parse.
132
- #[ derive( Debug , Clone , Copy ) ]
132
+ #[ derive( Debug , Clone , Copy , PartialEq ) ]
133
133
pub enum Mode {
134
134
Char ,
135
135
Str ,
@@ -140,17 +140,13 @@ pub enum Mode {
140
140
}
141
141
142
142
impl Mode {
143
- pub fn in_single_quotes ( self ) -> bool {
143
+ pub fn in_double_quotes ( self ) -> bool {
144
144
match self {
145
- Mode :: Char | Mode :: Byte => true ,
146
- Mode :: Str | Mode :: ByteStr | Mode :: RawStr | Mode :: RawByteStr => false ,
145
+ Mode :: Str | Mode :: ByteStr | Mode :: RawStr | Mode :: RawByteStr => true ,
146
+ Mode :: Char | Mode :: Byte => false ,
147
147
}
148
148
}
149
149
150
- pub fn in_double_quotes ( self ) -> bool {
151
- !self . in_single_quotes ( )
152
- }
153
-
154
150
pub fn is_bytes ( self ) -> bool {
155
151
match self {
156
152
Mode :: Byte | Mode :: ByteStr | Mode :: RawByteStr => true ,
@@ -184,7 +180,7 @@ fn scan_escape(chars: &mut Chars<'_>, mode: Mode) -> Result<char, EscapeError> {
184
180
185
181
let value = hi * 16 + lo;
186
182
187
- // For a byte literal verify that it is within ASCII range.
183
+ // For a non- byte literal verify that it is within ASCII range.
188
184
if !mode. is_bytes ( ) && !is_ascii ( value) {
189
185
return Err ( EscapeError :: OutOfRangeHexEscape ) ;
190
186
}
@@ -263,6 +259,7 @@ fn ascii_check(first_char: char, mode: Mode) -> Result<char, EscapeError> {
263
259
}
264
260
265
261
fn unescape_char_or_byte ( chars : & mut Chars < ' _ > , mode : Mode ) -> Result < char , EscapeError > {
262
+ debug_assert ! ( mode == Mode :: Char || mode == Mode :: Byte ) ;
266
263
let first_char = chars. next ( ) . ok_or ( EscapeError :: ZeroChars ) ?;
267
264
let res = match first_char {
268
265
'\\' => scan_escape ( chars, mode) ,
@@ -282,7 +279,7 @@ fn unescape_str_or_byte_str<F>(src: &str, mode: Mode, callback: &mut F)
282
279
where
283
280
F : FnMut ( Range < usize > , Result < char , EscapeError > ) ,
284
281
{
285
- assert ! ( mode. in_double_quotes ( ) ) ;
282
+ debug_assert ! ( mode == Mode :: Str || mode == Mode :: ByteStr ) ;
286
283
let initial_len = src. len ( ) ;
287
284
let mut chars = src. chars ( ) ;
288
285
while let Some ( first_char) = chars. next ( ) {
@@ -344,11 +341,11 @@ where
344
341
/// sequence of characters or errors.
345
342
/// NOTE: Raw strings do not perform any explicit character escaping, here we
346
343
/// only translate CRLF to LF and produce errors on bare CR.
347
- fn unescape_raw_str_or_byte_str < F > ( literal_text : & str , mode : Mode , callback : & mut F )
344
+ fn unescape_raw_str_or_raw_byte_str < F > ( literal_text : & str , mode : Mode , callback : & mut F )
348
345
where
349
346
F : FnMut ( Range < usize > , Result < char , EscapeError > ) ,
350
347
{
351
- assert ! ( mode. in_double_quotes ( ) ) ;
348
+ debug_assert ! ( mode == Mode :: RawStr || mode == Mode :: RawByteStr ) ;
352
349
let initial_len = literal_text. len ( ) ;
353
350
354
351
let mut chars = literal_text. chars ( ) ;
@@ -368,7 +365,7 @@ where
368
365
369
366
fn byte_from_char ( c : char ) -> u8 {
370
367
let res = c as u32 ;
371
- assert ! ( res <= u8 :: MAX as u32 , "guaranteed because of Mode::ByteStr" ) ;
368
+ debug_assert ! ( res <= u8 :: MAX as u32 , "guaranteed because of Mode::ByteStr" ) ;
372
369
res as u8
373
370
}
374
371
0 commit comments