From 5c3742fbd2c25988b4ea36641d10612835c67842 Mon Sep 17 00:00:00 2001 From: Kris Cherven <50562493+krischerven@users.noreply.github.com> Date: Tue, 21 Apr 2020 21:48:51 -0400 Subject: [PATCH] parser: check var names in for loops --- vlib/v/parser/for.v | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/vlib/v/parser/for.v b/vlib/v/parser/for.v index 8b8621463f..fa1545d53c 100644 --- a/vlib/v/parser/for.v +++ b/vlib/v/parser/for.v @@ -73,12 +73,23 @@ fn (var p Parser) for_stmt() ast.Stmt { p.check(.comma) key_var_name = val_var_name val_var_name = p.check_name() + if p.scope.known_var(key_var_name) { + p.error('redefinition of `$key_var_name`') + } + if p.scope.known_var(val_var_name) { + p.error('redefinition of `$val_var_name`') + } p.scope.register(key_var_name, ast.Var{ name: key_var_name typ: table.int_type }) + } else if p.scope.known_var(val_var_name) { + p.error('redefinition of `$val_var_name`') } p.check(.key_in) + if p.tok.kind == .name && p.tok.lit in [key_var_name, val_var_name] { + p.error('redefinition of `$p.tok.lit`') + } // arr_expr cond := p.expr(0) // 0 .. 10