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) +}