diff options
| author | Niko Matsakis <niko@alum.mit.edu> | 2012-02-12 07:17:42 -0800 |
|---|---|---|
| committer | Niko Matsakis <niko@alum.mit.edu> | 2012-02-13 06:50:58 -0800 |
| commit | 4eb52f69a9ebd39af4545fe7583f843edaa1a07d (patch) | |
| tree | 795180045e1687b23a6e69709f5b8bf8815f0f59 | |
| parent | a7641e99e8e6830e4242cfe441a867eb6e955694 (diff) | |
| download | rust-4eb52f69a9ebd39af4545fe7583f843edaa1a07d.tar.gz rust-4eb52f69a9ebd39af4545fe7583f843edaa1a07d.zip | |
do not fail if iface/impl method have different number of parameters
| -rw-r--r-- | src/comp/middle/typeck.rs | 7 | ||||
| -rw-r--r-- | src/test/compile-fail/iface-impl-different-num-params.rs | 11 |
2 files changed, 18 insertions, 0 deletions
diff --git a/src/comp/middle/typeck.rs b/src/comp/middle/typeck.rs index 6a49e288701..f80e20bd701 100644 --- a/src/comp/middle/typeck.rs +++ b/src/comp/middle/typeck.rs @@ -620,6 +620,13 @@ fn compare_impl_method(tcx: ty::ctxt, sp: span, impl_m: ty::method, tcx.sess.span_err(sp, "method `" + if_m.ident + "` has an incompatible set of type parameters"); ty::mk_fn(tcx, impl_m.fty) + } else if vec::len(impl_m.fty.inputs) != vec::len(if_m.fty.inputs) { + tcx.sess.span_err(sp,#fmt["method `%s`` has %u parameters \ + but the iface has %u", + if_m.ident, + vec::len(impl_m.fty.inputs), + vec::len(if_m.fty.inputs)]); + ty::mk_fn(tcx, impl_m.fty) } else { let auto_modes = vec::map2(impl_m.fty.inputs, if_m.fty.inputs, {|i, f| alt ty::get(f.ty).struct { diff --git a/src/test/compile-fail/iface-impl-different-num-params.rs b/src/test/compile-fail/iface-impl-different-num-params.rs new file mode 100644 index 00000000000..979871b3cd7 --- /dev/null +++ b/src/test/compile-fail/iface-impl-different-num-params.rs @@ -0,0 +1,11 @@ +iface foo { + fn bar(x: uint) -> self; +} +impl of foo for int { + fn bar() -> int { + self + } +} + +fn main() { +} |
