cgen: cleanup index.v (#20252)

This commit is contained in:
yuyi 2023-12-22 16:13:33 +08:00 committed by GitHub
parent 5043e14e35
commit 380a33af12
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -48,18 +48,16 @@ fn (mut g Gen) index_expr(node ast.IndexExpr) {
g.write(')') g.write(')')
} }
} }
} else if sym.info is ast.Aggregate
&& sym.info.types.filter(g.table.type_kind(it) !in [.array, .array_fixed, .string, .map]).len == 0 {
// treating sumtype of array types
unwrapped_got_type := sym.info.types[g.aggregate_type_idx]
g.index_expr(ast.IndexExpr{ ...node, left_type: unwrapped_got_type })
} else { } else {
if sym.kind == .aggregate g.expr(node.left)
&& (sym.info as ast.Aggregate).types.filter(g.table.type_kind(it) !in [.array, .array_fixed, .string, .map]).len == 0 { g.write('[')
// treating sumtype of array types g.expr(node.index)
unwrapped_got_type := (sym.info as ast.Aggregate).types[g.aggregate_type_idx] g.write(']')
g.index_expr(ast.IndexExpr{ ...node, left_type: unwrapped_got_type })
} else {
g.expr(node.left)
g.write('[')
g.expr(node.index)
g.write(']')
}
} }
} }
} }
@ -97,18 +95,17 @@ fn (mut g Gen) index_range_expr(node ast.IndexExpr, range ast.RangeExpr) {
g.write('*') g.write('*')
} }
g.expr(node.left) g.expr(node.left)
} else if sym.kind == .array_fixed { } else if sym.info is ast.ArrayFixed {
// Convert a fixed array to V array when doing `fixed_arr[start..end]` // Convert a fixed array to V array when doing `fixed_arr[start..end]`
info := sym.info as ast.ArrayFixed noscan := g.check_noscan(sym.info.elem_type)
noscan := g.check_noscan(info.elem_type)
if node.is_gated { if node.is_gated {
g.write('array_slice_ni(') g.write('array_slice_ni(')
} else { } else {
g.write('array_slice(') g.write('array_slice(')
} }
g.write('new_array_from_c_array${noscan}(') g.write('new_array_from_c_array${noscan}(')
ctype := g.typ(info.elem_type) ctype := g.typ(sym.info.elem_type)
g.write('${info.size}, ${info.size}, sizeof(${ctype}), ') g.write('${sym.info.size}, ${sym.info.size}, sizeof(${ctype}), ')
if node.left_type.is_ptr() { if node.left_type.is_ptr() {
g.write('*') g.write('*')
} }
@ -138,9 +135,8 @@ fn (mut g Gen) index_range_expr(node ast.IndexExpr, range ast.RangeExpr) {
g.write(', ') g.write(', ')
if range.has_high { if range.has_high {
g.expr(range.high) g.expr(range.high)
} else if sym.kind == .array_fixed { } else if sym.info is ast.ArrayFixed {
info := sym.info as ast.ArrayFixed g.write('${sym.info.size}')
g.write('${info.size}')
} else { } else {
g.write('2147483647') // max_int g.write('2147483647') // max_int
} }