Skip to content

Commit

Permalink
checker: check enum field value duplicate 2
Browse files Browse the repository at this point in the history
  • Loading branch information
yuyi98 committed Jul 24, 2024
1 parent b5ba466 commit 5be4146
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 3 deletions.
10 changes: 7 additions & 3 deletions vlib/v/checker/checker.v
Original file line number Diff line number Diff line change
Expand Up @@ -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)
}
Expand Down
7 changes: 7 additions & 0 deletions vlib/v/checker/tests/enum_field_value_duplicate_e.out
Original file line number Diff line number Diff line change
@@ -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 changes: 13 additions & 0 deletions vlib/v/checker/tests/enum_field_value_duplicate_e.vv
Original file line number Diff line number Diff line change
@@ -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}')
}
}

0 comments on commit 5be4146

Please sign in to comment.