summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Garrigue <garrigue at math.nagoya-u.ac.jp>2003-12-02 13:20:54 +0000
committerJacques Garrigue <garrigue at math.nagoya-u.ac.jp>2003-12-02 13:20:54 +0000
commitf83d48d0323def8f3f83666d28d9f560ad524a2f (patch)
treee0503a448144d544504c13fa1629a6bb18d57350
parent2163ad7d20f7aa37fbe337f7f6199978f7de7f5d (diff)
downloadocaml-f83d48d0323def8f3f83666d28d9f560ad524a2f.tar.gz
check for label conflicts
git-svn-id: http://caml.inria.fr/svn/ocaml/branches/newoolab@5995 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
-rw-r--r--bytecomp/translclass.ml10
1 files changed, 9 insertions, 1 deletions
diff --git a/bytecomp/translclass.ml b/bytecomp/translclass.ml
index 4ceca87ec1..a8bf82ea24 100644
--- a/bytecomp/translclass.ml
+++ b/bytecomp/translclass.ml
@@ -645,10 +645,18 @@ let transl_class ids cl_id arity pub_meths cl =
List.sort
(fun s s' -> compare (Btype.hash_variant s) (Btype.hash_variant s'))
pub_meths in
+ let tags = List.map Btype.hash_variant pub_meths in
+ let rev_map = List.combine tags pub_meths in
+ List.iter2
+ (fun tag name ->
+ let name' = List.assoc tag rev_map in
+ if name' <> name then
+ fatal_error ("conflicting labels "^name^" and "^name'))
+ tags pub_meths;
(*
let hash_size () =
if not !Clflags.native_code then lambda_unit else
- let size = perfect_hash_size (List.map Btype.hash_variant pub_meths) in
+ let size = perfect_hash_size tags in
Lconst(Const_base(Const_int size))
in
let public_map () =