cgen: cleanup in struct_init_field() (#19259)

This commit is contained in:
yuyi 2023-09-02 13:10:55 +08:00 committed by GitHub
parent 5848610453
commit a8d2a990c7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 14 deletions

View File

@ -1313,13 +1313,13 @@ fn (mut g Gen) write_prepared_it(inp_info ast.Array, inp_elem_type string, tmp s
fn (mut g Gen) fixed_array_var_init(expr ast.Expr, size int) { fn (mut g Gen) fixed_array_var_init(expr ast.Expr, size int) {
g.write('{') g.write('{')
for idx in 0 .. size { for i in 0 .. size {
if expr.is_auto_deref_var() { if expr.is_auto_deref_var() {
g.write('*') g.write('*')
} }
g.expr(expr) g.expr(expr)
g.write('[${idx}]') g.write('[${i}]')
if idx != size - 1 { if i != size - 1 {
g.write(', ') g.write(', ')
} }
} }

View File

@ -556,17 +556,9 @@ fn (mut g Gen) struct_init_field(sfield ast.StructInitField, language ast.Langua
inside_cast_in_heap := g.inside_cast_in_heap inside_cast_in_heap := g.inside_cast_in_heap
g.inside_cast_in_heap = 0 // prevent use of pointers in child structs g.inside_cast_in_heap = 0 // prevent use of pointers in child structs
if field_type_sym.kind == .array_fixed && sfield.expr is ast.Ident { if field_type_sym.kind == .array_fixed && sfield.expr in [ast.Ident, ast.SelectorExpr] {
fixed_array_info := field_type_sym.info as ast.ArrayFixed info := field_type_sym.info as ast.ArrayFixed
g.write('{') g.fixed_array_var_init(sfield.expr, info.size)
for i in 0 .. fixed_array_info.size {
g.expr(sfield.expr)
g.write('[${i}]')
if i != fixed_array_info.size - 1 {
g.write(', ')
}
}
g.write('}')
} else { } else {
if sfield.typ != ast.voidptr_type && sfield.typ != ast.nil_type if sfield.typ != ast.voidptr_type && sfield.typ != ast.nil_type
&& (sfield.expected_type.is_ptr() && !sfield.expected_type.has_flag(.shared_f)) && (sfield.expected_type.is_ptr() && !sfield.expected_type.has_flag(.shared_f))