diff --git a/cmd/tools/vast/vast.v b/cmd/tools/vast/vast.v index 9110dffd82..4acc01cbff 100644 --- a/cmd/tools/vast/vast.v +++ b/cmd/tools/vast/vast.v @@ -729,6 +729,7 @@ fn (t Tree) enum_decl(node ast.EnumDecl) &Node { obj.add('comments', t.array_node_comment(node.comments)) obj.add_terse('attrs', t.array_node_attr(node.attrs)) obj.add_terse('typ', t.type_node(node.typ)) + obj.add_terse('enum_typ', t.type_node(node.enum_typ)) return obj } diff --git a/vlib/v/ast/ast.v b/vlib/v/ast/ast.v index 47decb8b57..f760b1db2f 100644 --- a/vlib/v/ast/ast.v +++ b/vlib/v/ast/ast.v @@ -1475,6 +1475,8 @@ pub: typ Type // the default is `int`; can be changed by `enum Big as u64 { a = 5 }` typ_pos token.Pos pos token.Pos +pub mut: + enum_typ Type } pub struct AliasTypeDecl { diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index fed581f221..4fe72a2307 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -2161,6 +2161,7 @@ fn (mut c Checker) enum_decl(mut node ast.EnumDecl) { } } } + node.enum_typ = c.table.find_type_idx(node.name) } fn (mut c Checker) check_enum_field_integer_literal(expr ast.IntegerLiteral, is_signed bool, is_multi_allowed bool, diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index a81af0e02d..4fcab54a8c 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -4771,7 +4771,7 @@ fn (mut g Gen) enum_decl(node ast.EnumDecl) { } return } - if g.pref.skip_unused && node.typ.idx() !in g.table.used_features.used_syms { + if g.pref.skip_unused && node.enum_typ !in g.table.used_features.used_syms { return } g.enum_typedefs.writeln('') diff --git a/vlib/v/markused/walker.v b/vlib/v/markused/walker.v index 690a797d3f..c8d9abc209 100644 --- a/vlib/v/markused/walker.v +++ b/vlib/v/markused/walker.v @@ -846,7 +846,7 @@ fn (mut w Walker) expr(node_ ast.Expr) { w.expr(filtered[0].expr) } } - w.mark_by_sym_name(node.enum_name) + w.mark_by_type(node.typ) } ast.LockExpr { w.uses_lock = true