From fe4ccbc4cf161565b5226d285f1afac1dfaeb720 Mon Sep 17 00:00:00 2001 From: yuyi Date: Mon, 17 Apr 2023 19:06:57 +0800 Subject: [PATCH] cgen: fix strings builder shift array.reverse() (#17979) --- vlib/v/gen/c/infix.v | 5 +++-- .../tests/strings_builder_shift_array_reverse_test.v | 12 ++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 vlib/v/tests/strings_builder_shift_array_reverse_test.v diff --git a/vlib/v/gen/c/infix.v b/vlib/v/gen/c/infix.v index 71c8513c46..b2009fa3b0 100644 --- a/vlib/v/gen/c/infix.v +++ b/vlib/v/gen/c/infix.v @@ -741,8 +741,9 @@ fn (mut g Gen) infix_expr_left_shift_op(node ast.InfixExpr) { tmp_var := g.new_tmp_var() array_info := left.unaliased_sym.info as ast.Array noscan := g.check_noscan(array_info.elem_type) - if right.unaliased_sym.kind == .array && array_info.elem_type != right.typ - && !(right.sym.kind == .alias + if (right.unaliased_sym.kind == .array + || (right.unaliased_sym.kind == .struct_ && right.unaliased_sym.name == 'array')) + && array_info.elem_type != right.typ && !(right.sym.kind == .alias && g.table.sumtype_has_variant(array_info.elem_type, node.right_type, false)) { // push an array => PUSH_MANY, but not if pushing an array to 2d array (`[][]int << []int`) g.write('_PUSH_MANY${noscan}(') diff --git a/vlib/v/tests/strings_builder_shift_array_reverse_test.v b/vlib/v/tests/strings_builder_shift_array_reverse_test.v new file mode 100644 index 0000000000..aca7690f72 --- /dev/null +++ b/vlib/v/tests/strings_builder_shift_array_reverse_test.v @@ -0,0 +1,12 @@ +import rand +import strings + +fn test_strings_builder_shift_array_reverse() { + mut a := strings.new_builder(0) + mut b := strings.new_builder(0) + b << rand.ascii(5).bytes() + a << b.reverse() + ret := a.str() + println(ret) + assert ret.len == 5 +}