mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
checker: add type check for bit op
This commit is contained in:
@@ -310,6 +310,14 @@ pub fn (c mut Checker) infix_expr(infix_expr mut ast.InfixExpr) table.Type {
|
|||||||
c.error('infix expr: cannot use `$right.name` (right expression) as `$left.name`',
|
c.error('infix expr: cannot use `$right.name` (right expression) as `$left.name`',
|
||||||
infix_expr.pos)
|
infix_expr.pos)
|
||||||
}
|
}
|
||||||
|
if infix_expr.op in [.amp, .pipe, .xor] {
|
||||||
|
if !left.is_int() {
|
||||||
|
c.error('operator ${infix_expr.op.str()} not defined on left type `$left.name`', infix_expr.pos)
|
||||||
|
}
|
||||||
|
else if !right.is_int() {
|
||||||
|
c.error('operator ${infix_expr.op.str()} not defined on right type `$right.name`', infix_expr.pos)
|
||||||
|
}
|
||||||
|
}
|
||||||
if left_type == table.bool_type && !(infix_expr.op in [.eq, .ne, .logical_or, .and]) {
|
if left_type == table.bool_type && !(infix_expr.op in [.eq, .ne, .logical_or, .and]) {
|
||||||
c.error('bool types only have the following operators defined: `==`, `!=`, `||`, and `&&`',
|
c.error('bool types only have the following operators defined: `==`, `!=`, `||`, and `&&`',
|
||||||
infix_expr.pos)
|
infix_expr.pos)
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
vlib/v/checker/tests/inout/bit_op_wrong_left_type_err.v:2:6: error: operator & not defined on left type `f64`
|
||||||
|
1| fn main() {
|
||||||
|
2| 0.5 & 1
|
||||||
|
^
|
||||||
|
3| }
|
||||||
3
vlib/v/checker/tests/inout/bit_op_wrong_left_type_err.vv
Normal file
3
vlib/v/checker/tests/inout/bit_op_wrong_left_type_err.vv
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
fn main() {
|
||||||
|
0.5 & 1
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
vlib/v/checker/tests/inout/bit_op_wrong_right_type_err.v:2:4: error: operator | not defined on right type `f64`
|
||||||
|
1| fn main() {
|
||||||
|
2| 1 | 0.5
|
||||||
|
^
|
||||||
|
3| }
|
||||||
3
vlib/v/checker/tests/inout/bit_op_wrong_right_type_err.v
Normal file
3
vlib/v/checker/tests/inout/bit_op_wrong_right_type_err.v
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
fn main() {
|
||||||
|
1 | 0.5
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user