From 65208053290a3632141ac1d434741457a0dc214b Mon Sep 17 00:00:00 2001 From: CreeperFace <165158232+dy-tea@users.noreply.github.com> Date: Sun, 2 Nov 2025 00:07:05 +0000 Subject: [PATCH] checker: correctly detect type, when prepending to generic array (fix #25585) (#25645) --- vlib/v/checker/fn.v | 3 ++- .../array_prepend_generic_test.v | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/builtin_arrays/array_prepend_generic_test.v diff --git a/vlib/v/checker/fn.v b/vlib/v/checker/fn.v index 07acc2a77..5640cbdc5 100644 --- a/vlib/v/checker/fn.v +++ b/vlib/v/checker/fn.v @@ -3335,7 +3335,8 @@ fn (mut c Checker) array_builtin_method_call(mut node ast.CallExpr, left_type as arg.expr.pos()) continue } - } else if !c.check_types(base_arg_type, c.unwrap_generic(left_type)) { + } else if !c.check_types(base_arg_type, unwrapped_left_type) + && !c.check_types(elem_typ, base_arg_type) { c.error('cannot ${method_name} `${arg_sym.name}` to `${left_sym.name}`', arg.expr.pos()) continue diff --git a/vlib/v/tests/builtin_arrays/array_prepend_generic_test.v b/vlib/v/tests/builtin_arrays/array_prepend_generic_test.v new file mode 100644 index 000000000..4e08efa68 --- /dev/null +++ b/vlib/v/tests/builtin_arrays/array_prepend_generic_test.v @@ -0,0 +1,22 @@ +struct Buffer[T] { + size int +mut: + content []T +} + +pub fn create_buffer[T](size int) Buffer[T] { + return Buffer[T]{ + size: size + content: []T{} + } +} + +pub fn (mut b Buffer[T]) write(value T) { + b.content.prepend(value) +} + +fn test_main() { + mut buffer := create_buffer[int](3) + buffer.write(1) + assert buffer.content[0] == 1 +} -- 2.39.5