From 68e01d87becee0901023008b30ee69ed7bddb19d Mon Sep 17 00:00:00 2001 From: Tarang11 Date: Tue, 7 Jul 2020 17:48:51 +0530 Subject: [PATCH] checker: fix multi assignment for multiple fns (#5716) --- vlib/v/checker/checker.v | 4 ++- vlib/v/tests/fn_assignment_test.v | 55 +++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 vlib/v/tests/fn_assignment_test.v diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index de43e808be..985d77ed64 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -1536,7 +1536,9 @@ pub fn (mut c Checker) assign_stmt(mut assign_stmt ast.AssignStmt) { } if assign_stmt.right_types.len < assign_stmt.left.len { // first type or multi return types added above right_type := c.expr(assign_stmt.right[i]) - assign_stmt.right_types << c.check_expr_opt_call(assign_stmt.right[i], right_type) + if assign_stmt.right_types.len == i { + assign_stmt.right_types << c.check_expr_opt_call(assign_stmt.right[i], right_type) + } } right := if i < assign_stmt.right.len { assign_stmt.right[i] } else { assign_stmt.right[0] } right_type := assign_stmt.right_types[i] diff --git a/vlib/v/tests/fn_assignment_test.v b/vlib/v/tests/fn_assignment_test.v new file mode 100644 index 0000000000..10abb61cdb --- /dev/null +++ b/vlib/v/tests/fn_assignment_test.v @@ -0,0 +1,55 @@ +fn test() int { + return 10 +} + +fn test1() int { + return 11 +} + +fn test_fn_assignment_var() { + mut a := 0 + mut b := 0 + a , b = test(), test1() + + assert a == 10 + assert b == 11 + + a, b = test(), test() + assert a == 10 + assert b == 10 + + a, b = test(), 12 + + assert a == 10 + assert b == 12 + + a, b = 12, test() + + assert a == 12 + assert b == 10 +} + +fn test_fn_assignment_array() { + mut a := [0, 1] + + a[0], a[1] = test(), test1() + + assert a[0] == 10 + assert a[1] == 11 + + a[0], a[1] = test() , test() + + assert a[0] == 10 + assert a[1] == 10 + + a[0], a[1] = test(), 12 + + assert a[0] == 10 + assert a[1] == 12 + + a[0], a[1] = 12 , test() + assert a[0] == 12 + assert a[1] == 10 +} + +