Skip to content

Commit 4479945

Browse files
authored
cgen: allow generic alias enum comptime (fix #25249) (#25251)
1 parent 015a85d commit 4479945

2 files changed

Lines changed: 25 additions & 1 deletion

File tree

‎vlib/v/gen/c/comptime.v‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -781,7 +781,7 @@ fn (mut g Gen) comptime_for(node ast.ComptimeFor) {
781781
if g.pref.translated && node.typ.is_number() {
782782
g.writeln('_const_main__${val};')
783783
} else {
784-
node_sym := g.table.sym(node.typ)
784+
node_sym := g.table.sym(g.unwrap_generic(node.typ))
785785
if node_sym.info is ast.Alias {
786786
g.writeln('${g.styp(node_sym.info.parent_type)}__${val};')
787787
} else {

‎vlib/v/tests/comptime/comptime_enum_values_test.v‎

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,14 @@ fn CharacterGroup.values() []CharacterGroup {
2424
return res
2525
}
2626

27+
fn do_generic[T](t T) []EnumData {
28+
mut vals := []EnumData{}
29+
$for value in T.values {
30+
vals << value
31+
}
32+
return vals
33+
}
34+
2735
fn test_main() {
2836
values := CharacterGroup.values()
2937
println('Char group values: ${values}')
@@ -53,3 +61,19 @@ fn test_alias_enum() {
5361
assert values[3].value == int(CharacterGroup.special)
5462
assert values[3].name == CharacterGroup.special.str()
5563
}
64+
65+
fn test_generic_alias_enum() {
66+
values := do_generic(AnotherCharGroup.chars)
67+
68+
assert values[0].value == int(CharacterGroup.chars)
69+
assert values[0].name == CharacterGroup.chars.str()
70+
71+
assert values[1].value == int(CharacterGroup.alphanumerics)
72+
assert values[1].name == CharacterGroup.alphanumerics.str()
73+
74+
assert values[2].value == int(CharacterGroup.numeric)
75+
assert values[2].name == CharacterGroup.numeric.str()
76+
77+
assert values[3].value == int(CharacterGroup.special)
78+
assert values[3].name == CharacterGroup.special.str()
79+
}

0 commit comments

Comments
 (0)