cgen: minor cleanup of array_init (#8477)
parent
6804fdaa56
commit
1e07173234
|
@ -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(', ')
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue