diff --git a/vlib/v/parser/parser.v b/vlib/v/parser/parser.v index 31a6ae15cc..574dde5a3a 100644 --- a/vlib/v/parser/parser.v +++ b/vlib/v/parser/parser.v @@ -1037,8 +1037,13 @@ pub fn (mut p Parser) name_expr() ast.Expr { } } // Raw string (`s := r'hello \n ') - if p.tok.lit in ['r', 'c', 'js'] && p.peek_tok.kind == .string && !p.inside_str_interp { - return p.string_expr() + if p.peek_tok.kind == .string && !p.inside_str_interp && p.peek_tok2.kind != .colon { + if p.tok.lit in ['r', 'c', 'js'] && p.tok.kind == .name { + return p.string_expr() + } else { + // don't allow any other string prefix except `r`, `js` and `c` + p.error('only `c`, `r`, `js` are recognized string prefixes, but you tried to use `$p.tok.lit`') + } } // don't allow r`byte` and c`byte` if p.tok.lit in ['r', 'c'] && p.peek_tok.kind == .chartoken { diff --git a/vlib/v/parser/tests/string_invalid_prefix_err.out b/vlib/v/parser/tests/string_invalid_prefix_err.out new file mode 100644 index 0000000000..416d415342 --- /dev/null +++ b/vlib/v/parser/tests/string_invalid_prefix_err.out @@ -0,0 +1,6 @@ +vlib/v/parser/tests/string_invalid_prefix_err.vv:2:12: error: only `c`, `r`, `js` are recognized string prefixes, but you tried to use `w` + 1 | fn main() { + 2 | why := w'why' + | ^ + 3 | println(why) + 4 | } diff --git a/vlib/v/parser/tests/string_invalid_prefix_err.vv b/vlib/v/parser/tests/string_invalid_prefix_err.vv new file mode 100644 index 0000000000..6c8630cbc4 --- /dev/null +++ b/vlib/v/parser/tests/string_invalid_prefix_err.vv @@ -0,0 +1,4 @@ +fn main() { + why := w'why' + println(why) +}