checker: fix pass fixed array of function as argument (#8502)
parent
a0a33f7ff1
commit
9a2820fa7b
|
@ -91,6 +91,12 @@ pub fn (mut c Checker) check_basic(got table.Type, expected table.Type) bool {
|
|||
return true
|
||||
}
|
||||
}
|
||||
// fixed array fn
|
||||
if got_type_sym.kind == .array_fixed && exp_type_sym.kind == .array_fixed {
|
||||
if c.table.type_to_str(got) == c.table.type_to_str(expected).trim('&') {
|
||||
return true
|
||||
}
|
||||
}
|
||||
if got_type_sym.kind == .array_fixed && exp_type_sym.kind == .byteptr {
|
||||
info := got_type_sym.info as table.ArrayFixed
|
||||
if info.elem_type.idx() == table.byte_type_idx {
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
fn foo(a string) int {
|
||||
return 10 + a.len
|
||||
}
|
||||
|
||||
fn foo2(a string) int {
|
||||
return 20 + a.len
|
||||
}
|
||||
|
||||
fn bar1(mut a [1]fn (string) int) int {
|
||||
a[0] = foo2
|
||||
return a[0]('hello')
|
||||
}
|
||||
|
||||
fn bar2(a [1]fn (string) int) int {
|
||||
return a[0]('hello')
|
||||
}
|
||||
|
||||
fn test_fn_with_fixed_array_function_args() {
|
||||
mut a1 := [foo]!
|
||||
assert bar1(mut a1) == 25
|
||||
a2 := [foo]!
|
||||
assert bar2(a2) == 15
|
||||
}
|
Loading…
Reference in New Issue