summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJérôme Vouillon <Jerome.Vouillon@pps.jussieu.fr>1997-10-21 11:33:03 +0000
committerJérôme Vouillon <Jerome.Vouillon@pps.jussieu.fr>1997-10-21 11:33:03 +0000
commitccee1d802d76e7e8cd32fcabcd3df60ada43bedd (patch)
treeaf60f4b6dc56e2964ff1da0faf73d40df7168022
parent87221a8e2988a85b1b5bcda0d0bbe27cc0108baa (diff)
Bug de unroll_abbrev
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@1729 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r--typing/ctype.ml15
1 files changed, 7 insertions, 8 deletions
diff --git a/typing/ctype.ml b/typing/ctype.ml
index 73f25f8fd..d2e3c67ff 100644
--- a/typing/ctype.ml
+++ b/typing/ctype.ml
@@ -1350,14 +1350,13 @@ let unalias ty =
let unroll_abbrev id tl ty =
let ty = repr ty in
- match ty.desc with
- Tvar ->
- ty
- | _ ->
- let ty' = {desc = ty.desc; level = ty.level} in
- ty.desc <- Tlink {desc = Tconstr (Path.Pident id, tl, ref Mnil);
- level = ty.level};
- ty'
+ if (ty.desc = Tvar) || (List.exists (deep_occur ty) tl) then
+ ty
+ else
+ let ty' = {desc = ty.desc; level = ty.level} in
+ ty.desc <- Tlink {desc = Tconstr (Path.Pident id, tl, ref Mnil);
+ level = ty.level};
+ ty'
(* Return the arity (as for curried functions) of the given type. *)
let rec arity ty =