From e1e5076d940e11a780edba60a7e2d7970ba6700f Mon Sep 17 00:00:00 2001 From: yuyi Date: Thu, 27 Apr 2023 01:41:20 +0800 Subject: [PATCH] cgen: fix cross assign with generic fn call (#18050) --- vlib/v/gen/c/assign.v | 5 ++++- vlib/v/tests/cross_assign_with_generic_fn_call_test.v | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/cross_assign_with_generic_fn_call_test.v diff --git a/vlib/v/gen/c/assign.v b/vlib/v/gen/c/assign.v index 49b4f413d5..18148eeff3 100644 --- a/vlib/v/gen/c/assign.v +++ b/vlib/v/gen/c/assign.v @@ -985,7 +985,10 @@ fn (mut g Gen) gen_cross_tmp_variable(left []ast.Expr, val ast.Expr) { g.write(')') } ast.CallExpr { - fn_name := val.name.replace('.', '__') + mut fn_name := val.name.replace('.', '__') + if val.concrete_types.len > 0 { + fn_name = g.generic_fn_name(val.concrete_types, fn_name) + } g.write('${fn_name}(') for i, arg in val.args { g.gen_cross_tmp_variable(left, arg.expr) diff --git a/vlib/v/tests/cross_assign_with_generic_fn_call_test.v b/vlib/v/tests/cross_assign_with_generic_fn_call_test.v new file mode 100644 index 0000000000..ee3a17e9fe --- /dev/null +++ b/vlib/v/tests/cross_assign_with_generic_fn_call_test.v @@ -0,0 +1,10 @@ +import math + +fn test_cross_assign_with_generic_fn_call() { + mut x := -1 + mut y := -2 + x, y = y, math.abs(x) + println('${x} | ${y}') + assert x == -2 + assert y == 1 +}