From b20777df59ac3f609a3f42dbca468dd00194ac0a Mon Sep 17 00:00:00 2001 From: yuyi Date: Tue, 28 Apr 2020 13:21:50 +0800 Subject: [PATCH] checker: main function called error --- vlib/v/checker/checker.v | 3 +++ vlib/v/checker/tests/main_called_err.out | 5 +++++ vlib/v/checker/tests/main_called_err.v | 3 +++ vlib/v/checker/tests/main_called_err.vv | 3 +++ 4 files changed, 14 insertions(+) create mode 100644 vlib/v/checker/tests/main_called_err.out create mode 100644 vlib/v/checker/tests/main_called_err.v create mode 100644 vlib/v/checker/tests/main_called_err.vv diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 7ef277e4d9..724b83d3d1 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -677,6 +677,9 @@ pub fn (mut c Checker) call_fn(call_expr mut ast.CallExpr) table.Type { c.returns = true } fn_name := call_expr.name + if fn_name == 'main' { + c.error('the `main` function cannot be called in the program', call_expr.pos) + } if fn_name == 'typeof' { // TODO: impl typeof properly (probably not going to be a fn call) return table.string_type diff --git a/vlib/v/checker/tests/main_called_err.out b/vlib/v/checker/tests/main_called_err.out new file mode 100644 index 0000000000..df9319b17c --- /dev/null +++ b/vlib/v/checker/tests/main_called_err.out @@ -0,0 +1,5 @@ +vlib/v/checker/tests/main_called_err.v:2:2: error: the `main` function cannot be called in the program + 1| fn main() { + 2| main() + ~~~~~~ + 3| } diff --git a/vlib/v/checker/tests/main_called_err.v b/vlib/v/checker/tests/main_called_err.v new file mode 100644 index 0000000000..2be2db12ba --- /dev/null +++ b/vlib/v/checker/tests/main_called_err.v @@ -0,0 +1,3 @@ +fn main() { + main() +} diff --git a/vlib/v/checker/tests/main_called_err.vv b/vlib/v/checker/tests/main_called_err.vv new file mode 100644 index 0000000000..2be2db12ba --- /dev/null +++ b/vlib/v/checker/tests/main_called_err.vv @@ -0,0 +1,3 @@ +fn main() { + main() +}