cgen: minor cleanup of array_init (#8477)

pull/8496/head^2
yuyi 2021-02-01 22:56:55 +08:00 committed by GitHub
parent 6804fdaa56
commit 1e07173234
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 28 additions and 28 deletions

View File

@ -6,16 +6,16 @@ import strings
import v.ast import v.ast
import v.table import v.table
fn (mut g Gen) array_init(it ast.ArrayInit) { fn (mut g Gen) array_init(node ast.ArrayInit) {
type_sym := g.table.get_type_symbol(it.typ) type_sym := g.table.get_type_symbol(node.typ)
styp := g.typ(it.typ) styp := g.typ(node.typ)
mut shared_styp := '' // only needed for shared &[]{...} mut shared_styp := '' // only needed for shared &[]{...}
is_amp := g.is_amp is_amp := g.is_amp
g.is_amp = false g.is_amp = false
if is_amp { if is_amp {
g.out.go_back(1) // delete the `&` already generated in `prefix_expr() g.out.go_back(1) // delete the `&` already generated in `prefix_expr()
if g.is_shared { if g.is_shared {
mut shared_typ := it.typ.set_flag(.shared_f) mut shared_typ := node.typ.set_flag(.shared_f)
shared_styp = g.typ(shared_typ) shared_styp = g.typ(shared_typ)
g.writeln('($shared_styp*)__dup_shared_array(&($shared_styp){.val = ') g.writeln('($shared_styp*)__dup_shared_array(&($shared_styp){.val = ')
} else { } else {
@ -28,19 +28,19 @@ fn (mut g Gen) array_init(it ast.ArrayInit) {
} }
if type_sym.kind == .array_fixed { if type_sym.kind == .array_fixed {
g.write('{') g.write('{')
if it.has_val { if node.has_val {
for i, expr in it.exprs { for i, expr in node.exprs {
g.expr(expr) g.expr(expr)
if i != it.exprs.len - 1 { if i != node.exprs.len - 1 {
g.write(', ') g.write(', ')
} }
} }
} else if it.has_default { } else if node.has_default {
g.expr(it.default_expr) g.expr(node.default_expr)
info := type_sym.info as table.ArrayFixed info := type_sym.info as table.ArrayFixed
for _ in 1 .. info.size { for _ in 1 .. info.size {
g.write(', ') g.write(', ')
g.expr(it.default_expr) g.expr(node.default_expr)
} }
} else { } else {
g.write('0') g.write('0')
@ -48,23 +48,23 @@ fn (mut g Gen) array_init(it ast.ArrayInit) {
g.write('}') g.write('}')
return return
} }
elem_type_str := g.typ(it.elem_type) elem_type_str := g.typ(node.elem_type)
if it.exprs.len == 0 { if node.exprs.len == 0 {
elem_sym := g.table.get_type_symbol(it.elem_type) elem_sym := g.table.get_type_symbol(node.elem_type)
is_default_array := elem_sym.kind == .array && it.has_default is_default_array := elem_sym.kind == .array && node.has_default
if is_default_array { if is_default_array {
g.write('__new_array_with_array_default(') g.write('__new_array_with_array_default(')
} else { } else {
g.write('__new_array_with_default(') g.write('__new_array_with_default(')
} }
if it.has_len { if node.has_len {
g.expr(it.len_expr) g.expr(node.len_expr)
g.write(', ') g.write(', ')
} else { } else {
g.write('0, ') g.write('0, ')
} }
if it.has_cap { if node.has_cap {
g.expr(it.cap_expr) g.expr(node.cap_expr)
g.write(', ') g.write(', ')
} else { } else {
g.write('0, ') g.write('0, ')
@ -76,19 +76,19 @@ fn (mut g Gen) array_init(it ast.ArrayInit) {
} }
if is_default_array { if is_default_array {
g.write('($elem_type_str[]){') g.write('($elem_type_str[]){')
g.expr(it.default_expr) g.expr(node.default_expr)
g.write('}[0])') g.write('}[0])')
} else if it.has_default { } else if node.has_default {
g.write('&($elem_type_str[]){') g.write('&($elem_type_str[]){')
g.expr(it.default_expr) g.expr(node.default_expr)
g.write('})') g.write('})')
} else if it.has_len && it.elem_type == table.string_type { } else if node.has_len && node.elem_type == table.string_type {
g.write('&($elem_type_str[]){') g.write('&($elem_type_str[]){')
g.write('_SLIT("")') g.write('_SLIT("")')
g.write('})') g.write('})')
} else if it.has_len && elem_sym.kind in [.array, .map] { } else if node.has_len && elem_sym.kind in [.array, .map] {
g.write('(voidptr)&($elem_type_str[]){') g.write('(voidptr)&($elem_type_str[]){')
g.write(g.type_default(it.elem_type)) g.write(g.type_default(node.elem_type))
g.write('}[0])') g.write('}[0])')
} else { } else {
g.write('0)') g.write('0)')
@ -102,8 +102,8 @@ fn (mut g Gen) array_init(it ast.ArrayInit) {
} }
return return
} }
len := it.exprs.len len := node.exprs.len
elem_sym := g.table.get_type_symbol(it.elem_type) elem_sym := g.table.get_type_symbol(node.elem_type)
if elem_sym.kind == .function { if elem_sym.kind == .function {
g.write('new_array_from_c_array($len, $len, sizeof(voidptr), _MOV((voidptr[$len]){') g.write('new_array_from_c_array($len, $len, sizeof(voidptr), _MOV((voidptr[$len]){')
} else { } else {
@ -113,8 +113,8 @@ fn (mut g Gen) array_init(it ast.ArrayInit) {
g.writeln('') g.writeln('')
g.write('\t\t') g.write('\t\t')
} }
for i, expr in it.exprs { for i, expr in node.exprs {
g.expr_with_cast(expr, it.expr_types[i], it.elem_type) g.expr_with_cast(expr, node.expr_types[i], node.elem_type)
if i != len - 1 { if i != len - 1 {
g.write(', ') g.write(', ')
} }