From 1386c5df13ef675edfb08430937e70f608a97709 Mon Sep 17 00:00:00 2001 From: yuyi Date: Tue, 2 Jun 2020 23:24:24 +0800 Subject: [PATCH] parser: use `?` instead of `?void` errpr --- vlib/v/checker/tests/void_optional_err.out | 5 +++++ vlib/v/checker/tests/void_optional_err.vv | 7 +++++++ vlib/v/parser/parse_type.v | 4 ++++ vlib/v/tests/option_test.v | 2 +- 4 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 vlib/v/checker/tests/void_optional_err.out create mode 100644 vlib/v/checker/tests/void_optional_err.vv diff --git a/vlib/v/checker/tests/void_optional_err.out b/vlib/v/checker/tests/void_optional_err.out new file mode 100644 index 0000000000..425224983d --- /dev/null +++ b/vlib/v/checker/tests/void_optional_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/void_optional_err.v:1:16: error: use `?` instead of `?void` + 1 | fn ret_void() ?void { + | ~~~~ + 2 | return error('error') + 3 | } diff --git a/vlib/v/checker/tests/void_optional_err.vv b/vlib/v/checker/tests/void_optional_err.vv new file mode 100644 index 0000000000..ca812cc628 --- /dev/null +++ b/vlib/v/checker/tests/void_optional_err.vv @@ -0,0 +1,7 @@ +fn ret_void() ?void { + return error('error') +} + +fn main() { + _ := ret_void() or { panic('$err') } +} diff --git a/vlib/v/parser/parse_type.v b/vlib/v/parser/parse_type.v index 3ba8b3984c..39002a3813 100644 --- a/vlib/v/parser/parse_type.v +++ b/vlib/v/parser/parse_type.v @@ -134,7 +134,11 @@ pub fn (mut p Parser) parse_type() table.Type { } mut typ := table.void_type if p.tok.kind != .lcbr { + pos := p.tok.position() typ = p.parse_any_type(language, nr_muls > 0) + if typ == table.void_type { + p.error_with_pos('use `?` instead of `?void`', pos) + } } if is_optional { typ = typ.set_flag(.optional) diff --git a/vlib/v/tests/option_test.v b/vlib/v/tests/option_test.v index a32e71a948..c456b9ed60 100644 --- a/vlib/v/tests/option_test.v +++ b/vlib/v/tests/option_test.v @@ -274,7 +274,7 @@ fn test_multi_return_opt() { } } */ -fn foo() ?void { +fn foo() ? { return error('something') }