From 2b48ce21dfdf3a3834e40420de7fdefd86a2e6ca Mon Sep 17 00:00:00 2001 From: yuyi Date: Wed, 29 Apr 2020 15:19:46 +0800 Subject: [PATCH] checker: make sure `main` has no args and doesn't return --- vlib/v/checker/checker.v | 6 ++++++ vlib/v/checker/tests/main_args_err.out | 5 +++++ vlib/v/checker/tests/main_args_err.vv | 3 +++ vlib/v/checker/tests/main_return_err.out | 5 +++++ vlib/v/checker/tests/main_return_err.vv | 3 +++ 5 files changed, 22 insertions(+) create mode 100644 vlib/v/checker/tests/main_args_err.out create mode 100644 vlib/v/checker/tests/main_args_err.vv create mode 100644 vlib/v/checker/tests/main_return_err.out create mode 100644 vlib/v/checker/tests/main_return_err.vv diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 7126c38bce..e7296d4d25 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -115,6 +115,12 @@ fn (mut c Checker) check_file_in_main(file ast.File) bool { if it.is_pub { c.error('function `main` cannot be declared public', it.pos) } + if it.args.len > 0 { + c.error('function `main` cannot have arguments', it.pos) + } + if it.return_type != table.void_type { + c.error('function `main` cannot return values', it.pos) + } } else { if it.is_pub { c.warn('function `$it.name` $no_pub_in_main_warning', it.pos) diff --git a/vlib/v/checker/tests/main_args_err.out b/vlib/v/checker/tests/main_args_err.out new file mode 100644 index 0000000000..016cd8764e --- /dev/null +++ b/vlib/v/checker/tests/main_args_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/main_args_err.v:1:1: error: function `main` cannot have arguments + 1| fn main(a string) { + ~~~~~~~~~~~~~~~~~ + 2| println(a) + 3| } diff --git a/vlib/v/checker/tests/main_args_err.vv b/vlib/v/checker/tests/main_args_err.vv new file mode 100644 index 0000000000..69c950898c --- /dev/null +++ b/vlib/v/checker/tests/main_args_err.vv @@ -0,0 +1,3 @@ +fn main(a string) { + println(a) +} diff --git a/vlib/v/checker/tests/main_return_err.out b/vlib/v/checker/tests/main_return_err.out new file mode 100644 index 0000000000..0cbbfac211 --- /dev/null +++ b/vlib/v/checker/tests/main_return_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/main_return_err.v:1:1: error: function `main` cannot return values + 1| fn main() f64 { + ~~~~~~~~~~~~~ + 2| return 1.23 + 3| } diff --git a/vlib/v/checker/tests/main_return_err.vv b/vlib/v/checker/tests/main_return_err.vv new file mode 100644 index 0000000000..de52fe00ee --- /dev/null +++ b/vlib/v/checker/tests/main_return_err.vv @@ -0,0 +1,3 @@ +fn main() f64 { + return 1.23 +}