diff --git a/CHANGELOG.md b/CHANGELOG.md index d42838556..c95edb940 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,11 @@ Rhai Release Notes Version 1.21.0 ============== +Bug fixes +--------- + +* Fixed bug in raw strings with newlines (thanks [`@benatkin`](https://github.com/benatkin) [940](https://github.com/rhaiscript/rhai/pull/940)). + Enhancements ------------ diff --git a/src/tokenizer.rs b/src/tokenizer.rs index 825e27201..1e490c0ba 100644 --- a/src/tokenizer.rs +++ b/src/tokenizer.rs @@ -1264,7 +1264,10 @@ pub fn parse_raw_string_literal( match (next_char, &mut seen_hashes) { // New line - ('\n', _) => pos.new_line(), + ('\n', _) => { + result.push('\n'); + pos.new_line(); + } // Begin attempt to close string ('"', None) => seen_hashes = Some(0), diff --git a/tests/string.rs b/tests/string.rs index 8b8e51d81..29e91652f 100644 --- a/tests/string.rs +++ b/tests/string.rs @@ -20,7 +20,15 @@ fn test_string() { assert_eq!(engine.eval::(r##"#"Test"#"##).unwrap(), "Test"); assert_eq!(engine.eval::(r##"#"Test string: \\u2764\nhello,\nworld!"#"##).unwrap(), r#"Test string: \\u2764\nhello,\nworld!"#); assert_eq!(engine.eval::(r###"##"Test string: #"\\u2764\nhello,\\nworld!"#"##"###).unwrap(), r##"Test string: #"\\u2764\nhello,\\nworld!"#"##); - assert_eq!(engine.eval::(r###"##"Test string: "## + "\u2764""###).unwrap(), "Test string: ❤"); + assert_eq!( + engine + .eval::( + r###"##"Test +string: "## + "\u2764""### + ) + .unwrap(), + "Test\nstring: ❤" + ); let bad_result = *engine.eval::(r###"#"Test string: \"##"###).unwrap_err(); if let EvalAltResult::ErrorParsing(parse_error, pos) = bad_result { assert_eq!(parse_error, ParseErrorType::UnknownOperator("#".to_string()));