From c976a691ad495b874f0af7e37edacfab46b64ae8 Mon Sep 17 00:00:00 2001 From: yuyi Date: Tue, 26 Jul 2022 20:07:08 +0800 Subject: [PATCH] scanner: correct error message of empty character literal (fix #15226) (#15228) --- vlib/v/scanner/scanner.v | 4 ++++ vlib/v/scanner/tests/empty_character_literal_err.out | 12 ++++++++++++ vlib/v/scanner/tests/empty_character_literal_err.vv | 4 ++++ 3 files changed, 20 insertions(+) create mode 100644 vlib/v/scanner/tests/empty_character_literal_err.out create mode 100644 vlib/v/scanner/tests/empty_character_literal_err.vv diff --git a/vlib/v/scanner/scanner.v b/vlib/v/scanner/scanner.v index a225fe0d65..ee3dce6904 100644 --- a/vlib/v/scanner/scanner.v +++ b/vlib/v/scanner/scanner.v @@ -1412,6 +1412,10 @@ fn (mut s Scanner) ident_char() string { if u.len != 1 { if escaped_hex || escaped_unicode { s.error('invalid character literal `$orig` => `$c` ($u) (escape sequence did not refer to a singular rune)') + } else if u.len == 0 { + s.add_error_detail_with_pos('use quotes for strings, backticks for characters', + lspos) + s.error('invalid empty character literal `$orig`') } else { s.add_error_detail_with_pos('use quotes for strings, backticks for characters', lspos) diff --git a/vlib/v/scanner/tests/empty_character_literal_err.out b/vlib/v/scanner/tests/empty_character_literal_err.out new file mode 100644 index 0000000000..636a06566c --- /dev/null +++ b/vlib/v/scanner/tests/empty_character_literal_err.out @@ -0,0 +1,12 @@ +vlib/v/scanner/tests/empty_character_literal_err.vv:2:8: error: invalid empty character literal `` + 1 | fn main() { + 2 | a := `` + | ^ + 3 | println(a) + 4 | } +vlib/v/scanner/tests/empty_character_literal_err.vv:2:7: details: use quotes for strings, backticks for characters + 1 | fn main() { + 2 | a := `` + | ^ + 3 | println(a) + 4 | } diff --git a/vlib/v/scanner/tests/empty_character_literal_err.vv b/vlib/v/scanner/tests/empty_character_literal_err.vv new file mode 100644 index 0000000000..359b1648cc --- /dev/null +++ b/vlib/v/scanner/tests/empty_character_literal_err.vv @@ -0,0 +1,4 @@ +fn main() { + a := `` + println(a) +}