From 51e562411c4f09ede10521f305765ddd89f5994a Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Wed, 25 Mar 2026 16:42:19 +0300 Subject: [PATCH] checker: fix passing function as argument to vec.mul_scalar (fixes #25829) --- vlib/v/checker/checker.v | 4 ++++ vlib/v/checker/tests/cast_function_to_number_err.out | 6 ++++++ vlib/v/checker/tests/cast_function_to_number_err.vv | 10 ++++++++++ 3 files changed, 20 insertions(+) create mode 100644 vlib/v/checker/tests/cast_function_to_number_err.out create mode 100644 vlib/v/checker/tests/cast_function_to_number_err.vv diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index df157ec49..697b25191 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -4970,6 +4970,10 @@ fn (mut c Checker) cast_expr(mut node ast.CastExpr) ast.Type { c.error('invalid casting value to function', node.pos) } } + } else if final_from_sym.kind == .function && final_to_sym.is_number() { + fnexpr := node.expr.str() + tt := c.table.type_to_str(to_type) + c.error('cannot cast function `${fnexpr}` to `${tt}`', node.pos) } if to_type.is_ptr() && to_sym.kind == .alias && from_sym.kind == .map { c.error('cannot cast to alias pointer `${c.table.type_to_str(to_type)}` because `${c.table.type_to_str(from_type)}` is a value', diff --git a/vlib/v/checker/tests/cast_function_to_number_err.out b/vlib/v/checker/tests/cast_function_to_number_err.out new file mode 100644 index 000000000..7a2ecf565 --- /dev/null +++ b/vlib/v/checker/tests/cast_function_to_number_err.out @@ -0,0 +1,6 @@ +vlib/v/checker/tests/cast_function_to_number_err.vv:9:10: error: cannot cast function `a.magnitude` to `f64` + 7 | fn main() { + 8 | a := VecLike{} + 9 | println(f64(a.magnitude)) + | ~~~~~~~~~~~~~~~~ + 10 | } diff --git a/vlib/v/checker/tests/cast_function_to_number_err.vv b/vlib/v/checker/tests/cast_function_to_number_err.vv new file mode 100644 index 000000000..ef9f29d44 --- /dev/null +++ b/vlib/v/checker/tests/cast_function_to_number_err.vv @@ -0,0 +1,10 @@ +struct VecLike {} + +fn (v VecLike) magnitude() f64 { + return 1.0 +} + +fn main() { + a := VecLike{} + println(f64(a.magnitude)) +} -- 2.39.5