cgen: fix array_init has len but no init error
parent
b10df252dc
commit
b3b86ea6d7
|
@ -990,11 +990,13 @@ fn (mut g Gen) gen_assign_stmt(assign_stmt ast.AssignStmt) {
|
|||
ast.ArrayInit {
|
||||
is_fixed_array_init = it.is_fixed
|
||||
has_val = it.has_val
|
||||
if it.has_default {
|
||||
elem_type_str := g.typ(it.elem_type)
|
||||
if it.has_default {
|
||||
g.write('$elem_type_str _val_$it.pos.pos = ')
|
||||
g.expr(it.default_expr)
|
||||
g.writeln(';')
|
||||
} else if it.has_len && it.elem_type == table.string_type {
|
||||
g.writeln('$elem_type_str _val_$it.pos.pos = tos_lit("");')
|
||||
}
|
||||
}
|
||||
else {}
|
||||
|
@ -3928,7 +3930,7 @@ fn (mut g Gen) array_init(it ast.ArrayInit) {
|
|||
g.write('0, ')
|
||||
}
|
||||
g.write('sizeof($elem_type_str), ')
|
||||
if it.has_default {
|
||||
if it.has_default || (it.has_len && it.elem_type == table.string_type) {
|
||||
g.write('&_val_$it.pos.pos)')
|
||||
} else {
|
||||
g.write('0)')
|
||||
|
|
|
@ -28,3 +28,14 @@ fn test_array_init_with_default() {
|
|||
b2 := []string{len: 2, init: '111'}
|
||||
assert '$b2' == "['111', '111']"
|
||||
}
|
||||
|
||||
fn test_array_init_with_len_no_default() {
|
||||
a1 := []int{len: 4}
|
||||
assert '$a1' == '[0, 0, 0, 0]'
|
||||
|
||||
a2 := []string{len: 4}
|
||||
assert '$a2' == "['', '', '', '']"
|
||||
|
||||
a3 := []bool{len: 3}
|
||||
assert '$a3' == '[false, false, false]'
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue