From 5a14748e7c351fda8cd72df553512d7afb12432a Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Wed, 16 Feb 2022 12:05:05 +0300 Subject: [PATCH] cgen: c2v enum fix --- vlib/v/gen/c/cgen.v | 16 ++++++++++++---- vlib/v/parser/fn.v | 2 +- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/vlib/v/gen/c/cgen.v b/vlib/v/gen/c/cgen.v index 6b871c84fa..50950281d1 100644 --- a/vlib/v/gen/c/cgen.v +++ b/vlib/v/gen/c/cgen.v @@ -2853,10 +2853,7 @@ fn (mut g Gen) expr(node ast.Expr) { g.dump_expr(node) } ast.EnumVal { - // g.write('${it.mod}${it.enum_name}_$it.val') - // g.enum_expr(node) - styp := g.typ(g.table.unaliased_type(node.typ)) - g.write('${styp}__$node.val') + g.enum_val(node) } ast.FloatLiteral { if g.pref.nofloat { @@ -5051,6 +5048,17 @@ fn (mut g Gen) size_of(node ast.SizeOf) { g.write('sizeof(${util.no_dots(styp)})') } +fn (mut g Gen) enum_val(node ast.EnumVal) { + // g.write('${it.mod}${it.enum_name}_$it.val') + // g.enum_expr(node) + styp := g.typ(g.table.unaliased_type(node.typ)) + if node.typ.is_number() { + // Mostly in translated code, when C enums are used as ints in switches + // g.write('/*enum val is_number $node.mod styp=$styp*/') + } + g.write('${styp}__$node.val') +} + fn (mut g Gen) go_expr(node ast.GoExpr) { line := g.go_before_stmt(0) mut handle := '' diff --git a/vlib/v/parser/fn.v b/vlib/v/parser/fn.v index 9352b903ff..0adf77053c 100644 --- a/vlib/v/parser/fn.v +++ b/vlib/v/parser/fn.v @@ -419,7 +419,7 @@ fn (mut p Parser) fn_decl() ast.FnDecl { } else { name = p.prepend_mod(name) } - if language == .v { + if !p.pref.translated && language == .v { if existing := p.table.fns[name] { if existing.name != '' { if file_mode == .v && existing.file_mode != .v {