summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>1996-11-13 15:32:07 +0000
committerXavier Leroy <xavier.leroy@inria.fr>1996-11-13 15:32:07 +0000
commitc226d38b4f19312510bc309dd84d72befd6833d2 (patch)
tree00b9003b5b6e5305b4d253c92b82ec8b3ac9d4b8
parent1c3d3b17d20f607828a9eed6d837c394b6b6e6ae (diff)
Dans les declarations de la forme
type t = t' = A of ... | B of ... substituer t par t' dans les ... afin de comparer correctement les definitions de t et t' meme si elles sont recursives. Aussi: meilleure verification que t et t' ont les memes parametres. git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@1191 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r--typing/typedecl.ml8
1 files changed, 7 insertions, 1 deletions
diff --git a/typing/typedecl.ml b/typing/typedecl.ml
index 00a05c421..205dab3ba 100644
--- a/typing/typedecl.ml
+++ b/typing/typedecl.ml
@@ -125,7 +125,13 @@ let transl_declaration env (name, sdecl) id =
Tconstr(path, args, _) ->
begin try
let decl' = Env.find_type path env in
- if args = params & Includecore.type_declarations env id decl decl'
+ if List.length args = List.length params
+ && List.for_all2 (fun v1 v2 -> Ctype.repr v1 == Ctype.repr v2)
+ args params
+ && Includecore.type_declarations env id
+ (Subst.type_declaration (Subst.add_type id path Subst.identity)
+ decl)
+ decl'
then ()
else raise(Error(sdecl.ptype_loc, Definition_mismatch ty))
with Not_found ->