about summary refs log tree commit diff
path: root/src/libsyntax/ext
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2014-08-04 13:56:56 -0700
committerPatrick Walton <pcwalton@mimiga.net>2014-08-14 11:40:22 -0700
commit9907fa4acc2af5b2b07d1362b3ceb29171954c58 (patch)
tree6acf4c541c9321d8a304eb16f486b09755983c52 /src/libsyntax/ext
parent404978ea722c0257cc763540c93243e8a21f82ed (diff)
downloadrust-9907fa4acc2af5b2b07d1362b3ceb29171954c58.tar.gz
rust-9907fa4acc2af5b2b07d1362b3ceb29171954c58.zip
librustc: Stop assuming that implementations and traits only contain
methods.

This paves the way to associated items by introducing an extra level of
abstraction ("impl-or-trait item") between traits/implementations and
methods. This new abstraction is encoded in the metadata and used
throughout the compiler where appropriate.

There are no functional changes; this is purely a refactoring.
Diffstat (limited to 'src/libsyntax/ext')
-rw-r--r--src/libsyntax/ext/deriving/generic/mod.rs9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/libsyntax/ext/deriving/generic/mod.rs b/src/libsyntax/ext/deriving/generic/mod.rs
index 5842ca4a0d5..7a8ee6d1416 100644
--- a/src/libsyntax/ext/deriving/generic/mod.rs
+++ b/src/libsyntax/ext/deriving/generic/mod.rs
@@ -452,8 +452,13 @@ impl<'a> TraitDef<'a> {
             self.span,
             ident,
             (vec!(attr)).append(self.attributes.as_slice()),
-            ast::ItemImpl(trait_generics, opt_trait_ref,
-                          self_type, methods))
+            ast::ItemImpl(trait_generics,
+                          opt_trait_ref,
+                          self_type,
+                          methods.move_iter()
+                                 .map(|method| {
+                                     ast::MethodImplItem(method)
+                                 }).collect()))
     }
 
     fn expand_struct_def(&self,