From 875faaff0fa16f2a9b2d7f96b1549772178cd39b Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Wed, 9 Oct 2024 10:49:51 -0300 Subject: [PATCH] checker: fix missing check for escape char on unicode checker (#22462) --- vlib/v/checker/str.v | 5 ++++- vlib/v/tests/unicode_escape_test.v | 9 +++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/unicode_escape_test.v diff --git a/vlib/v/checker/str.v b/vlib/v/checker/str.v index 142a4e42e6..c9f52cc445 100644 --- a/vlib/v/checker/str.v +++ b/vlib/v/checker/str.v @@ -143,7 +143,10 @@ fn (mut c Checker) string_lit(mut node ast.StringLiteral) ast.Type { start_idx := idx idx++ next_ch := node.val[idx] or { return ast.string_type } - if next_ch == `u` { + if next_ch == `\\` { + // ignore escaping char + idx++ + } else if next_ch == `u` { idx++ mut ch := node.val[idx] or { return ast.string_type } mut hex_char_count := 0 diff --git a/vlib/v/tests/unicode_escape_test.v b/vlib/v/tests/unicode_escape_test.v new file mode 100644 index 0000000000..033b551896 --- /dev/null +++ b/vlib/v/tests/unicode_escape_test.v @@ -0,0 +1,9 @@ +fn test_main() { + a := r'\u306aefgh\t' + + mut expected := '\\u306a' + expected += 'efgh\\t' + + assert a == expected + assert a == '\\u306aefgh\\t' +}