mirror of
https://github.com/vlang/v.git
synced 2025-09-13 09:25:45 -04:00
checker: check enum field value duplicate 2 (#21924)
This commit is contained in:
parent
d186c3946f
commit
3f1ba3d64f
@ -1952,9 +1952,13 @@ fn (mut c Checker) enum_decl(mut node ast.EnumDecl) {
|
||||
if field.expr.kind == .constant && field.expr.obj.typ.is_int() {
|
||||
// accepts int constants as enum value
|
||||
if mut field.expr.obj is ast.ConstField {
|
||||
if mut field.expr.obj.expr is ast.IntegerLiteral {
|
||||
c.check_enum_field_integer_literal(field.expr.obj.expr,
|
||||
signed, node.is_multi_allowed, senum_type, field.expr.pos, mut
|
||||
mut t := transformer.new_transformer_with_table(c.table,
|
||||
c.pref)
|
||||
folded_expr := t.expr(mut field.expr.obj.expr)
|
||||
|
||||
if folded_expr is ast.IntegerLiteral {
|
||||
c.check_enum_field_integer_literal(folded_expr, signed,
|
||||
node.is_multi_allowed, senum_type, field.expr.pos, mut
|
||||
useen, enum_umin, enum_umax, mut iseen, enum_imin,
|
||||
enum_imax)
|
||||
}
|
||||
|
7
vlib/v/checker/tests/enum_field_value_duplicate_e.out
Normal file
7
vlib/v/checker/tests/enum_field_value_duplicate_e.out
Normal file
@ -0,0 +1,7 @@
|
||||
vlib/v/checker/tests/enum_field_value_duplicate_e.vv:4:6: error: enum value `2` already exists
|
||||
2 | a = one
|
||||
3 | b
|
||||
4 | c = one
|
||||
| ~~~
|
||||
5 | }
|
||||
6 |
|
13
vlib/v/checker/tests/enum_field_value_duplicate_e.vv
Normal file
13
vlib/v/checker/tests/enum_field_value_duplicate_e.vv
Normal file
@ -0,0 +1,13 @@
|
||||
enum MyEnum {
|
||||
a = one
|
||||
b
|
||||
c = one
|
||||
}
|
||||
|
||||
const one = 1 + 1
|
||||
|
||||
fn main() {
|
||||
$for val in MyEnum.values {
|
||||
println('> name: ${val.name} | value: ${val.value}')
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user