cgen: fix option cast from fntype (fix #22283, #22284) (#22285)

This commit is contained in:
Felipe Pena 2024-09-22 18:34:24 -03:00 committed by GitHub
parent 8ff61ffeab
commit b79aa0208f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 25 additions and 1 deletions

View file

@ -589,7 +589,7 @@ fn (mut g Gen) assign_stmt(node_ ast.AssignStmt) {
}
fn_name := c_fn_name(g.get_ternary_name(ident.name))
if val_type.has_flag(.option) && val is ast.SelectorExpr {
if val_type.has_flag(.option) {
ret_styp := g.typ(g.unwrap_generic(val_type))
g.write('${ret_styp} ${fn_name}')
} else {

View file

@ -0,0 +1,24 @@
type DataFn = fn (name string) string
fn which_lang(name string) string {
return name
}
fn find_func(name string) ?DataFn {
a := ?DataFn(which_lang)
return a
}
fn find_func2(name string) ?DataFn {
a := if name == 'vlang' { ?DataFn(which_lang) } else { none }
return a
}
fn test_main() {
if a := find_func('foo') {
assert a('bar') == 'bar'
}
if b := find_func('foo') {
assert b('bar') == 'bar'
}
}