Skip to content

Commit b351aa1

Browse files
authored
gen: cleanup Gen.array init (#10613)
1 parent 6838030 commit b351aa1

File tree

1 file changed

+21
-22
lines changed

1 file changed

+21
-22
lines changed

vlib/v/gen/c/array.v

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,23 @@ import strings
66
import v.ast
77

88
fn (mut g Gen) array_init(node ast.ArrayInit) {
9-
type_sym := g.table.get_type_symbol(node.typ)
10-
styp := g.typ(node.typ)
9+
array_type := g.unwrap(node.typ)
10+
mut array_styp := ''
11+
elem_type := g.unwrap(node.elem_type)
1112
mut shared_styp := '' // only needed for shared &[]{...}
1213
is_amp := g.is_amp
1314
g.is_amp = false
1415
if is_amp {
1516
g.out.go_back(1) // delete the `&` already generated in `prefix_expr()
1617
}
1718
if g.is_shared {
18-
mut shared_typ := node.typ.set_flag(.shared_f)
19-
shared_styp = g.typ(shared_typ)
19+
shared_styp = g.typ(array_type.typ.set_flag(.shared_f))
2020
g.writeln('($shared_styp*)__dup_shared_array(&($shared_styp){.mtx = {0}, .val =')
2121
} else if is_amp {
22-
g.write('HEAP($styp, ')
22+
array_styp = g.typ(array_type.typ)
23+
g.write('HEAP($array_styp, ')
2324
}
24-
if type_sym.kind == .array_fixed {
25+
if array_type.unaliased_sym.kind == .array_fixed {
2526
g.write('{')
2627
if node.has_val {
2728
for i, expr in node.exprs {
@@ -35,7 +36,7 @@ fn (mut g Gen) array_init(node ast.ArrayInit) {
3536
}
3637
} else if node.has_default {
3738
g.expr(node.default_expr)
38-
info := type_sym.info as ast.ArrayFixed
39+
info := array_type.unaliased_sym.info as ast.ArrayFixed
3940
for _ in 1 .. info.size {
4041
g.write(', ')
4142
g.expr(node.default_expr)
@@ -46,11 +47,10 @@ fn (mut g Gen) array_init(node ast.ArrayInit) {
4647
g.write('}')
4748
return
4849
}
49-
elem_type_str := g.typ(node.elem_type)
50-
noscan := g.check_noscan(node.elem_type)
50+
elem_styp := g.typ(elem_type.typ)
51+
noscan := g.check_noscan(elem_type.typ)
5152
if node.exprs.len == 0 {
52-
elem_sym := g.table.get_type_symbol(node.elem_type)
53-
is_default_array := elem_sym.kind == .array && node.has_default
53+
is_default_array := elem_type.unaliased_sym.kind == .array && node.has_default
5454
if is_default_array {
5555
g.write('__new_array_with_array_default${noscan}(')
5656
} else {
@@ -68,25 +68,25 @@ fn (mut g Gen) array_init(node ast.ArrayInit) {
6868
} else {
6969
g.write('0, ')
7070
}
71-
if elem_sym.kind == .function {
71+
if elem_type.unaliased_sym.kind == .function {
7272
g.write('sizeof(voidptr), ')
7373
} else {
74-
g.write('sizeof($elem_type_str), ')
74+
g.write('sizeof($elem_styp), ')
7575
}
7676
if is_default_array {
77-
g.write('($elem_type_str[]){')
77+
g.write('($elem_styp[]){')
7878
g.expr(node.default_expr)
7979
g.write('}[0])')
8080
} else if node.has_default {
81-
g.write('&($elem_type_str[]){')
81+
g.write('&($elem_styp[]){')
8282
g.expr(node.default_expr)
8383
g.write('})')
8484
} else if node.has_len && node.elem_type == ast.string_type {
85-
g.write('&($elem_type_str[]){')
85+
g.write('&($elem_styp[]){')
8686
g.write('_SLIT("")')
8787
g.write('})')
88-
} else if node.has_len && elem_sym.kind in [.array, .map] {
89-
g.write('(voidptr)&($elem_type_str[]){')
88+
} else if node.has_len && elem_type.unaliased_sym.kind in [.array, .map] {
89+
g.write('(voidptr)&($elem_styp[]){')
9090
g.write(g.type_default(node.elem_type))
9191
g.write('}[0])')
9292
} else {
@@ -100,11 +100,10 @@ fn (mut g Gen) array_init(node ast.ArrayInit) {
100100
return
101101
}
102102
len := node.exprs.len
103-
elem_sym := g.table.get_type_symbol(node.elem_type)
104-
if elem_sym.kind == .function {
103+
if elem_type.unaliased_sym.kind == .function {
105104
g.write('new_array_from_c_array($len, $len, sizeof(voidptr), _MOV((voidptr[$len]){')
106105
} else {
107-
g.write('new_array_from_c_array${noscan}($len, $len, sizeof($elem_type_str), _MOV(($elem_type_str[$len]){')
106+
g.write('new_array_from_c_array${noscan}($len, $len, sizeof($elem_styp), _MOV(($elem_styp[$len]){')
108107
}
109108
if len > 8 {
110109
g.writeln('')
@@ -125,7 +124,7 @@ fn (mut g Gen) array_init(node ast.ArrayInit) {
125124
if g.is_shared {
126125
g.write('}, sizeof($shared_styp))')
127126
} else if is_amp {
128-
g.write('), sizeof($styp))')
127+
g.write('), sizeof($array_styp))')
129128
}
130129
}
131130

0 commit comments

Comments
 (0)