Skip to content

Commit

Permalink
disallow C functions and structs to be declared as generic
Browse files Browse the repository at this point in the history
  • Loading branch information
StunxFS committed Oct 15, 2024
1 parent 78bdeca commit 2ab787c
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 0 deletions.
3 changes: 3 additions & 0 deletions vlib/v/checker/fn.v
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ fn (mut c Checker) fn_decl(mut node ast.FnDecl) {
eprintln('>>> post processing node.name: ${node.name:-30} | ${node.generic_names} <=> ${c.table.cur_concrete_types}')
}
}
if node.language == .c && node.generic_names.len > 0 {
c.error('C functions cannot be declared as generic', node.pos)
}
// record the veb route methods (public non-generic methods):
if node.generic_names.len > 0 && node.is_pub {
typ_vweb_result := c.table.find_type_idx('veb.Result')
Expand Down
3 changes: 3 additions & 0 deletions vlib/v/checker/struct.v
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ fn (mut c Checker) struct_decl(mut node ast.StructDecl) {
defer {
util.timing_measure_cumulative(@METHOD)
}
if node.language == .c && node.generic_types.len > 0 {
c.error('C structs cannot be declared as generic', node.pos)
}
mut struct_sym, struct_typ_idx := c.table.find_sym_and_type_idx(node.name)
mut has_generic_types := false
if mut struct_sym.info is ast.Struct {
Expand Down
12 changes: 12 additions & 0 deletions vlib/v/checker/tests/c_struct_and_fn_as_generics_error.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
vlib/v/checker/tests/c_struct_and_fn_as_generics_error.vv:1:1: error: C structs cannot be declared as generic
1 | struct C.Ptr[T] {
| ~~~~~~~~~~~~
2 | ptr &T
3 | }
vlib/v/checker/tests/c_struct_and_fn_as_generics_error.vv:5:1: error: C functions cannot be declared as generic
3 | }
4 |
5 | fn C.alloc[T]() &T
| ~~~~~~~~~~~~~~~~~~
6 |
7 | fn main() {}
7 changes: 7 additions & 0 deletions vlib/v/checker/tests/c_struct_and_fn_as_generics_error.vv
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
struct C.Ptr[T] {
ptr &T
}

fn C.alloc[T]() &T

fn main() {}

0 comments on commit 2ab787c

Please sign in to comment.