make function arguments immutable by default

This commit is contained in:
Alexander Medvednikov 2019-08-07 08:19:27 +02:00
parent 06b8bd9382
commit 34e0b164eb
22 changed files with 107 additions and 83 deletions

View file

@ -1192,7 +1192,8 @@ fn (p mut Parser) statement(add_semi bool) string {
fn (p mut Parser) assign_statement(v Var, ph int, is_map bool) {
p.log('assign_statement() name=$v.name tok=')
tok := p.tok
if !v.is_mut && !v.is_arg && !p.pref.translated && !v.is_global{
//if !v.is_mut && !v.is_arg && !p.pref.translated && !v.is_global{
if !v.is_mut && !p.pref.translated && !v.is_global{
p.error('`$v.name` is immutable')
}
if !v.is_changed {
@ -1799,7 +1800,8 @@ fn (p mut Parser) dot(str_typ string, method_ph int) string {
return method.typ
}
fn (p mut Parser) index_expr(typ string, fn_ph int) string {
fn (p mut Parser) index_expr(typ_ string, fn_ph int) string {
mut typ := typ_
// a[0]
v := p.expr_var
//if p.fileis('fn_test.v') {
@ -2361,8 +2363,8 @@ fn (p mut Parser) char_expr() {
}
fn format_str(str string) string {
str = str.replace('"', '\\"')
fn format_str(_str string) string {
mut str := _str.replace('"', '\\"')
$if windows {
str = str.replace('\r\n', '\\n')
}
@ -3298,9 +3300,11 @@ fn (p mut Parser) go_statement() {
fn (p mut Parser) register_var(v Var) {
if v.line_nr == 0 {
v.line_nr = p.scanner.line_nr
}
p.cur_fn.register_var(v)
//v.line_nr = p.scanner.line_nr
p.cur_fn.register_var({ v | line_nr: p.scanner.line_nr })
} else {
p.cur_fn.register_var(v)
}
}
// user:=jsdecode(User, user_json_string)