Skip to content

Commit 6c8182c

Browse files
authored
cgen: fix assigning literal fixed arrays to map values (#10525)
1 parent a21ee1a commit 6c8182c

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

vlib/v/gen/c/cgen.v

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2473,7 +2473,9 @@ fn (mut g Gen) gen_assign_stmt(assign_stmt ast.AssignStmt) {
24732473
else {}
24742474
}
24752475
right_sym := g.table.get_type_symbol(g.unwrap_generic(val_type))
2476-
is_fixed_array_var := right_sym.kind == .array_fixed && val is ast.Ident
2476+
is_fixed_array_var := right_sym.kind == .array_fixed && (val is ast.Ident
2477+
|| val is ast.IndexExpr || val is ast.CallExpr
2478+
|| val is ast.SelectorExpr)
24772479
g.is_assign_lhs = true
24782480
g.assign_op = assign_stmt.op
24792481
if val_type.has_flag(.optional) {
@@ -2490,7 +2492,8 @@ fn (mut g Gen) gen_assign_stmt(assign_stmt ast.AssignStmt) {
24902492
g.expr(val)
24912493
g.writeln(';}')
24922494
}
2493-
} else if assign_stmt.op == .assign && (is_fixed_array_init || is_fixed_array_var) {
2495+
} else if assign_stmt.op == .assign
2496+
&& (is_fixed_array_init || (right_sym.kind == .array_fixed && val is ast.Ident)) {
24942497
mut v_var := ''
24952498
arr_typ := styp.trim('*')
24962499
if is_fixed_array_init {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
fn test_assign_map_value_of_fixed_array() {
2+
mut m := map[string][2]f64{}
3+
4+
m['A'] = [1.1, 2.2]!
5+
m['B'] = [0.1, 0.2]!
6+
7+
mut arr := m['A']
8+
println(arr)
9+
assert '$arr' == '[1.1, 2.2]'
10+
11+
arr = m['B']
12+
println(arr)
13+
assert '$arr' == '[0.1, 0.2]'
14+
15+
arr = m['C']
16+
println(arr)
17+
assert '$arr' == '[0, 0]'
18+
}

0 commit comments

Comments
 (0)