Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
felipensp committed Oct 6, 2024
1 parent 4af22b4 commit 550d7b9
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 14 deletions.
2 changes: 1 addition & 1 deletion vlib/v/checker/checker.v
Original file line number Diff line number Diff line change
Expand Up @@ -5034,7 +5034,7 @@ fn (mut c Checker) ensure_generic_type_specify_type_names(typ ast.Type, pos toke
}
.sum_type {
info := sym.info as ast.SumType
if info.generic_types.len > 0 && !typ.has_flag(.generic) && info.concrete_types.len == 0 {
if info.generic_types.len > 0 && info.concrete_types.len == 0 {
c.error('`${sym.name}` type is generic sumtype, must specify the generic type names, e.g. ${sym.name}[T], ${sym.name}[int]',
pos)
return false
Expand Down
7 changes: 7 additions & 0 deletions vlib/v/checker/tests/generics_field_struct_arr_err.out
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
vlib/v/checker/tests/generics_field_struct_arr_err.vv:20:6: error: `Callback` type is generic sumtype, must specify the generic type names, e.g. Callback[T], Callback[int]
18 | v T
19 | prev T
20 | cb2 []Callback
| ~~~~~~~~~~
21 | a int
22 | }
24 changes: 24 additions & 0 deletions vlib/v/checker/tests/generics_field_struct_arr_err.vv
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
// callback types
type CBnoret[T] = fn (val T)

type CBnoret2[T] = fn (val T, prev T)

type CBvret[T] = fn (val T) T

type CBvret2[T] = fn (val T, prev T) T

type Callback[T] = CBnoret[T] | CBnoret2[T] | CBvret[T] | CBvret2[T]

interface IObv[T] {
v T
prev T
cb []Callback[T]
}

struct Obv[T] {
mut:
v T
prev T
cb2 []Callback
a int
}
13 changes: 0 additions & 13 deletions vlib/v/parser/parse_type.v
Original file line number Diff line number Diff line change
Expand Up @@ -123,19 +123,6 @@ fn (mut p Parser) parse_array_type(expecting token.Kind, is_option bool) ast.Typ
idx := p.table.find_or_register_array_with_dims(elem_type, nr_dims)
if elem_type.has_flag(.generic) {
return ast.new_type(idx).set_flag(.generic)
} else {
sym := p.table.sym(elem_type)
match sym.info {
ast.Struct, ast.Interface, ast.SumType {
if sym.info.is_generic {
if p.tok.kind != .lsbr {
p.error_with_pos('`${sym.name}` type is generic type, must specify the generic type names, e.g. []${sym.name}[T]',
name_pos)
}
}
}
else {}
}
}
return ast.new_type(idx)
}
Expand Down

0 comments on commit 550d7b9

Please sign in to comment.