From e613211560d5d956715eb49ac9f75096d6740185 Mon Sep 17 00:00:00 2001 From: Swastik Baranwal Date: Fri, 21 Feb 2025 06:37:01 +0530 Subject: [PATCH] checker: allow generic operators to be called in fn (fix #23773) (#23774) --- vlib/v/checker/infix.v | 4 ++-- .../generics/generic_alias_fn_op_call_test.v | 15 +++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 vlib/v/tests/generics/generic_alias_fn_op_call_test.v diff --git a/vlib/v/checker/infix.v b/vlib/v/checker/infix.v index e79528e0d..de8f02c36 100644 --- a/vlib/v/checker/infix.v +++ b/vlib/v/checker/infix.v @@ -112,8 +112,8 @@ fn (mut c Checker) infix_expr(mut node ast.InfixExpr) ast.Type { } } mut right_sym := c.table.sym(right_type) - right_final_sym := c.table.final_sym(right_type) - left_final_sym := c.table.final_sym(left_type) + right_final_sym := c.table.final_sym(c.unwrap_generic(right_type)) + left_final_sym := c.table.final_sym(c.unwrap_generic(left_type)) left_pos := node.left.pos() right_pos := node.right.pos() left_right_pos := left_pos.extend(right_pos) diff --git a/vlib/v/tests/generics/generic_alias_fn_op_call_test.v b/vlib/v/tests/generics/generic_alias_fn_op_call_test.v new file mode 100644 index 000000000..1d50f12c2 --- /dev/null +++ b/vlib/v/tests/generics/generic_alias_fn_op_call_test.v @@ -0,0 +1,15 @@ +module main + +type MyAlias = f32 + +const two = MyAlias(2) + +fn mul[T](a T, b T) T { + return a * b +} + +fn test_generic_alias_fn_op_call() { + assert mul[MyAlias](two, two) == f32(4.0) + assert mul[f32](two, two) == f32(4.0) + assert two * two == f32(4.0) +} -- 2.39.5