From 71e82374836a47725a68eaaa6b13c013bbd07d66 Mon Sep 17 00:00:00 2001 From: yuyi Date: Sun, 11 Jul 2021 08:49:07 +0800 Subject: [PATCH] parser: check undefined variables in array inits (#10746) --- vlib/v/checker/tests/assign_expr_undefined_err_i.out | 6 ++++++ vlib/v/checker/tests/assign_expr_undefined_err_i.vv | 4 ++++ vlib/v/parser/assign.v | 11 +++++++++++ 3 files changed, 21 insertions(+) create mode 100644 vlib/v/checker/tests/assign_expr_undefined_err_i.out create mode 100644 vlib/v/checker/tests/assign_expr_undefined_err_i.vv diff --git a/vlib/v/checker/tests/assign_expr_undefined_err_i.out b/vlib/v/checker/tests/assign_expr_undefined_err_i.out new file mode 100644 index 0000000000..74705af122 --- /dev/null +++ b/vlib/v/checker/tests/assign_expr_undefined_err_i.out @@ -0,0 +1,6 @@ +vlib/v/checker/tests/assign_expr_undefined_err_i.vv:2:23: error: undefined variable: `a` + 1 | fn main() { + 2 | mut a := []int{init: a} + | ^ + 3 | println(a) + 4 | } diff --git a/vlib/v/checker/tests/assign_expr_undefined_err_i.vv b/vlib/v/checker/tests/assign_expr_undefined_err_i.vv new file mode 100644 index 0000000000..26d689e6a8 --- /dev/null +++ b/vlib/v/checker/tests/assign_expr_undefined_err_i.vv @@ -0,0 +1,4 @@ +fn main() { + mut a := []int{init: a} + println(a) +} diff --git a/vlib/v/parser/assign.v b/vlib/v/parser/assign.v index 229de5f341..8284230d75 100644 --- a/vlib/v/parser/assign.v +++ b/vlib/v/parser/assign.v @@ -30,6 +30,17 @@ fn (mut p Parser) check_undefined_variables(exprs []ast.Expr, val ast.Expr) ? { } } } + ast.ArrayInit { + if val.has_cap { + p.check_undefined_variables(exprs, val.cap_expr) ? + } + if val.has_len { + p.check_undefined_variables(exprs, val.len_expr) ? + } + if val.has_default { + p.check_undefined_variables(exprs, val.default_expr) ? + } + } ast.CallExpr { p.check_undefined_variables(exprs, val.left) ? for arg in val.args {