From 90d3f0fb5e8512a3024a7ece53c8c200e8e12e28 Mon Sep 17 00:00:00 2001 From: Marijn Haverbeke Date: Tue, 3 Apr 2012 16:30:39 +0200 Subject: [PATCH] Ensure method names in iface and impl items are unique Closes #2114 --- src/rustc/middle/infer.rs | 4 ---- src/rustc/middle/resolve.rs | 14 ++++++++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/rustc/middle/infer.rs b/src/rustc/middle/infer.rs index f0e2bcf40fe1..ec7af5ff3652 100644 --- a/src/rustc/middle/infer.rs +++ b/src/rustc/middle/infer.rs @@ -1341,10 +1341,6 @@ impl of combine for glb { ok(ty::mk_bot(self.infcx().tcx)) } - fn c_regions(a: ty::region, _b: ty::region) -> cres { - ok(a) // FIXME - } - fn c_mts(a: ty::mt, b: ty::mt) -> cres { let tcx = self.infcx().tcx; diff --git a/src/rustc/middle/resolve.rs b/src/rustc/middle/resolve.rs index 972fdc186a9c..601e2ac47682 100644 --- a/src/rustc/middle/resolve.rs +++ b/src/rustc/middle/resolve.rs @@ -1727,13 +1727,21 @@ fn check_item(e: @env, i: @ast::item, &&x: (), v: vt<()>) { alt i.node { ast::item_fn(decl, ty_params, _) { check_fn(*e, i.span, decl); - ensure_unique(*e, i.span, typaram_names(ty_params), ident_id, + ensure_unique(*e, i.span, ty_params, {|tp| tp.ident}, "type parameter"); } ast::item_enum(_, ty_params) { - ensure_unique(*e, i.span, typaram_names(ty_params), ident_id, + ensure_unique(*e, i.span, ty_params, {|tp| tp.ident}, "type parameter"); } + ast::item_iface(_, methods) { + ensure_unique(*e, i.span, methods, {|m| m.ident}, + "method"); + } + ast::item_impl(_, _, _, methods) { + ensure_unique(*e, i.span, methods, {|m| m.ident}, + "method"); + } _ { } } } @@ -1871,8 +1879,6 @@ fn add_name(ch: checker, sp: span, name: ident) { ch.seen += [name]; } -fn ident_id(&&i: ident) -> ident { ret i; } - fn ensure_unique(e: env, sp: span, elts: [T], id: fn(T) -> ident, kind: str) { let ch = checker(e, kind);