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())
|
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`
|
// `Color.green`
|
||||||
mut enum_name := p.check_name()
|
mut enum_name := p.check_name()
|
||||||
enum_name_pos := p.prev_tok.pos()
|
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