mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
checker: check duplicate consts
This commit is contained in:
parent
4d415e56d6
commit
81ed6ad2a1
@ -29,6 +29,7 @@ mut:
|
|||||||
fn_return_type table.Type // current function's return type
|
fn_return_type table.Type // current function's return type
|
||||||
const_decl string
|
const_decl string
|
||||||
const_deps []string
|
const_deps []string
|
||||||
|
const_names []string
|
||||||
pref &pref.Preferences // Preferences shared from V struct
|
pref &pref.Preferences // Preferences shared from V struct
|
||||||
in_for_count int // if checker is currently in an for loop
|
in_for_count int // if checker is currently in an for loop
|
||||||
// checked_ident string // to avoid infinit checker loops
|
// checked_ident string // to avoid infinit checker loops
|
||||||
@ -1271,6 +1272,10 @@ fn (mut c Checker) stmt(node ast.Stmt) {
|
|||||||
mut field_names := []string{}
|
mut field_names := []string{}
|
||||||
mut field_order := []int{}
|
mut field_order := []int{}
|
||||||
for i, field in it.fields {
|
for i, field in it.fields {
|
||||||
|
if field.name in c.const_names {
|
||||||
|
c.error('field name `$field.name` duplicate', field.pos)
|
||||||
|
}
|
||||||
|
c.const_names << field.name
|
||||||
field_names << field.name
|
field_names << field.name
|
||||||
field_order << i
|
field_order << i
|
||||||
}
|
}
|
||||||
|
7
vlib/v/checker/tests/const_field_name_duplicate_err.out
Normal file
7
vlib/v/checker/tests/const_field_name_duplicate_err.out
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
vlib/v/checker/tests/const_field_name_duplicate_err.v:3:2: error: field name `aaa` duplicate
|
||||||
|
1| const (
|
||||||
|
2| aaa = 1
|
||||||
|
3| aaa = 2
|
||||||
|
~~~
|
||||||
|
4| )
|
||||||
|
5| fn main() {
|
7
vlib/v/checker/tests/const_field_name_duplicate_err.vv
Normal file
7
vlib/v/checker/tests/const_field_name_duplicate_err.vv
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
const (
|
||||||
|
aaa = 1
|
||||||
|
aaa = 2
|
||||||
|
)
|
||||||
|
fn main() {
|
||||||
|
println(aaa)
|
||||||
|
}
|
@ -0,0 +1,6 @@
|
|||||||
|
vlib/v/checker/tests/multi_const_field_name_duplicate_err.v:2:8: error: field name `aaa` duplicate
|
||||||
|
1| const (aaa = 1)
|
||||||
|
2| const (aaa = 2)
|
||||||
|
~~~
|
||||||
|
3| fn main() {
|
||||||
|
4| println(aaa)
|
@ -0,0 +1,5 @@
|
|||||||
|
const (aaa = 1)
|
||||||
|
const (aaa = 2)
|
||||||
|
fn main() {
|
||||||
|
println(aaa)
|
||||||
|
}
|
@ -1002,6 +1002,7 @@ fn (mut p Parser) const_decl() ast.ConstDecl {
|
|||||||
if p.tok.kind == .comment {
|
if p.tok.kind == .comment {
|
||||||
p.comment()
|
p.comment()
|
||||||
}
|
}
|
||||||
|
pos := p.tok.position()
|
||||||
name := p.prepend_mod(p.check_name())
|
name := p.prepend_mod(p.check_name())
|
||||||
// name := p.check_name()
|
// name := p.check_name()
|
||||||
// println('!!const: $name')
|
// println('!!const: $name')
|
||||||
@ -1010,7 +1011,7 @@ fn (mut p Parser) const_decl() ast.ConstDecl {
|
|||||||
field := ast.ConstField{
|
field := ast.ConstField{
|
||||||
name: name
|
name: name
|
||||||
expr: expr
|
expr: expr
|
||||||
pos: p.tok.position()
|
pos: pos
|
||||||
}
|
}
|
||||||
fields << field
|
fields << field
|
||||||
p.global_scope.register(field.name, field)
|
p.global_scope.register(field.name, field)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user