builder: fix detecting duplicate functions (#9033)
parent
6d77594409
commit
dc04c3196b
|
@ -366,7 +366,7 @@ fn (b &Builder) print_warnings_and_errors() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if redefine_conflicts.len > 1 {
|
if redefines.len > 0 {
|
||||||
eprintln('redefinition of function `$fn_name`')
|
eprintln('redefinition of function `$fn_name`')
|
||||||
for redefine in redefines {
|
for redefine in redefines {
|
||||||
eprintln(util.formatted_error('conflicting declaration:', redefine.fheader,
|
eprintln(util.formatted_error('conflicting declaration:', redefine.fheader,
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
redefinition of function `main.f`
|
||||||
|
vlib/v/checker/tests/fn_duplicate.vv:1:1: conflicting declaration: fn f()
|
||||||
|
1 | fn f() {
|
||||||
|
| ~~~~~~
|
||||||
|
2 |
|
||||||
|
3 | }
|
||||||
|
vlib/v/checker/tests/fn_duplicate.vv:5:1: conflicting declaration: fn f(i int)
|
||||||
|
3 | }
|
||||||
|
4 |
|
||||||
|
5 | fn f(i int) {
|
||||||
|
| ~~~~~~~~~~~
|
||||||
|
6 |
|
||||||
|
7 | }
|
|
@ -0,0 +1,7 @@
|
||||||
|
fn f() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
fn f(i int) {
|
||||||
|
|
||||||
|
}
|
|
@ -329,8 +329,8 @@ fn (mut p Parser) fn_decl() ast.FnDecl {
|
||||||
} else {
|
} else {
|
||||||
name = p.prepend_mod(name)
|
name = p.prepend_mod(name)
|
||||||
}
|
}
|
||||||
if _ := p.table.find_fn(name) {
|
if !p.pref.translated && language == .v && name in p.table.fns {
|
||||||
p.fn_redefinition_error(name)
|
p.table.redefined_fns << name
|
||||||
}
|
}
|
||||||
// p.warn('reg functn $name ()')
|
// p.warn('reg functn $name ()')
|
||||||
p.table.register_fn(table.Fn{
|
p.table.register_fn(table.Fn{
|
||||||
|
@ -809,21 +809,6 @@ fn (mut p Parser) check_fn_atomic_arguments(typ table.Type, pos token.Position)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (mut p Parser) fn_redefinition_error(name string) {
|
|
||||||
if p.pref.translated {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
// Find where this function was already declared
|
|
||||||
// TODO
|
|
||||||
/*
|
|
||||||
for file in p.ast_files {
|
|
||||||
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
p.table.redefined_fns << name
|
|
||||||
// p.error('redefinition of function `$name`')
|
|
||||||
}
|
|
||||||
|
|
||||||
fn have_fn_main(stmts []ast.Stmt) bool {
|
fn have_fn_main(stmts []ast.Stmt) bool {
|
||||||
for stmt in stmts {
|
for stmt in stmts {
|
||||||
if stmt is ast.FnDecl {
|
if stmt is ast.FnDecl {
|
||||||
|
|
Loading…
Reference in New Issue