From e3fab7e0760192e72312bc4d04df2ab2f9954e5d Mon Sep 17 00:00:00 2001 From: Swastik Baranwal Date: Mon, 30 Nov 2020 14:28:00 +0530 Subject: [PATCH] parser: add an error for an invalid string prefix (#7019) --- vlib/v/parser/parser.v | 9 +++++++-- vlib/v/parser/tests/string_invalid_prefix_err.out | 6 ++++++ vlib/v/parser/tests/string_invalid_prefix_err.vv | 4 ++++ 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 vlib/v/parser/tests/string_invalid_prefix_err.out create mode 100644 vlib/v/parser/tests/string_invalid_prefix_err.vv 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) +}