mirror of
https://github.com/vlang/v.git
synced 2025-09-14 09:56:16 -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() {
|
if field.expr.kind == .constant && field.expr.obj.typ.is_int() {
|
||||||
// accepts int constants as enum value
|
// accepts int constants as enum value
|
||||||
if mut field.expr.obj is ast.ConstField {
|
if mut field.expr.obj is ast.ConstField {
|
||||||
if mut field.expr.obj.expr is ast.IntegerLiteral {
|
mut t := transformer.new_transformer_with_table(c.table,
|
||||||
c.check_enum_field_integer_literal(field.expr.obj.expr,
|
c.pref)
|
||||||
signed, node.is_multi_allowed, senum_type, field.expr.pos, mut
|
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,
|
useen, enum_umin, enum_umax, mut iseen, enum_imin,
|
||||||
enum_imax)
|
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