From 43e96ce5bb74a45d97d1de5265975be1127c3fcf Mon Sep 17 00:00:00 2001 From: Swastik Baranwal Date: Mon, 26 Feb 2024 02:09:56 +0530 Subject: [PATCH] parser: disallow defining map key more than once (#20905) --- vlib/v/parser/parse_type.v | 6 ++++++ vlib/v/parser/tests/map_key_twice_err.out | 4 ++++ vlib/v/parser/tests/map_key_twice_err.vv | 2 ++ 3 files changed, 12 insertions(+) create mode 100644 vlib/v/parser/tests/map_key_twice_err.out create mode 100644 vlib/v/parser/tests/map_key_twice_err.vv diff --git a/vlib/v/parser/parse_type.v b/vlib/v/parser/parse_type.v index 839b30405..6d8285719 100644 --- a/vlib/v/parser/parse_type.v +++ b/vlib/v/parser/parse_type.v @@ -140,6 +140,12 @@ fn (mut p Parser) parse_map_type() ast.Type { return 0 } p.check(.rsbr) + if p.tok.kind == .lsbr { + if p.peek_tok.kind !in [.rsbr, .number] { + p.error_with_pos('maps can only have a single key', p.peek_tok.pos()) + return 0 + } + } value_type := p.parse_type() if value_type.idx() == 0 { // error is reported in parse_type diff --git a/vlib/v/parser/tests/map_key_twice_err.out b/vlib/v/parser/tests/map_key_twice_err.out new file mode 100644 index 000000000..05bd066de --- /dev/null +++ b/vlib/v/parser/tests/map_key_twice_err.out @@ -0,0 +1,4 @@ +vlib/v/parser/tests/map_key_twice_err.vv:1:14: error: maps can only have a single key + 1 | _ := map[u8][u8]{} + | ~~ + 2 | diff --git a/vlib/v/parser/tests/map_key_twice_err.vv b/vlib/v/parser/tests/map_key_twice_err.vv new file mode 100644 index 000000000..df6a93784 --- /dev/null +++ b/vlib/v/parser/tests/map_key_twice_err.vv @@ -0,0 +1,2 @@ +_ := map[u8][u8]{} + -- 2.39.5