mirror of
https://github.com/vlang/v.git
synced 2025-09-13 09:25:45 -04:00
parser: fix assigning static method to anon fn (#19499)
This commit is contained in:
parent
2563552cd6
commit
0904a9e892
@ -2825,6 +2825,28 @@ fn (mut p Parser) name_expr() ast.Expr {
|
||||
p.tok.pos())
|
||||
}
|
||||
}
|
||||
// `anon_fn := Foo.bar` assign static method
|
||||
if !known_var && lit0_is_capital && p.peek_tok.kind == .dot && language == .v
|
||||
&& p.peek_token(2).kind == .name {
|
||||
if func := p.table.find_fn(p.prepend_mod(p.tok.lit) + '__static__' + p.peek_token(2).lit) {
|
||||
fn_type := ast.new_type(p.table.find_or_register_fn_type(func, false,
|
||||
true))
|
||||
pos := p.tok.pos()
|
||||
typ_name := p.check_name()
|
||||
p.check(.dot)
|
||||
field_name := p.check_name()
|
||||
pos.extend(p.tok.pos())
|
||||
return ast.Ident{
|
||||
name: p.prepend_mod(typ_name) + '__static__' + field_name
|
||||
mod: p.mod
|
||||
kind: .function
|
||||
info: ast.IdentFn{
|
||||
typ: fn_type
|
||||
}
|
||||
scope: p.scope
|
||||
}
|
||||
}
|
||||
}
|
||||
// `Color.green`
|
||||
mut enum_name := p.check_name()
|
||||
enum_name_pos := p.prev_tok.pos()
|
||||
|
15
vlib/v/tests/assign_static_method_to_anon_fn_test.v
Normal file
15
vlib/v/tests/assign_static_method_to_anon_fn_test.v
Normal file
@ -0,0 +1,15 @@
|
||||
struct Foo {
|
||||
}
|
||||
|
||||
fn Foo.bar() string {
|
||||
println('bar')
|
||||
return 'bar'
|
||||
}
|
||||
|
||||
fn test_assign_static_method_to_anon_fn() {
|
||||
// vfmt off
|
||||
anon_fn := Foo.bar
|
||||
// vfmt on
|
||||
ret := anon_fn()
|
||||
assert ret == 'bar'
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user