diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index 8efe4c9944ca..a8b0f4445148 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -258,9 +258,15 @@ fn noop_fold_item_underscore(i: item_, fld: ast_fold) -> item_ { *methods, |x| fld.fold_method(*x)))) } item_trait(tps, traits, methods) => { + let methods = do methods.map |method| { + match *method { + required(*) => copy *method, + provided(method) => provided(fld.fold_method(method)) + } + }; item_trait(fold_ty_params(tps, fld), vec::map(traits, |p| fold_trait_ref(*p, fld)), - /* FIXME (#2543) */ copy methods) + move methods) } item_mac(m) => { // FIXME #2888: we might actually want to do something here. diff --git a/src/test/run-pass/traits-default-method-macro.rs b/src/test/run-pass/traits-default-method-macro.rs new file mode 100644 index 000000000000..8303df5a0c32 --- /dev/null +++ b/src/test/run-pass/traits-default-method-macro.rs @@ -0,0 +1,17 @@ +trait Foo { + fn bar() -> ~str { + fmt!("test") + } +} + +enum Baz { + Quux +} + +impl Baz: Foo { +} + +fn main() { + let q = Quux; + assert q.bar() == ~"test"; +} \ No newline at end of file