X-Git-Url: http://git.annexia.org/?p=whenjobs.git;a=blobdiff_plain;f=lib%2Fwhenexpr.ml;fp=lib%2Fwhenexpr.ml;h=1301e5e401a79c2f34f57cde213aa50fb073b359;hp=c2ffa334be9c77404579d21d23a15f4192c6ce66;hb=1d0b030e3a62a905dce16d05e8816cb3da8c49eb;hpb=c1431c727621ff2fb8f1b32c8c36d96f1644880b diff --git a/lib/whenexpr.ml b/lib/whenexpr.ml index c2ffa33..1301e5e 100644 --- a/lib/whenexpr.ml +++ b/lib/whenexpr.ml @@ -41,6 +41,7 @@ type whenexpr = | Expr_eq of whenexpr * whenexpr | Expr_ge of whenexpr * whenexpr | Expr_gt of whenexpr * whenexpr + | Expr_ne of whenexpr * whenexpr | Expr_not of whenexpr | Expr_add of whenexpr * whenexpr | Expr_sub of whenexpr * whenexpr @@ -212,6 +213,9 @@ and expr_of_iexpr _loc = function | IExpr_app (">", exprs) -> two_params _loc ">" exprs (fun e1 e2 -> Expr_gt (e1, e2)) + | IExpr_app (("!="|"<>"), exprs) -> + two_params _loc "<>" exprs (fun e1 e2 -> Expr_ne (e1, e2)) + | IExpr_app ("!", exprs) -> one_param _loc "!" exprs (fun e1 -> Expr_not e1) @@ -294,6 +298,8 @@ let rec string_of_whenexpr = function sprintf "%s >= %s" (string_of_whenexpr e1) (string_of_whenexpr e2) | Expr_gt (e1, e2) -> sprintf "%s > %s" (string_of_whenexpr e1) (string_of_whenexpr e2) + | Expr_ne (e1, e2) -> + sprintf "%s <> %s" (string_of_whenexpr e1) (string_of_whenexpr e2) | Expr_not e -> sprintf "! %s" (string_of_whenexpr e) | Expr_add (e1, e2) -> sprintf "%s + %s" (string_of_whenexpr e1) (string_of_whenexpr e2) @@ -336,6 +342,7 @@ let rec dependencies_of_whenexpr = function | Expr_eq (e1, e2) | Expr_ge (e1, e2) | Expr_gt (e1, e2) + | Expr_ne (e1, e2) | Expr_add (e1, e2) | Expr_sub (e1, e2) | Expr_mul (e1, e2) @@ -419,6 +426,14 @@ let rec eval_whenexpr variables prev_variables onload = function else T_bool false + | Expr_ne (e1, e2) -> + let e1 = eval_whenexpr variables prev_variables onload e1 + and e2 = eval_whenexpr variables prev_variables onload e2 in + if compare_values e1 e2 <> 0 then + T_bool true + else + T_bool false + | Expr_not e -> if not (eval_whenexpr_as_bool variables prev_variables onload e) then T_bool true