mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
checker: disallow array append as expression in .map
and `.filter methods (#15823)
This commit is contained in:
parent
69c9d47a40
commit
42059ee099
@ -1944,6 +1944,12 @@ fn (mut c Checker) check_map_and_filter(is_map bool, elem_typ ast.Type, node ast
|
|||||||
c.error('type mismatch, should use e.g. `${node.name}(it > 2)`', arg_expr.pos)
|
c.error('type mismatch, should use e.g. `${node.name}(it > 2)`', arg_expr.pos)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ast.InfixExpr {
|
||||||
|
if arg_expr.op == .left_shift && arg_expr.is_stmt
|
||||||
|
&& c.table.final_sym(arg_expr.left_type).kind == .array {
|
||||||
|
c.error('array append cannot be used in an expression', arg_expr.pos)
|
||||||
|
}
|
||||||
|
}
|
||||||
else {}
|
else {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
vlib/v/checker/tests/array_filter_map_array_expression_as_argument_err.vv:24:19: error: array append cannot be used in an expression
|
||||||
|
22 | for k, v in current.kids {
|
||||||
|
23 | _ = visited[k] or {
|
||||||
|
24 | v.map(horizon << it)
|
||||||
|
| ~~
|
||||||
|
25 | true
|
||||||
|
26 | }
|
@ -0,0 +1,30 @@
|
|||||||
|
struct Graph {
|
||||||
|
mut:
|
||||||
|
root Node
|
||||||
|
forest []Node
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Node {
|
||||||
|
name string
|
||||||
|
mut:
|
||||||
|
kids map[string][]Node
|
||||||
|
}
|
||||||
|
|
||||||
|
fn (g Graph) pp() {
|
||||||
|
mut visited := map[string]bool{}
|
||||||
|
mut horizon := [g.root]
|
||||||
|
|
||||||
|
for horizon.len > 0 {
|
||||||
|
current := horizon.first()
|
||||||
|
horizon.delete(0)
|
||||||
|
println('$current.name -> $current.kids.keys()')
|
||||||
|
visited[current.name] = true
|
||||||
|
for k, v in current.kids {
|
||||||
|
_ = visited[k] or {
|
||||||
|
v.map(horizon << it)
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
println('HORIZON = $horizon')
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user