|
@@ -27,19 +27,19 @@ let floatconst value = Const (FloatVal value, [Type Float])
|
|
|
|
|
|
|
|
let rec trav_binop = function
|
|
let rec trav_binop = function
|
|
|
| ((Eq | Ne) as op, left, right, loc) ->
|
|
| ((Eq | Ne) as op, left, right, loc) ->
|
|
|
- Binop (op, cast Int left, cast Int right, loc)
|
|
|
|
|
|
|
+ Binop (op, cast Int (bool_op left), cast Int (bool_op right), loc)
|
|
|
|
|
|
|
|
| (And, left, right, loc) ->
|
|
| (And, left, right, loc) ->
|
|
|
- Cond (left, right, boolconst false, loc)
|
|
|
|
|
|
|
+ Cond (bool_op left, bool_op right, boolconst false, loc)
|
|
|
|
|
|
|
|
| (Or, left, right, loc) ->
|
|
| (Or, left, right, loc) ->
|
|
|
- Cond (left, boolconst true, right, loc)
|
|
|
|
|
|
|
+ Cond (bool_op left, boolconst true, bool_op right, loc)
|
|
|
|
|
|
|
|
| ((Add | Mul) as op, left, right, loc) ->
|
|
| ((Add | Mul) as op, left, right, loc) ->
|
|
|
- cast Bool (Binop (op, cast Int left, cast Int right, loc))
|
|
|
|
|
|
|
+ cast Bool (Binop (op, cast Int (bool_op left), cast Int (bool_op right), loc))
|
|
|
|
|
|
|
|
| (op, left, right, loc) ->
|
|
| (op, left, right, loc) ->
|
|
|
- Binop (op, left, right, loc)
|
|
|
|
|
|
|
+ Binop (op, bool_op left, bool_op right, loc)
|
|
|
|
|
|
|
|
and bool_op = function
|
|
and bool_op = function
|
|
|
| Binop (op, left, right, loc) when typeof left = Bool && typeof right = Bool ->
|
|
| Binop (op, left, right, loc) when typeof left = Bool && typeof right = Bool ->
|