aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--translate/ppconstrnew.ml20
1 files changed, 18 insertions, 2 deletions
diff --git a/translate/ppconstrnew.ml b/translate/ppconstrnew.ml
index 5dd8e31c8d..c30c07c3a6 100644
--- a/translate/ppconstrnew.ml
+++ b/translate/ppconstrnew.ml
@@ -341,10 +341,18 @@ let is_var id = function
| CRef (Ident (_,id')) when id=id' -> true
| _ -> false
+let tm_clash = function
+ | (CRef (Ident (_,id)), Some (_,_,nal)) when List.exists ((=) (Name id)) nal
+ -> Some id
+ | _ -> None
+
let pr_case_item pr (tm,(na,indnalopt)) =
hov 0 (pr (lcast,E) tm ++
(match na with
| Name id when not (is_var id tm) -> spc () ++ str "as " ++ pr_id id
+ | Anonymous when tm_clash (tm,indnalopt) <> None ->
+ (* hide [tm] name to avoid conflicts *)
+ spc () ++ str "as _" ++ pr_id (out_some (tm_clash (tm,indnalopt)))
| _ -> mt ()) ++
(match indnalopt with
| None -> mt ()
@@ -446,8 +454,16 @@ let rec pr inherited a =
spc() ++ pr ltop c ++ str " in") ++
spc() ++ pr ltop b),
lletin
-
-
+ | CIf (_,c,(na,po),b1,b2) ->
+ (* On force les parenthèses autour d'un "if" sous-terme (même si le
+ parsing est lui plus tolérant) *)
+ hv 0 (
+ hov 1 (str "if " ++ pr ltop c ++ pr_simple_return_type pr na po) ++
+ spc () ++
+ hov 0 (str "then" ++ brk (1,1) ++ pr ltop b1) ++ spc () ++
+ hov 0 (str "else" ++ brk (1,1) ++ pr ltop b2)),
+ lif
+
| COrderedCase (_,st,po,c,[b1;b2]) when st = IfStyle ->
(* On force les parenthèses autour d'un "if" sous-terme (même si le
parsing est lui plus tolérant) *)