mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
checker: check mutability in index exprs; parser: set is_mut for args
This commit is contained in:
parent
ee31339dfd
commit
a56121c329
@ -450,6 +450,7 @@ fn (mut c Checker) assign_expr(assign_expr mut ast.AssignExpr) {
|
||||
if ast.expr_is_blank_ident(assign_expr.left) {
|
||||
return
|
||||
}
|
||||
// Make sure the variable is mutable
|
||||
match assign_expr.left {
|
||||
ast.Ident {
|
||||
scope := c.file.scope.innermost(assign_expr.pos.pos)
|
||||
@ -460,6 +461,20 @@ fn (mut c Checker) assign_expr(assign_expr mut ast.AssignExpr) {
|
||||
}
|
||||
}
|
||||
}
|
||||
ast.IndexExpr {
|
||||
// `m[key] = val`
|
||||
if it.left is ast.Ident {
|
||||
ident := it.left as ast.Ident
|
||||
// TODO copy pasta
|
||||
scope := c.file.scope.innermost(assign_expr.pos.pos)
|
||||
if v := scope.find_var(ident.name) {
|
||||
if !v.is_mut {
|
||||
c.error('`$ident.name` is immutable, declare it with `mut` to assign to it',
|
||||
assign_expr.pos)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {}
|
||||
}
|
||||
// Single side check
|
||||
|
@ -161,6 +161,7 @@ fn (mut p Parser) fn_decl() ast.FnDecl {
|
||||
p.scope.register(arg.name, ast.Var{
|
||||
name: arg.name
|
||||
typ: arg.typ
|
||||
is_mut: arg.is_mut
|
||||
})
|
||||
}
|
||||
mut end_pos := p.prev_tok.position()
|
||||
|
Loading…
Reference in New Issue
Block a user