mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
checker: replace the go
keyword in error messages with spawn
(#16960)
This commit is contained in:
parent
c766ce4fe5
commit
2d8f160ef1
@ -1958,19 +1958,19 @@ fn (mut c Checker) method_call(mut node ast.CallExpr) ast.Type {
|
|||||||
fn (mut c Checker) go_expr(mut node ast.GoExpr) ast.Type {
|
fn (mut c Checker) go_expr(mut node ast.GoExpr) ast.Type {
|
||||||
ret_type := c.call_expr(mut node.call_expr)
|
ret_type := c.call_expr(mut node.call_expr)
|
||||||
if node.call_expr.or_block.kind != .absent {
|
if node.call_expr.or_block.kind != .absent {
|
||||||
c.error('option handling cannot be done in `go` call. Do it when calling `.wait()`',
|
c.error('option handling cannot be done in `spawn` call. Do it when calling `.wait()`',
|
||||||
node.call_expr.or_block.pos)
|
node.call_expr.or_block.pos)
|
||||||
}
|
}
|
||||||
// Make sure there are no mutable arguments
|
// Make sure there are no mutable arguments
|
||||||
for arg in node.call_expr.args {
|
for arg in node.call_expr.args {
|
||||||
if arg.is_mut && !arg.typ.is_ptr() {
|
if arg.is_mut && !arg.typ.is_ptr() {
|
||||||
c.error('function in `go` statement cannot contain mutable non-reference arguments',
|
c.error('function in `spawn` statement cannot contain mutable non-reference arguments',
|
||||||
arg.expr.pos())
|
arg.expr.pos())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if node.call_expr.is_method && node.call_expr.receiver_type.is_ptr()
|
if node.call_expr.is_method && node.call_expr.receiver_type.is_ptr()
|
||||||
&& !node.call_expr.left_type.is_ptr() {
|
&& !node.call_expr.left_type.is_ptr() {
|
||||||
c.error('method in `go` statement cannot have non-reference mutable receiver',
|
c.error('method in `spawn` statement cannot have non-reference mutable receiver',
|
||||||
node.call_expr.left.pos())
|
node.call_expr.left.pos())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
vlib/v/checker/tests/go_expr.vv:2:5: error: expression in `go` must be a function call
|
vlib/v/checker/tests/go_expr.vv:2:8: error: expression in `spawn` must be a function call
|
||||||
1 | fn main() {
|
1 | fn main() {
|
||||||
2 | go 1
|
2 | spawn 1
|
||||||
| ^
|
| ^
|
||||||
3 | }
|
3 | }
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
fn main() {
|
fn main() {
|
||||||
go 1
|
spawn 1
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
vlib/v/checker/tests/go_mut_arg.vv:14:16: error: function in `go` statement cannot contain mutable non-reference arguments
|
vlib/v/checker/tests/go_mut_arg.vv:14:19: error: function in `spawn` statement cannot contain mutable non-reference arguments
|
||||||
12 | a: 0
|
12 | a: 0
|
||||||
13 | }
|
13 | }
|
||||||
14 | go change(mut x)
|
14 | spawn change(mut x)
|
||||||
| ^
|
| ^
|
||||||
15 | }
|
15 | }
|
||||||
|
@ -11,5 +11,5 @@ fn main() {
|
|||||||
mut x := St{
|
mut x := St{
|
||||||
a: 0
|
a: 0
|
||||||
}
|
}
|
||||||
go change(mut x)
|
spawn change(mut x)
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
vlib/v/checker/tests/go_mut_receiver.vv:14:5: error: method in `go` statement cannot have non-reference mutable receiver
|
vlib/v/checker/tests/go_mut_receiver.vv:14:8: error: method in `spawn` statement cannot have non-reference mutable receiver
|
||||||
12 | a: 0
|
12 | a: 0
|
||||||
13 | }
|
13 | }
|
||||||
14 | go x.change()
|
14 | spawn x.change()
|
||||||
| ^
|
| ^
|
||||||
15 | }
|
15 | }
|
||||||
|
@ -11,5 +11,5 @@ fn main() {
|
|||||||
mut x := St{
|
mut x := St{
|
||||||
a: 0
|
a: 0
|
||||||
}
|
}
|
||||||
go x.change()
|
spawn x.change()
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
vlib/v/checker/tests/go_wait_or.vv:11:16: error: unexpected `?`, the function `wait` does not return an option or a result
|
vlib/v/checker/tests/go_wait_or.vv:11:16: error: unexpected `?`, the function `wait` does not return an option or a result
|
||||||
9 | go d(1)
|
9 | spawn d(1)
|
||||||
10 | ]
|
10 | ]
|
||||||
11 | r := tg.wait()?
|
11 | r := tg.wait()?
|
||||||
| ^
|
| ^
|
||||||
@ -13,7 +13,7 @@ vlib/v/checker/tests/go_wait_or.vv:13:20: error: unexpected `or` block, the func
|
|||||||
14 | println(s)
|
14 | println(s)
|
||||||
15 | tg2 := [
|
15 | tg2 := [
|
||||||
vlib/v/checker/tests/go_wait_or.vv:19:13: error: unexpected `or` block, the function `wait` does not return an option or a result
|
vlib/v/checker/tests/go_wait_or.vv:19:13: error: unexpected `or` block, the function `wait` does not return an option or a result
|
||||||
17 | go e(1)
|
17 | spawn e(1)
|
||||||
18 | ]
|
18 | ]
|
||||||
19 | tg2.wait() or { panic('problem') }
|
19 | tg2.wait() or { panic('problem') }
|
||||||
| ~~~~~~~~~~~~~~~~~~~~~~~
|
| ~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@ -25,9 +25,9 @@ vlib/v/checker/tests/go_wait_or.vv:20:15: error: unexpected `?`, the function `w
|
|||||||
20 | tg2[0].wait()?
|
20 | tg2[0].wait()?
|
||||||
| ^
|
| ^
|
||||||
21 | tg3 := [
|
21 | tg3 := [
|
||||||
22 | go f(0)
|
22 | spawn f(0)
|
||||||
vlib/v/checker/tests/go_wait_or.vv:25:6: error: `.wait()` cannot be called for an array when thread functions return options. Iterate over the arrays elements instead and handle each returned option with `or`.
|
vlib/v/checker/tests/go_wait_or.vv:25:6: error: `.wait()` cannot be called for an array when thread functions return options. Iterate over the arrays elements instead and handle each returned option with `or`.
|
||||||
23 | go f(1)
|
23 | spawn f(1)
|
||||||
24 | ]
|
24 | ]
|
||||||
25 | tg3.wait() or { panic('problem') }
|
25 | tg3.wait() or { panic('problem') }
|
||||||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
@ -48,22 +48,22 @@ vlib/v/checker/tests/go_wait_or.vv:31:15: error: wait() returns an option, so it
|
|||||||
32 | println(a)
|
32 | println(a)
|
||||||
33 | }
|
33 | }
|
||||||
vlib/v/checker/tests/go_wait_or.vv:38:6: error: `.wait()` cannot be called for an array when thread functions return options. Iterate over the arrays elements instead and handle each returned option with `or`.
|
vlib/v/checker/tests/go_wait_or.vv:38:6: error: `.wait()` cannot be called for an array when thread functions return options. Iterate over the arrays elements instead and handle each returned option with `or`.
|
||||||
36 | go g(1)
|
36 | spawn g(1)
|
||||||
37 | ]
|
37 | ]
|
||||||
38 | tg4.wait()
|
38 | tg4.wait()
|
||||||
| ~~~~~~
|
| ~~~~~~
|
||||||
39 | tg4[0].wait()
|
39 | tg4[0].wait()
|
||||||
40 | go g(3) or { panic('problem') }
|
40 | spawn g(3) or { panic('problem') }
|
||||||
vlib/v/checker/tests/go_wait_or.vv:39:9: error: wait() returns an option, so it should have either an `or {}` block, or `?` at the end
|
vlib/v/checker/tests/go_wait_or.vv:39:9: error: wait() returns an option, so it should have either an `or {}` block, or `?` at the end
|
||||||
37 | ]
|
37 | ]
|
||||||
38 | tg4.wait()
|
38 | tg4.wait()
|
||||||
39 | tg4[0].wait()
|
39 | tg4[0].wait()
|
||||||
| ~~~~~~
|
| ~~~~~~
|
||||||
40 | go g(3) or { panic('problem') }
|
40 | spawn g(3) or { panic('problem') }
|
||||||
41 | }
|
41 | }
|
||||||
vlib/v/checker/tests/go_wait_or.vv:40:10: error: option handling cannot be done in `go` call. Do it when calling `.wait()`
|
vlib/v/checker/tests/go_wait_or.vv:40:13: error: option handling cannot be done in `spawn` call. Do it when calling `.wait()`
|
||||||
38 | tg4.wait()
|
38 | tg4.wait()
|
||||||
39 | tg4[0].wait()
|
39 | tg4[0].wait()
|
||||||
40 | go g(3) or { panic('problem') }
|
40 | spawn g(3) or { panic('problem') }
|
||||||
| ~~~~~~~~~~~~~~~~~~~~~~~
|
| ~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
41 | }
|
41 | }
|
@ -5,22 +5,22 @@ fn g(n int) ? { }
|
|||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
tg := [
|
tg := [
|
||||||
go d(0)
|
spawn d(0)
|
||||||
go d(1)
|
spawn d(1)
|
||||||
]
|
]
|
||||||
r := tg.wait()?
|
r := tg.wait()?
|
||||||
println(r)
|
println(r)
|
||||||
s := tg[0].wait() or { panic('problem') }
|
s := tg[0].wait() or { panic('problem') }
|
||||||
println(s)
|
println(s)
|
||||||
tg2 := [
|
tg2 := [
|
||||||
go e(0)
|
spawn e(0)
|
||||||
go e(1)
|
spawn e(1)
|
||||||
]
|
]
|
||||||
tg2.wait() or { panic('problem') }
|
tg2.wait() or { panic('problem') }
|
||||||
tg2[0].wait()?
|
tg2[0].wait()?
|
||||||
tg3 := [
|
tg3 := [
|
||||||
go f(0)
|
spawn f(0)
|
||||||
go f(1)
|
spawn f(1)
|
||||||
]
|
]
|
||||||
tg3.wait() or { panic('problem') }
|
tg3.wait() or { panic('problem') }
|
||||||
for t in tg3 {
|
for t in tg3 {
|
||||||
@ -32,10 +32,10 @@ fn main() {
|
|||||||
println(a)
|
println(a)
|
||||||
}
|
}
|
||||||
tg4 := [
|
tg4 := [
|
||||||
go g(0)
|
spawn g(0)
|
||||||
go g(1)
|
spawn g(1)
|
||||||
]
|
]
|
||||||
tg4.wait()
|
tg4.wait()
|
||||||
tg4[0].wait()
|
tg4[0].wait()
|
||||||
go g(3) or { panic('problem') }
|
spawn g(3) or { panic('problem') }
|
||||||
}
|
}
|
||||||
|
@ -1014,7 +1014,7 @@ fn (mut p Parser) go_expr() ast.GoExpr {
|
|||||||
call_expr := if expr is ast.CallExpr {
|
call_expr := if expr is ast.CallExpr {
|
||||||
expr
|
expr
|
||||||
} else {
|
} else {
|
||||||
p.error_with_pos('expression in `go` must be a function call', expr.pos())
|
p.error_with_pos('expression in `spawn` must be a function call', expr.pos())
|
||||||
ast.CallExpr{
|
ast.CallExpr{
|
||||||
scope: p.scope
|
scope: p.scope
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user