From 8ae23cd89efdd443371cf74beb6a39217c74d04d Mon Sep 17 00:00:00 2001 From: zakuro Date: Mon, 8 Feb 2021 23:55:01 +0900 Subject: [PATCH] parser: make `v := f(v)' an undefined variable error (#8634) --- vlib/v/checker/tests/assign_expr_undefined_err_h.out | 7 +++++++ vlib/v/checker/tests/assign_expr_undefined_err_h.vv | 8 ++++++++ vlib/v/parser/assign.v | 3 +++ 3 files changed, 18 insertions(+) create mode 100644 vlib/v/checker/tests/assign_expr_undefined_err_h.out create mode 100644 vlib/v/checker/tests/assign_expr_undefined_err_h.vv diff --git a/vlib/v/checker/tests/assign_expr_undefined_err_h.out b/vlib/v/checker/tests/assign_expr_undefined_err_h.out new file mode 100644 index 0000000000..9c647c86b5 --- /dev/null +++ b/vlib/v/checker/tests/assign_expr_undefined_err_h.out @@ -0,0 +1,7 @@ +vlib/v/checker/tests/assign_expr_undefined_err_h.vv:6:9: error: undefined variable: `n` + 4 | + 5 | fn main() { + 6 | n := f(n) + | ^ + 7 | println(n) + 8 | } diff --git a/vlib/v/checker/tests/assign_expr_undefined_err_h.vv b/vlib/v/checker/tests/assign_expr_undefined_err_h.vv new file mode 100644 index 0000000000..d872d7eb87 --- /dev/null +++ b/vlib/v/checker/tests/assign_expr_undefined_err_h.vv @@ -0,0 +1,8 @@ +fn f(i int) int { + return i +} + +fn main() { + n := f(n) + println(n) +} diff --git a/vlib/v/parser/assign.v b/vlib/v/parser/assign.v index 69cd4ae837..2f1acb0148 100644 --- a/vlib/v/parser/assign.v +++ b/vlib/v/parser/assign.v @@ -25,6 +25,9 @@ fn (mut p Parser) check_undefined_variables(exprs []ast.Expr, val ast.Expr) ? { } ast.CallExpr { p.check_undefined_variables(exprs, val.left) ? + for arg in val.args { + p.check_undefined_variables(exprs, arg.expr) ? + } } ast.InfixExpr { p.check_undefined_variables(exprs, val.left) ?