Skip to content

Commit 6762c9a

Browse files
authored
checker: disallow function implementing interface (fix #24846) (#25389)
1 parent 4b4c706 commit 6762c9a

3 files changed

Lines changed: 17 additions & 0 deletions

File tree

vlib/v/checker/checker.v

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1179,6 +1179,10 @@ fn (mut c Checker) type_implements(typ ast.Type, interface_type ast.Type, pos to
11791179
if typ_sym.name == 'JS.Any' {
11801180
return true
11811181
}
1182+
if typ_sym.kind == .function && inter_sym.name != 'JS.Any' {
1183+
c.error('cannot implement interface `${inter_sym.name}` using function', pos)
1184+
return false
1185+
}
11821186
if mut inter_sym.info is ast.Interface {
11831187
mut generic_type := interface_type
11841188
mut generic_info := inter_sym.info
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
vlib/v/checker/tests/interface_implemented_by_function.vv:6:6: error: cannot implement interface `Ch` using function
2+
4 |
3+
5 | fn main() {
4+
6 | id(id)
5+
| ~~
6+
7 | }
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
interface Ch {}
2+
3+
fn id(x Ch) Ch { return x }
4+
5+
fn main() {
6+
id(id)
7+
}

0 commit comments

Comments
 (0)