From 7c89d77d5b79d32c4a946d472a84822d056354ff Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Thu, 2 May 2024 02:59:15 -0300 Subject: [PATCH] parser: add check for result type on chan init (#21363) --- vlib/v/checker/tests/result_chan_test_err.out | 6 ++++++ vlib/v/checker/tests/result_chan_test_err.vv | 4 ++++ vlib/v/parser/parser.v | 3 +++ 3 files changed, 13 insertions(+) create mode 100644 vlib/v/checker/tests/result_chan_test_err.out create mode 100644 vlib/v/checker/tests/result_chan_test_err.vv diff --git a/vlib/v/checker/tests/result_chan_test_err.out b/vlib/v/checker/tests/result_chan_test_err.out new file mode 100644 index 000000000..0a5b9860a --- /dev/null +++ b/vlib/v/checker/tests/result_chan_test_err.out @@ -0,0 +1,6 @@ +vlib/v/checker/tests/result_chan_test_err.vv:2:12: error: cannot use chan with Result type + 1 | fn main() { + 2 | c := chan !string{} + | ^ + 3 | println(c.len) + 4 | } diff --git a/vlib/v/checker/tests/result_chan_test_err.vv b/vlib/v/checker/tests/result_chan_test_err.vv new file mode 100644 index 000000000..a9753191f --- /dev/null +++ b/vlib/v/checker/tests/result_chan_test_err.vv @@ -0,0 +1,4 @@ +fn main() { + c := chan !string{} + println(c.len) +} \ No newline at end of file diff --git a/vlib/v/parser/parser.v b/vlib/v/parser/parser.v index e113b0fd0..86e9b91f3 100644 --- a/vlib/v/parser/parser.v +++ b/vlib/v/parser/parser.v @@ -2654,6 +2654,9 @@ fn (mut p Parser) name_expr() ast.Expr { first_pos := p.tok.pos() mut last_pos := first_pos mut elem_type_pos := p.peek_tok.pos() + if p.peek_tok.kind == .not { + return p.error_with_pos('cannot use chan with Result type', p.peek_tok.pos()) + } chan_type := p.parse_chan_type() elem_type_pos = elem_type_pos.extend(p.prev_tok.pos()) mut has_cap := false -- 2.39.5