@@ -6,22 +6,23 @@ import strings
66import v.ast
77
88fn (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