From 1747e546bfccee12f0165b07c509d7ee11f179ed Mon Sep 17 00:00:00 2001 From: yuyi Date: Thu, 3 Jun 2021 01:38:26 +0800 Subject: [PATCH] parser, checker: check assert optional (#10319) --- vlib/v/checker/checker.v | 2 +- vlib/v/checker/tests/assert_optional_err.out | 6 ++++++ vlib/v/checker/tests/assert_optional_err.vv | 5 +++++ vlib/v/parser/parser.v | 2 +- 4 files changed, 13 insertions(+), 2 deletions(-) create mode 100644 vlib/v/checker/tests/assert_optional_err.out create mode 100644 vlib/v/checker/tests/assert_optional_err.vv diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 064c9c1f51..05e2788ae0 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -4064,7 +4064,7 @@ fn (mut c Checker) stmt(node ast.Stmt) { fn (mut c Checker) assert_stmt(node ast.AssertStmt) { cur_exp_typ := c.expected_type assert_type := c.check_expr_opt_call(node.expr, c.expr(node.expr)) - if assert_type != ast.bool_type_idx && assert_type != ast.void_type_idx { + if assert_type != ast.bool_type_idx { atype_name := c.table.get_type_symbol(assert_type).name c.error('assert can be used only with `bool` expressions, but found `$atype_name` instead', node.pos) diff --git a/vlib/v/checker/tests/assert_optional_err.out b/vlib/v/checker/tests/assert_optional_err.out new file mode 100644 index 0000000000..9d2f49a445 --- /dev/null +++ b/vlib/v/checker/tests/assert_optional_err.out @@ -0,0 +1,6 @@ +vlib/v/checker/tests/assert_optional_err.vv:4:9: error: assert can be used only with `bool` expressions, but found `void` instead + 2 | + 3 | fn main(){ + 4 | assert os.truncate("testfile.txt", 6666) or { panic(err) } + | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 5 | } diff --git a/vlib/v/checker/tests/assert_optional_err.vv b/vlib/v/checker/tests/assert_optional_err.vv new file mode 100644 index 0000000000..7036616183 --- /dev/null +++ b/vlib/v/checker/tests/assert_optional_err.vv @@ -0,0 +1,5 @@ +import os + +fn main(){ + assert os.truncate("testfile.txt", 6666) or { panic(err) } +} diff --git a/vlib/v/parser/parser.v b/vlib/v/parser/parser.v index 5d8ccbb093..3cbcf536de 100644 --- a/vlib/v/parser/parser.v +++ b/vlib/v/parser/parser.v @@ -685,7 +685,7 @@ pub fn (mut p Parser) stmt(is_top_level bool) ast.Stmt { pos.update_last_line(p.prev_tok.line_nr) return ast.AssertStmt{ expr: expr - pos: pos + pos: pos.extend(p.tok.position()) is_used: p.inside_test_file || !p.pref.is_prod } }