diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 08369f313f..df30ecd70e 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -5293,6 +5293,15 @@ fn (mut c Checker) check_dup_keys(node &ast.MapInit, i int) { } } } + } else if key_i is ast.FloatLiteral { + for j in 0 .. i { + key_j := node.keys[j] + if key_j is ast.FloatLiteral { + if key_i.val.f64() == key_j.val.f64() { + c.error('duplicate key "${key_i.val}" in map literal', key_i.pos) + } + } + } } } diff --git a/vlib/v/checker/tests/map_repeated_float_key_err.out b/vlib/v/checker/tests/map_repeated_float_key_err.out new file mode 100644 index 0000000000..e81c7af508 --- /dev/null +++ b/vlib/v/checker/tests/map_repeated_float_key_err.out @@ -0,0 +1,14 @@ +vlib/v/checker/tests/map_repeated_float_key_err.vv:5:3: error: duplicate key "1.e-06" in map literal + 3 | 0.000001: 'small-1' + 4 | 0.00001: 'small-2' + 5 | 1.e-06: 'small-3' + | ~~~~~~ + 6 | 0.00001: 'small-4' + 7 | } +vlib/v/checker/tests/map_repeated_float_key_err.vv:6:3: error: duplicate key "0.00001" in map literal + 4 | 0.00001: 'small-2' + 5 | 1.e-06: 'small-3' + 6 | 0.00001: 'small-4' + | ~~~~~~~ + 7 | } + 8 | dump(m64) diff --git a/vlib/v/checker/tests/map_repeated_float_key_err.vv b/vlib/v/checker/tests/map_repeated_float_key_err.vv new file mode 100644 index 0000000000..cd9658230e --- /dev/null +++ b/vlib/v/checker/tests/map_repeated_float_key_err.vv @@ -0,0 +1,9 @@ +fn main() { + m64 := { + 0.000001: 'small-1' + 0.00001: 'small-2' + 1.e-06: 'small-3' + 0.00001: 'small-4' + } + dump(m64) +}