From 85723e3799b46332a998f998c4af2289f3676558 Mon Sep 17 00:00:00 2001 From: yuyi Date: Sun, 10 May 2020 08:28:43 +0800 Subject: [PATCH] checker: check for_in_map using one variable error --- vlib/v/checker/checker.v | 3 +++ vlib/v/checker/tests/for_in_map_one_variable_err.out | 7 +++++++ vlib/v/checker/tests/for_in_map_one_variable_err.vv | 6 ++++++ 3 files changed, 16 insertions(+) create mode 100644 vlib/v/checker/tests/for_in_map_one_variable_err.out create mode 100644 vlib/v/checker/tests/for_in_map_one_variable_err.vv diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index ad71e948d2..ce731b7aff 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -1472,6 +1472,9 @@ fn (mut c Checker) stmt(node ast.Stmt) { } else { mut scope := c.file.scope.innermost(it.pos.pos) sym := c.table.get_type_symbol(typ) + if sym.kind == .map && !(it.key_var.len > 0 && it.val_var.len > 0) { + c.error('for in: cannot use one variable in map', it.pos) + } if it.key_var.len > 0 { key_type := match sym.kind { .map { sym.map_info().key_type } diff --git a/vlib/v/checker/tests/for_in_map_one_variable_err.out b/vlib/v/checker/tests/for_in_map_one_variable_err.out new file mode 100644 index 0000000000..ef96d8da3a --- /dev/null +++ b/vlib/v/checker/tests/for_in_map_one_variable_err.out @@ -0,0 +1,7 @@ +vlib/v/checker/tests/for_in_map_one_variable_err.v:3:6: error: for in: cannot use one variable in map + 1 | fn main() { + 2 | kvs := {'foo':'bar'} + 3 | for k in kvs { + | ^ + 4 | println('$k') + 5 | } diff --git a/vlib/v/checker/tests/for_in_map_one_variable_err.vv b/vlib/v/checker/tests/for_in_map_one_variable_err.vv new file mode 100644 index 0000000000..601c613df9 --- /dev/null +++ b/vlib/v/checker/tests/for_in_map_one_variable_err.vv @@ -0,0 +1,6 @@ +fn main() { + kvs := {'foo':'bar'} + for k in kvs { + println('$k') + } +}