From 98ca0f075ec7d2fbc48a8966ea40856ea1ef1938 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Wed, 20 Aug 2025 14:52:10 -0300 Subject: [PATCH] parser: fix interface method declaration with fixed array return type (fix #25137) (#25145) --- vlib/v/parser/struct.v | 3 +++ .../interface_fixed_array_ret_test.v | 20 +++++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 vlib/v/tests/interfaces/interface_fixed_array_ret_test.v diff --git a/vlib/v/parser/struct.v b/vlib/v/parser/struct.v index 819e1e5154..a5c7d69f3b 100644 --- a/vlib/v/parser/struct.v +++ b/vlib/v/parser/struct.v @@ -799,7 +799,10 @@ fn (mut p Parser) interface_decl() ast.InterfaceDecl { } if p.tok.kind.is_start_of_type() && p.tok.line_nr == line_nr { method.return_type_pos = p.tok.pos() + last_inside_return := p.inside_fn_return + p.inside_fn_return = true method.return_type = p.parse_type() + p.inside_fn_return = last_inside_return method.return_type_pos = method.return_type_pos.extend(p.tok.pos()) method.pos = method.pos.extend(method.return_type_pos) } diff --git a/vlib/v/tests/interfaces/interface_fixed_array_ret_test.v b/vlib/v/tests/interfaces/interface_fixed_array_ret_test.v new file mode 100644 index 0000000000..fb5ddd016e --- /dev/null +++ b/vlib/v/tests/interfaces/interface_fixed_array_ret_test.v @@ -0,0 +1,20 @@ +interface IValue { + value() [2]int +} + +struct Speed { + data [2]int +} + +fn (s Speed) value() [2]int { + return s.data +} + +fn get_value(v IValue) [2]int { + return v.value() +} + +fn test_main() { + s := Speed{[35, 36]!} + assert get_value(s) == [35, 36]! +}