mirror of
https://github.com/vlang/v.git
synced 2025-09-15 02:18:47 -04:00
cgen: fix dumping for a pointer to a fixed array initialization with prefixexpr & (fix #20344)
This commit is contained in:
parent
1ca808cdc7
commit
d5dba2d4c6
@ -24,7 +24,7 @@ fn (mut g Gen) array_init(node ast.ArrayInit, var_name string) {
|
|||||||
}
|
}
|
||||||
len := node.exprs.len
|
len := node.exprs.len
|
||||||
if array_type.unaliased_sym.kind == .array_fixed {
|
if array_type.unaliased_sym.kind == .array_fixed {
|
||||||
g.fixed_array_init(node, array_type, var_name)
|
g.fixed_array_init(node, array_type, var_name, is_amp)
|
||||||
if is_amp {
|
if is_amp {
|
||||||
g.write(')')
|
g.write(')')
|
||||||
}
|
}
|
||||||
@ -79,7 +79,7 @@ fn (mut g Gen) array_init(node ast.ArrayInit, var_name string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (mut g Gen) fixed_array_init(node ast.ArrayInit, array_type Type, var_name string) {
|
fn (mut g Gen) fixed_array_init(node ast.ArrayInit, array_type Type, var_name string, is_amp bool) {
|
||||||
prev_inside_lambda := g.inside_lambda
|
prev_inside_lambda := g.inside_lambda
|
||||||
g.inside_lambda = true
|
g.inside_lambda = true
|
||||||
defer {
|
defer {
|
||||||
@ -177,6 +177,8 @@ fn (mut g Gen) fixed_array_init(node ast.ArrayInit, array_type Type, var_name st
|
|||||||
g.write(', ')
|
g.write(', ')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if is_amp {
|
||||||
|
g.write('0')
|
||||||
} else {
|
} else {
|
||||||
elem_sym := g.table.final_sym(node.elem_type)
|
elem_sym := g.table.final_sym(node.elem_type)
|
||||||
if elem_sym.kind == .map {
|
if elem_sym.kind == .map {
|
||||||
|
@ -210,8 +210,13 @@ fn (mut g Gen) dump_expr_definitions() {
|
|||||||
surrounder.builder_write_afters(mut dump_fns)
|
surrounder.builder_write_afters(mut dump_fns)
|
||||||
if is_fixed_arr_ret {
|
if is_fixed_arr_ret {
|
||||||
tmp_var := g.new_tmp_var()
|
tmp_var := g.new_tmp_var()
|
||||||
dump_fns.writeln('\t${str_dumparg_ret_type} ${tmp_var} = {0};')
|
if typ.is_ptr() {
|
||||||
dump_fns.writeln('\tmemcpy(${tmp_var}.ret_arr, dump_arg, sizeof(${str_dumparg_type}));')
|
dump_fns.writeln('\t${str_dumparg_ret_type} ${tmp_var} = HEAP(${g.typ(typ.set_nr_muls(0))}, {0});')
|
||||||
|
dump_fns.writeln('\tmemcpy(${tmp_var}->ret_arr, dump_arg, sizeof(${str_dumparg_type}));')
|
||||||
|
} else {
|
||||||
|
dump_fns.writeln('\t${str_dumparg_ret_type} ${tmp_var} = {0};')
|
||||||
|
dump_fns.writeln('\tmemcpy(${tmp_var}.ret_arr, dump_arg, sizeof(${str_dumparg_type}));')
|
||||||
|
}
|
||||||
dump_fns.writeln('\treturn ${tmp_var};')
|
dump_fns.writeln('\treturn ${tmp_var};')
|
||||||
} else {
|
} else {
|
||||||
dump_fns.writeln('\treturn dump_arg;')
|
dump_fns.writeln('\treturn dump_arg;')
|
||||||
|
11
vlib/v/tests/array_fixed_ptr_test.v
Normal file
11
vlib/v/tests/array_fixed_ptr_test.v
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
fn test_main() {
|
||||||
|
a := &[2]u8{}
|
||||||
|
dump(a)
|
||||||
|
assert a.len == 2
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_empty() {
|
||||||
|
_ := &[2]u8{}
|
||||||
|
|
||||||
|
assert true
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user