mirror of
https://github.com/vlang/v.git
synced 2025-09-19 04:17:46 -04:00
This commit is contained in:
parent
7568526b14
commit
c91cb87671
@ -561,6 +561,7 @@ fn (mut g Gen) c_fn_name(node &ast.FnDecl) string {
|
||||
|
||||
if node.generic_names.len > 0 {
|
||||
name = g.generic_fn_name(g.cur_concrete_types, name)
|
||||
name = name.replace_each(c_fn_name_escape_seq)
|
||||
}
|
||||
|
||||
if g.pref.translated || g.file.is_translated || node.is_file_translated {
|
||||
@ -753,7 +754,10 @@ fn (mut g Gen) fn_decl_params(params []ast.Param, scope &ast.Scope, is_variadic
|
||||
typ = g.table.sym(typ).array_info().elem_type.set_flag(.variadic)
|
||||
}
|
||||
param_type_sym := g.table.sym(typ)
|
||||
mut param_type_name := g.styp(typ).replace_each(c_fn_name_escape_seq)
|
||||
mut param_type_name := g.styp(typ)
|
||||
if param.typ.has_flag(.generic) {
|
||||
param_type_name = param_type_name.replace_each(c_fn_name_escape_seq)
|
||||
}
|
||||
if param_type_sym.kind == .function && !typ.has_flag(.option) {
|
||||
info := param_type_sym.info as ast.FnType
|
||||
func := info.func
|
||||
@ -2012,6 +2016,7 @@ fn (mut g Gen) fn_call(node ast.CallExpr) {
|
||||
}
|
||||
}
|
||||
name = g.generic_fn_name(concrete_types, name)
|
||||
name = name.replace_each(c_fn_name_escape_seq)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
23
vlib/v/tests/generics/generic_fn_struct_test.v
Normal file
23
vlib/v/tests/generics/generic_fn_struct_test.v
Normal file
@ -0,0 +1,23 @@
|
||||
module main
|
||||
|
||||
struct People[T] {
|
||||
raw T
|
||||
}
|
||||
|
||||
struct Man {
|
||||
name string
|
||||
}
|
||||
|
||||
fn test_main() {
|
||||
m1 := Man{
|
||||
name: 'Tom'
|
||||
}
|
||||
gen1(m1)
|
||||
}
|
||||
|
||||
fn gen1[T](m T) {
|
||||
gen2[People[T]]()
|
||||
}
|
||||
|
||||
fn gen2[T]() {
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user