mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
parser: do not allow array references + explain why
This commit is contained in:
parent
63c9b88e7f
commit
ed15b40529
@ -159,6 +159,7 @@ pub fn (mut p Parser) parse_type() table.Type {
|
||||
}
|
||||
language := p.parse_language()
|
||||
mut typ := table.void_type
|
||||
is_array := p.tok.kind == .lsbr
|
||||
if p.tok.kind != .lcbr {
|
||||
pos := p.tok.position()
|
||||
typ = p.parse_any_type(language, nr_muls > 0, true)
|
||||
@ -177,6 +178,11 @@ pub fn (mut p Parser) parse_type() table.Type {
|
||||
}
|
||||
if nr_muls > 0 {
|
||||
typ = typ.set_nr_muls(nr_muls)
|
||||
if is_array {
|
||||
p.error('V arrays are already references behind the scenes,
|
||||
there is no need to use a reference to an array (e.g. use `[]string` instead of `&[]string`).
|
||||
If you need to modify an array in a function, use a mutable argument instead: `fn foo(mut s []string) {}`.')
|
||||
}
|
||||
}
|
||||
return typ
|
||||
}
|
||||
|
@ -55,7 +55,7 @@ mut:
|
||||
expecting_type bool // `is Type`, expecting type
|
||||
errors []errors.Error
|
||||
warnings []errors.Warning
|
||||
vet_errors &[]string
|
||||
vet_errors []string
|
||||
cur_fn_name string
|
||||
}
|
||||
|
||||
@ -72,7 +72,6 @@ pub fn parse_stmt(text string, table &table.Table, scope &ast.Scope) ast.Stmt {
|
||||
start_pos: 0
|
||||
parent: 0
|
||||
}
|
||||
vet_errors: 0
|
||||
}
|
||||
p.init_parse_fns()
|
||||
p.read_first_token()
|
||||
@ -89,7 +88,6 @@ pub fn parse_text(text string, b_table &table.Table, pref &pref.Preferences, sco
|
||||
errors: []errors.Error{}
|
||||
warnings: []errors.Warning{}
|
||||
global_scope: global_scope
|
||||
vet_errors: 0
|
||||
}
|
||||
return p.parse()
|
||||
}
|
||||
@ -117,12 +115,11 @@ pub fn parse_file(path string, b_table &table.Table, comments_mode scanner.Comme
|
||||
errors: []errors.Error{}
|
||||
warnings: []errors.Warning{}
|
||||
global_scope: global_scope
|
||||
vet_errors: 0
|
||||
}
|
||||
return p.parse()
|
||||
}
|
||||
|
||||
pub fn parse_vet_file(path string, table_ &table.Table, pref &pref.Preferences, vet_errors &[]string) ast.File {
|
||||
pub fn parse_vet_file(path string, table_ &table.Table, pref &pref.Preferences, vet_errors []string) ast.File {
|
||||
global_scope := &ast.Scope{
|
||||
parent: 0
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user