mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
allow lock
expression to return multiple objects (#8657)
This commit is contained in:
parent
d37fb5641f
commit
f3c5f24c17
@ -2551,7 +2551,8 @@ pub fn (mut c Checker) assign_stmt(mut assign_stmt ast.AssignStmt) {
|
||||
mut right_len := assign_stmt.right.len
|
||||
mut right_type0 := table.void_type
|
||||
for right in assign_stmt.right {
|
||||
if right is ast.CallExpr || right is ast.IfExpr || right is ast.MatchExpr {
|
||||
if right is ast.CallExpr || right is ast.IfExpr || right is ast.LockExpr
|
||||
|| right is ast.MatchExpr {
|
||||
right_type0 = c.expr(right)
|
||||
assign_stmt.right_types = [
|
||||
c.check_expr_opt_call(right, right_type0),
|
||||
|
@ -1742,6 +1742,7 @@ fn (mut g Gen) gen_assign_stmt(assign_stmt ast.AssignStmt) {
|
||||
right_expr := assign_stmt.right[0]
|
||||
match right_expr {
|
||||
ast.CallExpr { return_type = right_expr.return_type }
|
||||
ast.LockExpr { return_type = right_expr.typ }
|
||||
ast.MatchExpr { return_type = right_expr.return_type }
|
||||
ast.IfExpr { return_type = right_expr.typ }
|
||||
else {}
|
||||
|
@ -12,3 +12,32 @@ fn test_lock_expr() {
|
||||
assert m == -57
|
||||
assert n == 173
|
||||
}
|
||||
|
||||
struct Abc {
|
||||
mut:
|
||||
a f64
|
||||
}
|
||||
|
||||
fn test_multi_objects() {
|
||||
shared x := Abc{ a: 12.5 }
|
||||
shared y := Abc{ a: -7.5 }
|
||||
shared z := Abc{ a: 13.125 }
|
||||
a, b, c := rlock z, x, y { y.a, z.a, x.a }
|
||||
assert a == -7.5
|
||||
assert b == 13.125
|
||||
assert c == 12.5
|
||||
}
|
||||
|
||||
fn (mut st Abc) getvals(mut a Abc, mut b Abc) (f64, f64, f64) {
|
||||
return a.a, st.a, b.a
|
||||
}
|
||||
|
||||
fn test_mult_ret_method() {
|
||||
shared x := Abc{ a: 12.5 }
|
||||
shared y := Abc{ a: -7.5 }
|
||||
shared z := Abc{ a: 13.125 }
|
||||
a, b, c := lock z, x, y { z.getvals(mut x, mut y) }
|
||||
assert a == 12.5
|
||||
assert b == 13.125
|
||||
assert c == -7.5
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user