From f7e99809e0fb2cef2124c27ee45a028d87d2af09 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Thu, 26 Feb 2026 11:31:32 +0300 Subject: [PATCH] checker: fix local variable with module before should give a compiler error (fixes #10658) --- vlib/v/checker/tests/module_selector_decl_assign_err.out | 7 +++++++ vlib/v/checker/tests/module_selector_decl_assign_err.vv | 6 ++++++ vlib/v/parser/assign.v | 4 ++++ 3 files changed, 17 insertions(+) create mode 100644 vlib/v/checker/tests/module_selector_decl_assign_err.out create mode 100644 vlib/v/checker/tests/module_selector_decl_assign_err.vv diff --git a/vlib/v/checker/tests/module_selector_decl_assign_err.out b/vlib/v/checker/tests/module_selector_decl_assign_err.out new file mode 100644 index 000000000..e306285b3 --- /dev/null +++ b/vlib/v/checker/tests/module_selector_decl_assign_err.out @@ -0,0 +1,7 @@ +vlib/v/checker/tests/module_selector_decl_assign_err.vv:4:5: error: non-name `os.args` on left side of `:=` + 2 | + 3 | fn main() { + 4 | os.args := []string{} + | ~~~~ + 5 | println(os.args) + 6 | } diff --git a/vlib/v/checker/tests/module_selector_decl_assign_err.vv b/vlib/v/checker/tests/module_selector_decl_assign_err.vv new file mode 100644 index 000000000..01a158a5e --- /dev/null +++ b/vlib/v/checker/tests/module_selector_decl_assign_err.vv @@ -0,0 +1,6 @@ +import os + +fn main() { + os.args := []string{} + println(os.args) +} diff --git a/vlib/v/parser/assign.v b/vlib/v/parser/assign.v index ae927e0bb..3e4e94b24 100644 --- a/vlib/v/parser/assign.v +++ b/vlib/v/parser/assign.v @@ -204,6 +204,10 @@ fn (mut p Parser) partial_assign_stmt(left []ast.Expr) ast.Stmt { match mut lx { ast.Ident { if op == .decl_assign { + if lx.name.contains('.') { + return p.error_with_pos('non-name `${lx.name}` on left side of `:=`', + lx.pos) + } if p.scope.known_var(lx.name) { if !(p.pref.translated_go && lx.name in ['err', 'ok']) { return p.error_with_pos('redefinition of `${lx.name}`', lx.pos) -- 2.39.5