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:
parent
2fb561ba7f
commit
7279e49077
@ -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_
|
if mut expr is ast.Ident {
|
||||||
} else {
|
if mut expr.obj is ast.Var {
|
||||||
right_node.right
|
|
||||||
}
|
|
||||||
if expr is ast.Ident {
|
|
||||||
if 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 {
|
||||||
|
Loading…
Reference in New Issue
Block a user