parser: check the receiver error of method call (#13203)
parent
1c4c430642
commit
f0b7e5049b
|
@ -2317,6 +2317,10 @@ pub fn (mut p Parser) name_expr() ast.Expr {
|
||||||
scope: p.scope
|
scope: p.scope
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if p.peek_token(2).kind == .name && p.peek_token(3).kind == .lpar && !known_var {
|
||||||
|
p.error_with_pos('the receiver of the method call must be an instantiated object, e.g. `foo.bar()`',
|
||||||
|
p.tok.position())
|
||||||
|
}
|
||||||
// `Color.green`
|
// `Color.green`
|
||||||
mut enum_name := p.check_name()
|
mut enum_name := p.check_name()
|
||||||
enum_name_pos := p.prev_tok.position()
|
enum_name_pos := p.prev_tok.position()
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
vlib/v/parser/tests/method_call_receiver_err.vv:9:11: error: the receiver of the method call must be an instantiated object, e.g. `foo.bar()`
|
||||||
|
7 |
|
||||||
|
8 | $for method in S1.methods {
|
||||||
|
9 | println(S1.method_hello('yo'))
|
||||||
|
| ~~
|
||||||
|
10 | }
|
||||||
|
11 | }
|
|
@ -0,0 +1,15 @@
|
||||||
|
module main
|
||||||
|
|
||||||
|
struct S1{}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
s1 := S1{}
|
||||||
|
|
||||||
|
$for method in S1.methods {
|
||||||
|
println(S1.method_hello('yo'))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn (t S1) method_hello() string {
|
||||||
|
return 'Hello'
|
||||||
|
}
|
Loading…
Reference in New Issue