From 959eeaf1f3676dd2f67d385a16b55efb048b79c5 Mon Sep 17 00:00:00 2001 From: yuyi Date: Mon, 26 Sep 2022 15:17:39 +0800 Subject: [PATCH] parser: check undefined variable in if guard (#15882) --- vlib/v/parser/assign.v | 3 +++ vlib/v/parser/tests/if_guard_undefined_variable_err.out | 7 +++++++ vlib/v/parser/tests/if_guard_undefined_variable_err.vv | 6 ++++++ 3 files changed, 16 insertions(+) create mode 100644 vlib/v/parser/tests/if_guard_undefined_variable_err.out create mode 100644 vlib/v/parser/tests/if_guard_undefined_variable_err.vv diff --git a/vlib/v/parser/assign.v b/vlib/v/parser/assign.v index bc1ddda20..45eebdf14 100644 --- a/vlib/v/parser/assign.v +++ b/vlib/v/parser/assign.v @@ -200,6 +200,9 @@ fn (mut p Parser) check_undefined_variables_by_names(names []string, val ast.Exp ast.PrefixExpr { p.check_undefined_variables_by_names(names, val.right)? } + ast.SelectorExpr { + p.check_undefined_variables_by_names(names, val.expr)? + } ast.StringInterLiteral { for expr_ in val.exprs { p.check_undefined_variables_by_names(names, expr_)? diff --git a/vlib/v/parser/tests/if_guard_undefined_variable_err.out b/vlib/v/parser/tests/if_guard_undefined_variable_err.out new file mode 100644 index 000000000..31b2cfbdc --- /dev/null +++ b/vlib/v/parser/tests/if_guard_undefined_variable_err.out @@ -0,0 +1,7 @@ +vlib/v/parser/tests/if_guard_undefined_variable_err.vv:4:10: error: undefined variable: `f` + 2 | + 3 | fn main() { + 4 | if f := f.g.x() { + | ^ + 5 | } + 6 | } diff --git a/vlib/v/parser/tests/if_guard_undefined_variable_err.vv b/vlib/v/parser/tests/if_guard_undefined_variable_err.vv new file mode 100644 index 000000000..b934049c4 --- /dev/null +++ b/vlib/v/parser/tests/if_guard_undefined_variable_err.vv @@ -0,0 +1,6 @@ +module main + +fn main() { + if f := f.g.x() { + } +} -- 2.39.5