mirror of
https://github.com/rust-lang/rust.git
synced 2025-01-24 05:33:41 +00:00
Merge #7500
7500: Fix ast::String::value not properly escaping in some cases r=Veykril a=Veykril Fixes #7496 bors r+ Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
This commit is contained in:
commit
286d90de2d
@ -173,7 +173,7 @@ impl ast::String {
|
||||
buf.capacity() == 0,
|
||||
) {
|
||||
(Ok(c), false) => buf.push(c),
|
||||
(Ok(c), true) if Some(c) == text_iter.next() => (),
|
||||
(Ok(c), true) if char_range.len() == 1 && Some(c) == text_iter.next() => (),
|
||||
(Ok(c), true) => {
|
||||
buf.reserve_exact(text.len());
|
||||
buf.push_str(&text[..char_range.start]);
|
||||
@ -659,7 +659,7 @@ impl Radix {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::ast::{make, FloatNumber, IntNumber};
|
||||
use crate::ast::{self, make, FloatNumber, IntNumber};
|
||||
|
||||
fn check_float_suffix<'a>(lit: &str, expected: impl Into<Option<&'a str>>) {
|
||||
assert_eq!(FloatNumber { syntax: make::tokens::literal(lit) }.suffix(), expected.into());
|
||||
@ -692,4 +692,21 @@ mod tests {
|
||||
check_int_suffix("0o11u32", "u32");
|
||||
check_int_suffix("0xffu32", "u32");
|
||||
}
|
||||
|
||||
fn check_string_value<'a>(lit: &str, expected: impl Into<Option<&'a str>>) {
|
||||
assert_eq!(
|
||||
ast::String { syntax: make::tokens::literal(&format!("\"{}\"", lit)) }
|
||||
.value()
|
||||
.as_deref(),
|
||||
expected.into()
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_string_escape() {
|
||||
check_string_value(r"foobar", "foobar");
|
||||
check_string_value(r"\foobar", None);
|
||||
check_string_value(r"\nfoobar", "\nfoobar");
|
||||
check_string_value(r"C:\\Windows\\System32\\", "C:\\Windows\\System32\\");
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user