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