From 020845f6c379dbf7d831a34692a5df5fb02a278c Mon Sep 17 00:00:00 2001 From: yuyi Date: Tue, 17 May 2022 17:26:26 +0800 Subject: [PATCH] cgen: fix alias of array that has builtin method (#14432) --- vlib/v/gen/c/fn.v | 2 +- vlib/v/tests/alias_array_has_method_test.v | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/alias_array_has_method_test.v diff --git a/vlib/v/gen/c/fn.v b/vlib/v/gen/c/fn.v index 51685a0bfc..8fa5962655 100644 --- a/vlib/v/gen/c/fn.v +++ b/vlib/v/gen/c/fn.v @@ -941,7 +941,7 @@ fn (mut g Gen) method_call(node ast.CallExpr) { if left_sym.kind == .map && node.name in ['clone', 'move'] { receiver_type_name = 'map' } - if final_left_sym.kind == .array + if final_left_sym.kind == .array && !(left_sym.kind == .alias && left_sym.has_method(node.name)) && node.name in ['repeat', 'sort_with_compare', 'free', 'push_many', 'trim', 'first', 'last', 'pop', 'clone', 'reverse', 'slice', 'pointers'] { if !(left_sym.info is ast.Alias && typ_sym.has_method(node.name)) { // `array_Xyz_clone` => `array_clone` diff --git a/vlib/v/tests/alias_array_has_method_test.v b/vlib/v/tests/alias_array_has_method_test.v new file mode 100644 index 0000000000..80ab006d81 --- /dev/null +++ b/vlib/v/tests/alias_array_has_method_test.v @@ -0,0 +1,11 @@ +type Alias = []int + +fn (a Alias) last() int { + return 22 +} + +fn test_alias_array_has_method() { + ret := Alias([0]).last() + println(ret) + assert ret == 22 +}