mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
Revert "Revert "cgen: fix generics with generics fn type parameter (#10078)""
This reverts commit d3de91ee86
.
This commit is contained in:
parent
c55549a16a
commit
d463817f80
@ -2373,7 +2373,7 @@ fn (mut g Gen) gen_assign_stmt(assign_stmt ast.AssignStmt) {
|
||||
}
|
||||
else {}
|
||||
}
|
||||
right_sym := g.table.get_type_symbol(val_type)
|
||||
right_sym := g.table.get_type_symbol(g.unwrap_generic(val_type))
|
||||
is_fixed_array_copy := right_sym.kind == .array_fixed && val is ast.Ident
|
||||
g.is_assign_lhs = true
|
||||
g.assign_op = assign_stmt.op
|
||||
|
@ -4,19 +4,40 @@ fn neg(a int) int {
|
||||
|
||||
fn indirect_call(func fn (int) int, a int) int {
|
||||
println(typeof(func).name)
|
||||
assert typeof(func).name == typeof(neg).name
|
||||
return func(a)
|
||||
}
|
||||
|
||||
fn generic_call<T>(func T, a int) int {
|
||||
println(T.name)
|
||||
assert T.name == typeof(neg).name
|
||||
return func(a)
|
||||
}
|
||||
|
||||
fn generic_indirect_call<T>(func T, a int) int {
|
||||
println(T.name)
|
||||
assert T.name == typeof(neg).name
|
||||
return indirect_call(func, a)
|
||||
}
|
||||
|
||||
fn indirect_call_v2(func fn (int) int, a int) int {
|
||||
f := func
|
||||
assert typeof(f).name == typeof(neg).name
|
||||
return f(a)
|
||||
}
|
||||
|
||||
fn generic_call_v2<T>(func T, a int) int {
|
||||
f := func
|
||||
assert typeof(f).name == typeof(neg).name
|
||||
return f(a)
|
||||
}
|
||||
|
||||
fn generic_indirect_call_v2<T>(func T, a int) int {
|
||||
f := func
|
||||
assert typeof(f).name == typeof(neg).name
|
||||
return indirect_call_v2(f, a)
|
||||
}
|
||||
|
||||
fn test_generics_with_generics_fn_type_parameter() {
|
||||
mut ret := 0
|
||||
|
||||
@ -31,4 +52,16 @@ fn test_generics_with_generics_fn_type_parameter() {
|
||||
ret = generic_indirect_call(neg, 4)
|
||||
println(ret)
|
||||
assert ret == -4
|
||||
|
||||
ret = indirect_call_v2(neg, 5)
|
||||
println(ret)
|
||||
assert ret == -5
|
||||
|
||||
ret = generic_call_v2(neg, 6)
|
||||
println(ret)
|
||||
assert ret == -6
|
||||
|
||||
ret = generic_indirect_call_v2(neg, 7)
|
||||
println(ret)
|
||||
assert ret == -7
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user