From dab569d8ad608e0a0363495ae9af48619081e2eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Pasteur?= Date: Tue, 13 Jul 2010 14:42:46 +0200 Subject: [PATCH] Add missing case for ifthenelse --- compiler/main/mls2obc.ml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/compiler/main/mls2obc.ml b/compiler/main/mls2obc.ml index 2cb683f..e98ecce 100644 --- a/compiler/main/mls2obc.ml +++ b/compiler/main/mls2obc.ml @@ -156,15 +156,25 @@ let rec translate_eq map { Minils.eq_lhs = pat; Minils.eq_rhs = e } m, si, j, s | Minils.Etuplepat p_list, - Minils.Eapp({ Minils.a_op = Minils.Etuple }, act_list, _) -> + Minils.Eapp({ Minils.a_op = Minils.Etuple }, act_list, _) -> List.fold_right2 (fun pat e -> translate_eq map (Minils.mk_equation pat e)) p_list act_list (m, si, j, s) + | pat, Minils.Eapp({ Minils.a_op = Minils.Eifthenelse }, [e1;e2;e3], _) -> + let cond = translate map (m, si, j, s) e1 in + let m, si, j, true_act = translate_eq map + (Minils.mk_equation pat e2) (m, si, j, s) in + let m, si, j, false_act = translate_eq map + (Minils.mk_equation pat e3) (m, si, j, s) in + let action = Acase (cond, [Name "true", true_act; + Name "false", false_act]) in + m, si, j, (control map ck action) :: s + | Minils.Evarpat x, - Minils.Eapp ({ Minils.a_op = Minils.Efield_update; + Minils.Eapp ({ Minils.a_op = Minils.Efield_update; Minils.a_params = [{ se_desc = Sconstructor f }] }, [e1; e2], _) -> let x = var_from_name map x in