Skip to content

Commit 38ea5dc

Browse files
authored
cgen: fix enum with const value (#21919)
1 parent 4c30d35 commit 38ea5dc

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

vlib/v/gen/c/cgen.v

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,14 @@ pub fn gen(files []&ast.File, mut table ast.Table, pref_ &pref.Preferences) (str
561561
}
562562
b.writeln('\n// V includes:')
563563
b.write_string(g.includes.str())
564+
b.writeln('\n// V global/const #define ... :')
565+
for var_name in g.sorted_global_const_names {
566+
if var := g.global_const_defs[var_name] {
567+
if var.def.starts_with('#define') {
568+
b.writeln(var.def)
569+
}
570+
}
571+
}
564572
b.writeln('\n// Enum definitions:')
565573
b.write_string(g.enum_typedefs.str())
566574
b.writeln('\n// Thread definitions:')
@@ -579,10 +587,12 @@ pub fn gen(files []&ast.File, mut table ast.Table, pref_ &pref.Preferences) (str
579587
b.write_string(g.json_forward_decls.str())
580588
b.writeln('\n// V definitions:')
581589
b.write_string(g.definitions.str())
582-
b.writeln('\n// V global/const definitions:')
590+
b.writeln('\n// V global/const non-precomputed definitions:')
583591
for var_name in g.sorted_global_const_names {
584592
if var := g.global_const_defs[var_name] {
585-
b.writeln(var.def)
593+
if !var.def.starts_with('#define') {
594+
b.writeln(var.def)
595+
}
586596
}
587597
}
588598
interface_table := g.interface_table()

vlib/v/tests/enum_with_const_test.v

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
enum Foo {
2+
a = c
3+
b = 1
4+
c = 2
5+
}
6+
7+
const c = 0
8+
9+
fn test_enum_with_const() {
10+
mut foo := Foo.c
11+
foo = .a
12+
ret := match foo {
13+
.a { 'a' }
14+
.b { 'b' }
15+
.c { 'c' }
16+
}
17+
println(ret)
18+
assert ret == 'a'
19+
}

0 commit comments

Comments
 (0)