1
0
mirror of https://github.com/vlang/v.git synced 2023-08-10 21:13:21 +03:00

checker: clean up in assign_stmt() (#18759)

This commit is contained in:
yuyi 2023-07-04 11:48:01 +08:00 committed by GitHub
parent 2fb561ba7f
commit 7279e49077
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -18,7 +18,7 @@ fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) {
right_first := node.right[0] right_first := node.right[0]
node.left_types = [] node.left_types = []
mut right_len := node.right.len mut right_len := node.right.len
mut right_type0 := ast.void_type mut right_first_type := ast.void_type
for i, mut right in node.right { for i, mut right in node.right {
if right in [ast.CallExpr, ast.IfExpr, ast.LockExpr, ast.MatchExpr, ast.DumpExpr, if right in [ast.CallExpr, ast.IfExpr, ast.LockExpr, ast.MatchExpr, ast.DumpExpr,
ast.SelectorExpr, ast.ParExpr] { ast.SelectorExpr, ast.ParExpr] {
@ -39,9 +39,9 @@ fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) {
info.size_expr, false) info.size_expr, false)
} }
if i == 0 { if i == 0 {
right_type0 = right_type right_first_type = right_type
node.right_types = [ node.right_types = [
c.check_expr_opt_call(right, right_type0), c.check_expr_opt_call(right, right_first_type),
] ]
} }
if right_type_sym.kind == .multi_return { if right_type_sym.kind == .multi_return {
@ -735,19 +735,14 @@ fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) {
c.expr(right_node.right) c.expr(right_node.right)
c.inside_ref_lit = old_inside_ref_lit c.inside_ref_lit = old_inside_ref_lit
if right_node.op == .amp { if right_node.op == .amp {
expr := if right_node.right is ast.ParExpr { mut expr := right_node.right
mut expr_ := right_node.right.expr for mut expr is ast.ParExpr {
for mut expr_ is ast.ParExpr { expr = expr.expr
expr_ = expr_.expr
}
expr_
} else {
right_node.right
} }
if expr is ast.Ident { if mut expr is ast.Ident {
if expr.obj is ast.Var { if mut expr.obj is ast.Var {
v := expr.obj v := expr.obj
right_type0 = v.typ right_first_type = v.typ
} }
if !c.inside_unsafe && assigned_var.is_mut() && !expr.is_mut() { if !c.inside_unsafe && assigned_var.is_mut() && !expr.is_mut() {
c.error('`${expr.name}` is immutable, cannot have a mutable reference to it', c.error('`${expr.name}` is immutable, cannot have a mutable reference to it',
@ -757,7 +752,7 @@ fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) {
} }
if right_node.op == .arrow { if right_node.op == .arrow {
if assigned_var.is_mut { if assigned_var.is_mut {
right_sym := c.table.sym(right_type0) right_sym := c.table.sym(right_first_type)
if right_sym.kind == .chan { if right_sym.kind == .chan {
chan_info := right_sym.chan_info() chan_info := right_sym.chan_info()
if chan_info.elem_type.is_ptr() && !chan_info.is_mut { if chan_info.elem_type.is_ptr() && !chan_info.is_mut {