Skip to content

Commit d9f1e33

Browse files
authored
cgen: allow @[cinit] for const variables (#25881)
1 parent e3d328a commit d9f1e33

3 files changed

Lines changed: 24 additions & 0 deletions

File tree

vlib/v/gen/c/consts_and_globals.v

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,16 @@ fn (mut g Gen) const_decl(node ast.ConstDecl) {
3535
name := c_name(field.name)
3636
const_name := g.c_const_name(field.name)
3737
field_expr := field.expr
38+
if field.attrs.contains('cinit') || node.attrs.contains('cinit') {
39+
styp := g.styp(field.typ)
40+
val := g.expr_string(field.expr)
41+
g.global_const_defs[name] = GlobalConstDef{
42+
mod: field.mod
43+
def: '${g.static_non_parallel}${styp} ${const_name} = ${val};'
44+
dep_names: g.table.dependent_names_in_expr(field.expr)
45+
}
46+
continue
47+
}
3848
match field.expr {
3949
ast.ArrayInit {
4050
elems_are_const := field.expr.exprs.all(g.check_expr_is_const(it))
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
main__Config _const_main__conf = ((main__Config){.id = 123,.name = "test_config",.valid = true,});
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// vtest vflags: -no-skip-unused
2+
struct Config {
3+
id int
4+
name &char
5+
valid bool
6+
}
7+
8+
@[cinit]
9+
const conf = Config{
10+
id: 123
11+
name: c'test_config'
12+
valid: true
13+
}

0 commit comments

Comments
 (0)