Browse Source

minor check for enums

Nicolas Cannasse 16 years ago
parent
commit
505f61bb93
1 changed files with 7 additions and 1 deletions
  1. 7 1
      typeload.ml

+ 7 - 1
typeload.ml

@@ -952,7 +952,13 @@ let type_module ctx m tdecls loadp =
 				if c = "name" && Common.defined ctx.com "js" then error "This identifier cannot be used in Javascript" p;
 				if c = "name" && Common.defined ctx.com "js" then error "This identifier cannot be used in Javascript" p;
 				let t = (match t with
 				let t = (match t with
 					| [] -> et
 					| [] -> et
-					| l -> TFun (List.map (fun (s,opt,t) -> s, opt, load_type_opt ~opt ctx p (Some t)) l, et)
+					| l ->
+						let pnames = ref PMap.empty in
+						TFun (List.map (fun (s,opt,t) -> 
+							if PMap.mem s (!pnames) then error ("Duplicate parameter '" ^ s ^ "' in enum constructor " ^ c) p;
+							pnames := PMap.add s () (!pnames);
+							s, opt, load_type_opt ~opt ctx p (Some t)
+						) l, et)
 				) in
 				) in
 				if PMap.mem c e.e_constrs then error ("Duplicate constructor " ^ c) p;
 				if PMap.mem c e.e_constrs then error ("Duplicate constructor " ^ c) p;
 				e.e_constrs <- PMap.add c {
 				e.e_constrs <- PMap.add c {