diff --git a/vlib/v/gen/c/array.v b/vlib/v/gen/c/array.v index 2a48e1b473..cd8d0a420f 100644 --- a/vlib/v/gen/c/array.v +++ b/vlib/v/gen/c/array.v @@ -411,7 +411,7 @@ fn (mut g Gen) gen_array_insert(node ast.CallExpr) { if left_info.elem_type == ast.string_type { g.write('string_clone(') } - g.expr(node.args[1].expr) + g.expr_with_cast(node.args[1].expr, node.args[1].typ, left_info.elem_type) if left_info.elem_type == ast.string_type { g.write(')') } @@ -441,7 +441,7 @@ fn (mut g Gen) gen_array_prepend(node ast.CallExpr) { g.write('.len)') } else { g.write(', &($elem_type_str[]){') - g.expr(node.args[0].expr) + g.expr_with_cast(node.args[0].expr, node.args[0].typ, left_info.elem_type) g.write('})') } } diff --git a/vlib/v/tests/array_of_sumtypes_test.v b/vlib/v/tests/array_of_sumtypes_test.v new file mode 100644 index 0000000000..b8280d95d3 --- /dev/null +++ b/vlib/v/tests/array_of_sumtypes_test.v @@ -0,0 +1,20 @@ +struct Node { +mut: + tag string + content []Content +} + +struct Text { +} + +type Content = Node | Text + +fn test_push_prepend_insert() { + mut body := Node{} + body.content << Node{ + tag: 'a' + } + body.content.prepend(Node{ tag: 'b' }) + body.content.insert(1, Node{ tag: 'c' }) + assert body.content.len == 3 +}