From 2a586161aa4084767f237740334bc222fc0836e4 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Mon, 23 Sep 2024 20:58:50 -0300 Subject: [PATCH] fix --- vlib/v/gen/c/fn.v | 2 +- vlib/v/tests/fns/method_call_on_rangeexpr_test.v | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/fns/method_call_on_rangeexpr_test.v diff --git a/vlib/v/gen/c/fn.v b/vlib/v/gen/c/fn.v index a86b1f78d5fd0a..4fe780934bcf9e 100644 --- a/vlib/v/gen/c/fn.v +++ b/vlib/v/gen/c/fn.v @@ -1675,7 +1675,7 @@ fn (mut g Gen) method_call(node ast.CallExpr) { // if so, then instead of calling array_clone(&array_slice(...)) // call array_clone_static(array_slice(...)) mut is_range_slice := false - if node.receiver_type.is_ptr() && !left_type.is_ptr() { + if node.name == 'clone' && node.receiver_type.is_ptr() && !left_type.is_ptr() { if node.left is ast.IndexExpr { idx := node.left.index if idx is ast.RangeExpr { diff --git a/vlib/v/tests/fns/method_call_on_rangeexpr_test.v b/vlib/v/tests/fns/method_call_on_rangeexpr_test.v new file mode 100644 index 00000000000000..0c62379556fa59 --- /dev/null +++ b/vlib/v/tests/fns/method_call_on_rangeexpr_test.v @@ -0,0 +1,16 @@ +type Buffer = []byte + +pub fn (mut sb Buffer) vbytes() string { + return sb[0..sb.len].a().str() +} + +pub fn (mut sb Buffer) a() Buffer { + return sb +} + +fn test_main() { + mut b := Buffer([]byte{cap: 10}) + b << 1 + b << 2 + assert b.vbytes() == 'Buffer([1, 2])' +}