checker: fix for in range type mismatch
parent
5edd9cdc3a
commit
be3bd520f6
|
@ -1105,6 +1105,16 @@ fn (c mut Checker) stmt(node ast.Stmt) {
|
||||||
c.in_for_count++
|
c.in_for_count++
|
||||||
typ := c.expr(it.cond)
|
typ := c.expr(it.cond)
|
||||||
if it.is_range {
|
if it.is_range {
|
||||||
|
high_type := c.expr(it.high)
|
||||||
|
if typ in table.integer_type_idxs && high_type !in table.integer_type_idxs {
|
||||||
|
c.error('range types do not match', it.cond.position())
|
||||||
|
} else if typ in table.float_type_idxs || high_type in table.float_type_idxs {
|
||||||
|
c.error('range type can not be float', it.cond.position())
|
||||||
|
} else if typ == table.bool_type_idx || high_type == table.bool_type_idx {
|
||||||
|
c.error('range type can not be bool', it.cond.position())
|
||||||
|
} else if typ == table.string_type_idx || high_type == table.string_type_idx {
|
||||||
|
c.error('range type can not be string', it.cond.position())
|
||||||
|
}
|
||||||
c.expr(it.high)
|
c.expr(it.high)
|
||||||
} else {
|
} else {
|
||||||
mut scope := c.file.scope.innermost(it.pos.pos)
|
mut scope := c.file.scope.innermost(it.pos.pos)
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
vlib/v/checker/tests/inout/for_in_range_not_match_type.v:2:11: error: range types do not match
|
||||||
|
1| fn main() {
|
||||||
|
2| for i in 10..10.5 {
|
||||||
|
~~
|
||||||
|
3| println(i)
|
||||||
|
4| }
|
|
@ -0,0 +1,5 @@
|
||||||
|
fn main() {
|
||||||
|
for i in 10..10.5 {
|
||||||
|
println(i)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
vlib/v/checker/tests/inout/for_in_range_string_type.v:2:11: error: range type can not be string
|
||||||
|
1| fn main() {
|
||||||
|
2| for i in 'a'..'b' {
|
||||||
|
~~~
|
||||||
|
3| println(i)
|
||||||
|
4| }
|
|
@ -0,0 +1,5 @@
|
||||||
|
fn main() {
|
||||||
|
for i in 'a'..'b' {
|
||||||
|
println(i)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue